diff -r 4bdfb6b5c9b4 -r b67379558a75 imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnailrequestactive.cpp --- a/imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnailrequestactive.cpp Wed Jun 23 18:33:48 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnailrequestactive.cpp Tue Jul 06 14:37:18 2010 +0300 @@ -163,6 +163,14 @@ TN_DEBUG2( "CThumbnailRequestActive::StartL() - file handle opened for %S", &iPath ); CleanupClosePushL( iFile ); + + if ( iParams.iQualityPreference == CThumbnailManager::EOptimizeForQualityWithPreview ) + { + // We may need the file handle later for the 2nd phase thumbnail + iMyFileHandle.Close(); + User::LeaveIfError( iMyFileHandle.Duplicate( iFile )); + } + iSession.RequestThumbnailL( iFile, iPath, iParamsPckg, iStatus ); CleanupStack::PopAndDestroy( &iFile ); } @@ -197,6 +205,14 @@ TN_DEBUG2( "CThumbnailRequestActive::StartL() - file handle opened for %S", &iTargetUri ); CleanupClosePushL( iFile ); + + if ( iParams.iQualityPreference == CThumbnailManager::EOptimizeForQualityWithPreview ) + { + // We may need the file handle later for the 2nd phase thumbnail + iMyFileHandle.Close(); + User::LeaveIfError( iMyFileHandle.Duplicate( iFile )); + } + iSession.RequestThumbnailL( iFile, iTargetUri, iParamsPckg, iStatus ); CleanupStack::PopAndDestroy( &iFile ); break; @@ -220,6 +236,29 @@ iSession.RenameThumbnails( iParamsPckg, iStatus ); break; } + case EReqSetThumbnailPath: + { + // open file handle + iFile.Close(); + User::LeaveIfError( iFile.Open( iFs, iParams.iFileName, EFileShareReadersOrWriters ) ); + + TN_DEBUG2( "CThumbnailRequestActive::StartL() - file handle opened for %S", &iParams.iFileName ); + + CleanupClosePushL( iFile ); + + if ( iParams.iQualityPreference == CThumbnailManager::EOptimizeForQualityWithPreview ) + { + // We may need the file handle later for the 2nd phase thumbnail + iMyFileHandle.Close(); + User::LeaveIfError( iMyFileHandle.Duplicate( iFile )); + } + + iSession.RequestThumbnailL( iFile, iTargetUri, iParamsPckg, iStatus ); + CleanupStack::PopAndDestroy( &iFile ); + + break; + } + default: { break; @@ -651,10 +690,20 @@ iParams.iThumbnailSize = aThumbnailSize; iParams.iThumbnailId = aThumbnailId; iParams.iOverwrite = EFalse; + iParams.iImport = EFalse; User::LeaveIfError( iFile.Duplicate( aFile )); iTargetUri = aTargetUri; + + if (iParams.iFileName.Length() && IsVirtualUri(iParams.iFileName)) + { + iParams.iVirtualUri = ETrue; + } + else + { + iParams.iVirtualUri = EFalse; + } } @@ -687,8 +736,18 @@ iParams.iThumbnailSize = aThumbnailSize; iParams.iThumbnailId = aThumbnailId; iParams.iOverwrite = EFalse; + iParams.iImport = EFalse; iTargetUri = aTargetUri; + + if (iPath.Length() && IsVirtualUri(iPath)) + { + iParams.iVirtualUri = ETrue; + } + else + { + iParams.iVirtualUri = EFalse; + } } @@ -721,9 +780,19 @@ iParams.iThumbnailId = aThumbnailId; iParams.iFileName = aPath; iParams.iOverwrite = EFalse; + iParams.iImport = EFalse; iPath = aPath; iTargetUri = aTargetUri; + + if (iPath.Length() && IsVirtualUri(iPath)) + { + iParams.iVirtualUri = ETrue; + } + else + { + iParams.iVirtualUri = EFalse; + } } // --------------------------------------------------------------------------- @@ -757,8 +826,18 @@ iParams.iQualityPreference = aQualityPreference; iParams.iThumbnailId = aThumbnailId; iParams.iOverwrite = aOverwrite; + iParams.iImport = EFalse; iTargetUri = aTargetUri; + + if (iTargetUri.Length() && IsVirtualUri(iTargetUri)) + { + iParams.iVirtualUri = ETrue; + } + else + { + iParams.iVirtualUri = EFalse; + } } // --------------------------------------------------------------------------- @@ -789,9 +868,19 @@ iParams.iThumbnailId = aThumbnailId; iParams.iFileName = aTargetUri; iParams.iOverwrite = aOverwrite; + iParams.iImport = EFalse; iTargetUri = aTargetUri; + if (iTargetUri.Length() && IsVirtualUri(iTargetUri)) + { + iParams.iVirtualUri = ETrue; + } + else + { + iParams.iVirtualUri = EFalse; + } + TInt memoryFree( 0 ); HAL::Get( HALData::EMemoryRAMFree, memoryFree ); @@ -804,7 +893,7 @@ iParams.iMimeType = TDataType( aMimeType ); iRequestType = EReqSetThumbnailBitmap; } - else + else if (!iParams.iVirtualUri) { // memory low, create thumbs using filehandle TN_DEBUG1( "CThumbnaiRequestActive::SetThumbnailbyBitmap() - memory low, create thumbs using filehandle!" ); @@ -813,6 +902,10 @@ iParams.iPriority = aPriority - 1; iRequestType = EReqGetThumbnailHandleLater; } + else + { + User::Leave(KErrNoMemory); + } } // --------------------------------------------------------------------------- @@ -838,6 +931,8 @@ iParams.iQualityPreference = aQualityPreference; iParams.iThumbnailId = aThumbnailId; iParams.iOverwrite = EFalse; + iParams.iVirtualUri = EFalse; + iParams.iImport = EFalse; iPath = aPath; iOrientation = aOrientation; @@ -878,6 +973,51 @@ } // --------------------------------------------------------------------------- +// CThumbnailRequestActive::SetThumbnailL() +// Set thumbnail from file path. +// --------------------------------------------------------------------------- +// +void CThumbnailRequestActive::SetThumbnailL( const TDesC& aPath, const TDesC8& aMimeType, + CThumbnailManager::TThumbnailFlags aFlags, CThumbnailManager + ::TThumbnailQualityPreference aQualityPreference, const TSize& aSize, const + TDisplayMode aDisplayMode, const TInt aPriority, TAny* aClientData, + TBool aGeneratePersistentSizesOnly, const TDesC& aTargetUri, + TThumbnailSize aThumbnailSize, TBool aOverwrite) + { + iRequestType = EReqSetThumbnailPath; + + iClientData = aClientData; + iParams.iControlFlags = (aGeneratePersistentSizesOnly ? + EThumbnailGeneratePersistentSizesOnly : + EThumbnailNoControlFlags); + iParams.iOriginalControlFlags = iParams.iControlFlags; + iParams.iMimeType = TDataType( aMimeType ); + iParams.iBitmapHandle = 0; + iParams.iSize = aSize; + iParams.iDisplayMode = aDisplayMode; + iParams.iFileName = aPath; + iParams.iRequestId = iRequestId; + iParams.iPriority = aPriority; + iParams.iFlags = aFlags; + iParams.iQualityPreference = aQualityPreference; + iParams.iThumbnailSize = aThumbnailSize; + iParams.iOverwrite = aOverwrite; + + iTargetUri = aTargetUri; + + if (iTargetUri.Length() && IsVirtualUri(iTargetUri)) + { + iParams.iVirtualUri = ETrue; + } + else + { + iParams.iVirtualUri = EFalse; + } + + iParams.iImport = ETrue; + } + +// --------------------------------------------------------------------------- // Request 2nd phase thumbnail // --------------------------------------------------------------------------- // @@ -970,4 +1110,26 @@ return KErrNone; } +// --------------------------------------------------------------------------- +// CThumbnailRequestActive::IsVirtualUri() +// Checks if URI is virtual. +// --------------------------------------------------------------------------- +// +TBool CThumbnailRequestActive::IsVirtualUri( const TDesC& aPath ) + { + TInt pos = aPath.Find(KBackSlash); + + // normal URI + if ( pos == 2 ) + { + return EFalse; + } + // virtual URI + else + { + TN_DEBUG1( "CThumbnailRequestActive::IsVirtualUri() - yes"); + return ETrue; + } + } + // End of file