diff -r 7858bc6ead78 -r 9d8b04ca6939 usbuis/imageprintuiprovider/src/caiwimageprintIf.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/usbuis/imageprintuiprovider/src/caiwimageprintIf.cpp Fri Jun 04 10:27:39 2010 +0100 @@ -0,0 +1,197 @@ +/* +* Copyright (c) 2006, 2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Check if file is OK for printing +* +*/ + + + +//External includes +#include +#include +#include +#include +#include +#include +#include + +//Internal includes +#include "caiwimageprintif.h" +#include "imageprintuidebug.h" + + +_LIT8( KJpegFileType, "image/jpeg" ); +_LIT( KJpegFileType16, "image/jpeg" ); + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CAiwImagePrintIf::~CAiwImagePrintIf() + { + iEikEnv.FsSession().Delete(*iPrintFileName); + iEikEnv.FsSession().Delete(*iUnsuppFileName); + iEikEnv.DeleteResourceFile( iResourceOffset ); + delete iDRM; + delete iPrintFileName; + delete iUnsuppFileName; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CAiwImagePrintIf::CAiwImagePrintIf():iEikEnv( *CEikonEnv::Static() ) + { + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CAiwImagePrintIf::ConstructL() + { + + TFileName file( KResource ); + file = PathInfo::RomRootPath(); + TBuf length2(KResourceFile); + file.SetLength(KDriver + length2.Length()); + file.Replace(KDriver, length2.Length(), KResourceFile); + + BaflUtils::NearestLanguageFile( iEikEnv.FsSession(), file ); + iResourceOffset = iEikEnv.AddResourceFileL( file ); + iDRM = DRMCommon::NewL(); + User::LeaveIfError( iDRM->Connect() ); + iNumberOfUnSuppFiles = 0; + + + TFileName printNameFile( KResource ); + printNameFile = PathInfo::PhoneMemoryRootPath(); + TBuf length3(KParamFile); + printNameFile.SetLength(KDriver + length3.Length()); + printNameFile.Replace(KDriver, length3.Length(), KParamFile); + + iPrintFileName = HBufC::NewL(printNameFile.Length() ); + iPrintFileName->Des().Copy(printNameFile); + + TFileName unSuppFile( KResource ); + unSuppFile = PathInfo::PhoneMemoryRootPath(); + TBuf lengthUn(KUnSuppFile); + unSuppFile.SetLength(KDriver + lengthUn.Length()); + unSuppFile.Replace(KDriver, lengthUn.Length(), KUnSuppFile); + + iUnsuppFileName = HBufC::NewL(unSuppFile.Length() ); + iUnsuppFileName->Des().Copy(unSuppFile); + + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TBool CAiwImagePrintIf::IsPrintingSupported( const CAiwGenericParamList& aInParamList ) + { + TInt index(0); + FLOG(_L("[CAiwImagePrintIf] IsPrintingSupported ")); + const TAiwGenericParam* param = aInParamList.FindFirst( index, EGenericParamMIMEType ); + TBool printable( EFalse ); + + if ( index == KErrNotFound ) + { + index = 0; + const TAiwGenericParam* param = aInParamList.FindFirst(index, EGenericParamFile, EVariantTypeDesC); + + //Check if there is any printable images available. At least image must be + //JPEG and it also must be unprotected to be printable. + while ( index != KErrNotFound && !printable) + { + FLOG(_L("[CAiwImagePrintIf] IsPrintingSupported 3")); + TRAP_IGNORE( printable = IsPrintingSupportedL( param->Value().AsDes() )); + param = aInParamList.FindNext(index, EGenericParamFile, EVariantTypeDesC); + } + FTRACE(FPrint(_L("[CAiwImagePrintIf] IsPrintingSupported printable is %d"), printable )); + return printable; + } + + while ( index != KErrNotFound && !printable ) + { + if ( param->Value().TypeId() == EVariantTypeDesC && + param->Value().AsDes() == KJpegFileType16 ) + { + // MIME-type parameter follows filename parameter in parameter list. + // Because of that previous item in list is used. + if (index > 0) + { + FLOG(_L("[CAiwImagePrintIf] IsPrintingSupported 5")); + printable = !IsProtected( aInParamList[index-1].Value().AsDes() ); + } + } + + if ( !printable ) + { + param = aInParamList.FindNext(index, EGenericParamMIMEType); + } + } + FTRACE(FPrint(_L("[CAiwImagePrintIf] IsPrintingSupported 2 printable is %d"), printable )); + return printable; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TBool CAiwImagePrintIf::IsPrintingSupportedL( const TDesC& aFileName ) + { + //1. check: Mimetype should be correct (JPEG) + FLOG(_L("[CAiwImagePrintIf] IsPrintingSupported TBool 1")); + TBool printable = CheckMIMETypeL( KJpegFileType, aFileName ); + + if (printable) + { + //2. check: file should not be protected + printable = !IsProtected( aFileName ); + } + FTRACE(FPrint(_L("[CAiwImagePrintIf] IsPrintingSupportedL TBool printable is %d"), printable )); + return printable; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TBool CAiwImagePrintIf::IsProtected( const TDesC& aFileName ) + { + TBool fileProtect; + TInt err = iDRM->IsProtectedFile( aFileName, fileProtect ); + FTRACE(FPrint(_L("[CAiwImagePrintIf] IsProtected retVal is %d"), err ? ETrue : fileProtect )); + return err ? ETrue : fileProtect; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TBool CAiwImagePrintIf::CheckMIMETypeL( const TDesC8& aMimeType, + const TDesC& aFileName ) + { + TBuf8<128> mimeType(0); + CImageDecoder::GetMimeTypeFileL(iEikEnv.FsSession(), aFileName, mimeType); + + // Check that MIME-type matches (compare returns 0), otherwise return EFalse + FTRACE(FPrint(_L("[CAiwImagePrintIf] CheckMIMETypeL retVal is %d"), mimeType.CompareF( aMimeType ) ? EFalse : ETrue )); + return mimeType.CompareF( aMimeType ) ? EFalse : ETrue; + } + +// End of file