diff -r 60bb012f1157 -r 9e8b0cc88842 imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailgeneratetask.cpp --- a/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailgeneratetask.cpp Wed Sep 15 12:32:44 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailgeneratetask.cpp Wed Oct 13 14:53:56 2010 +0300 @@ -43,13 +43,12 @@ const TSize& aSize, TDisplayMode aDisplayMode, TInt aPriority, RArray < TThumbnailPersistentSize >* aMissingSizes, const TDesC& aTargetUri, TThumbnailSize aThumbnailSize, const TInt64 aModified, - const CThumbnailManager::TThumbnailQualityPreference aQualityPreference, - TBool aVirtualUri ): + const CThumbnailManager::TThumbnailQualityPreference aQualityPreference ): CThumbnailTask( aProcessor, aPriority ), iServer( aServer ), iFlags( aFlags ), iSize( aSize ), iDisplayMode( aDisplayMode ), iMissingSizes( aMissingSizes ), iTargetUri( aTargetUri ), iThumbnailSize( aThumbnailSize ), iModified(aModified), - iQualityPreference( aQualityPreference ), iVirtualUri( aVirtualUri ) + iQualityPreference( aQualityPreference ) { TN_DEBUG2( "CThumbnailGenerateTask(0x%08x)::CThumbnailGenerateTask()", this); @@ -95,7 +94,6 @@ { iMissingSizes->Reset(); delete iMissingSizes; - iMissingSizes = NULL; } if ( iBitmapHandle ) @@ -127,11 +125,11 @@ aStart.UniversalTime(); #endif - TBuf8< KMaxDataTypeLength > mimeType; - - if ( (!iVirtualUri && iFilename.Right(KExtLength).CompareF(KNonEmbeddedArtExt) == 0) || - (iVirtualUri && iTargetUri.Right(KExtLength).CompareF(KContactExt) == 0) ) // tparse panics with virtual URI - { + TParsePtrC parse(iFilename); + TPtrC ext(parse.Ext()); + TBuf8< KMaxDataTypeLength > mimeType; + if (ext.CompareF(KNonEmbeddedArtExt)== 0) + { mimeType.Copy( KImageMime ); } else @@ -140,7 +138,8 @@ } iProvider = iServer.ResolveProviderL(mimeType); - TN_DEBUG3( "CThumbnailGenerateTask(0x%08x) -- provider UID 0x%08x", this, iProvider->Uid()); + TN_DEBUG3( "CThumbnailGenerateTask(0x%08x) -- provider UID 0x%08x", this, + iProvider->Uid()); __ASSERT_DEBUG(( iProvider ), ThumbnailPanic( EThumbnailNullPointer )); @@ -198,7 +197,6 @@ void CThumbnailGenerateTask::DoCancel() { TN_DEBUG2( "CThumbnailGenerateTask(0x%08x)::DoCancel()", this ); - if ( iProvider ) { iProvider->CancelGetThumbnail(); @@ -330,31 +328,11 @@ // compTask is the scale task which returns the bitmap to the client CThumbnailScaleTask* complTask = NULL; - TInt err1 = KErrNone; - TInt err2 = KErrNone; - TBool isPublic = ETrue; - TBool isPublic2 = ETrue; - - if(iFilename != KNullDesC) - { - TRAP(err1, iServer.StoreForPathL(iFilename)); - - isPublic = iServer.IsPublicPath( iFilename ); - } - if(iTargetUri != KNullDesC ) - { - TRAP(err2, iServer.StoreForPathL(iTargetUri)); - - isPublic2 = iServer.IsPublicPath( iTargetUri ); - } - - // check if need to create more than one scale task if ( iMissingSizes ) { const TInt count = iMissingSizes->Count(); - // scale small thumbs first, because fullscreen encoding takes longer - for ( TInt i( count-1 ); i >= 0; i-- ) + for ( TInt i( 0 ); i < count; i++ ) { TThumbnailSize size = (*iMissingSizes)[ i ].iType; #ifdef _DEBUG @@ -366,8 +344,7 @@ if ( size == EFullScreenThumbnailSize || size == EVideoFullScreenThumbnailSize || size == EAudioFullScreenThumbnailSize || - size == EImageFullScreenThumbnailSize || - size == EContactFullScreenThumbnailSize ) + size == EImageFullScreenThumbnailSize ) { TN_DEBUG2( "*iMissingSizes)[ i ].iWidth == %d", (*iMissingSizes)[ i ].iSize.iWidth ); TN_DEBUG2( "*iMissingSizes)[ i ].iHeight == %d", (*iMissingSizes)[ i ].iSize.iHeight ); @@ -382,23 +359,41 @@ CThumbnailScaleTask* complTask = CThumbnailScaleTask::NewL( iProcessor, iServer, iFilename, aBitmap, iOriginalSize, (*iMissingSizes)[ i ].iSize, (*iMissingSizes)[ i ].iCrop, iDisplayMode, KMaxPriority, iTargetUri, (*iMissingSizes)[ i ].iType, iModified, iScaledBitmapToPool, iEXIF, - iRequestId, iVirtualUri); + iRequestId); CleanupStack::PushL( complTask ); + TInt err1 = KErrNone; + TInt err2 = KErrNone; + + if(iFilename != KNullDesC) + { + TRAP(err1, iServer.StoreForPathL(iFilename)); + } + + if(iTargetUri != KNullDesC ) + { + TRAP(err2, iServer.StoreForPathL(iTargetUri)); + } // if trying to access Z drive, don't try to store // don't want to store custom sizes - // don't store if from private directory - if( !isPublic || !isPublic2 || - err1 == KErrAccessDenied || err2 == KErrAccessDenied || - (*iMissingSizes)[ i ].iType == ECustomThumbnailSize || - (*iMissingSizes)[ i ].iType == EUnknownThumbnailSize ) + if( err1 == KErrAccessDenied || err2 == KErrAccessDenied || + (*iMissingSizes)[ i ].iType == ECustomThumbnailSize || + (*iMissingSizes)[ i ].iType == EUnknownThumbnailSize ) { complTask->SetDoStore( EFalse ); TN_DEBUG2( "CThumbnailGenerateTask(0x%08x)::CreateScaleTasksL() - do not store", this ); } else { - complTask->SetDoStore( ETrue ); + if(iFilename != KNullDesC) + { + complTask->SetDoStore(iServer.IsPublicPath( iFilename )); + } + + if(iTargetUri != KNullDesC) + { + complTask->SetDoStore(iServer.IsPublicPath( iTargetUri )); + } } iProcessor.AddTaskL( complTask ); @@ -420,8 +415,7 @@ if ( iThumbnailSize == EFullScreenThumbnailSize || iThumbnailSize == EVideoFullScreenThumbnailSize || iThumbnailSize == EAudioFullScreenThumbnailSize || - iThumbnailSize == EImageFullScreenThumbnailSize || - iThumbnailSize == EContactFullScreenThumbnailSize) + iThumbnailSize == EImageFullScreenThumbnailSize ) { TInt width = iSize.iWidth; iSize.iWidth = iSize.iHeight; @@ -432,14 +426,22 @@ complTask = CThumbnailScaleTask::NewL( iProcessor, iServer, iFilename, aBitmap, iOriginalSize, iSize, iFlags& CThumbnailManager ::ECropToAspectRatio, iDisplayMode, KMaxPriority, iTargetUri, - iThumbnailSize, iModified, iScaledBitmapToPool, iEXIF, iRequestId, - iVirtualUri); + iThumbnailSize, iModified, iScaledBitmapToPool, iEXIF, iRequestId ); CleanupStack::PushL( complTask ); + TInt err1 = KErrNone; + TInt err2 = KErrNone; + if(iFilename != KNullDesC) + { + TRAP(err1, iServer.StoreForPathL(iFilename)); + } + if(iTargetUri != KNullDesC) + { + TRAP(err2, iServer.StoreForPathL(iTargetUri)); + } // if trying to access Z drive, don't try to store // don't want to store custom sizes - if( !isPublic || !isPublic2 || - err1 == KErrAccessDenied || err2 == KErrAccessDenied || + if( err1 == KErrAccessDenied || err2 == KErrAccessDenied || iThumbnailSize == ECustomThumbnailSize || iThumbnailSize == EUnknownThumbnailSize ) { @@ -448,7 +450,15 @@ } else { - complTask->SetDoStore( ETrue ); + if(iFilename != KNullDesC) + { + complTask->SetDoStore(iServer.IsPublicPath( iFilename )); + } + + if(iTargetUri != KNullDesC) + { + complTask->SetDoStore(iServer.IsPublicPath( iTargetUri )); + } } iProcessor.AddTaskL( complTask ); @@ -496,16 +506,16 @@ if(iFilename != KNullDesC) { iServer.StoreForPathL( iFilename )->StoreThumbnailL( - iFilename, tempBitmap, aOriginalSize, EFalse, iThumbnailSize, iModified, !iVirtualUri, ETrue ); + iFilename, tempBitmap, aOriginalSize, EFalse, iThumbnailSize, iModified, EFalse, ETrue ); //remove result from fetched checker - iServer.FetchedChecker().SetFetchResult( iFilename, iThumbnailSize, KErrNone ); + iServer.FetchedChecker().SetFetchResult( iFilename, KErrNone ); } else if(iTargetUri != KNullDesC) { iServer.StoreForPathL( iTargetUri )->StoreThumbnailL( - iTargetUri, tempBitmap, aOriginalSize, EFalse, iThumbnailSize, iModified, !iVirtualUri, ETrue ); + iTargetUri, tempBitmap, aOriginalSize, EFalse, iThumbnailSize, iModified, EFalse, ETrue ); //remove result from fetched checker - iServer.FetchedChecker().SetFetchResult( iTargetUri, iThumbnailSize, KErrNone ); + iServer.FetchedChecker().SetFetchResult( iTargetUri, KErrNone ); } CleanupStack::PopAndDestroy( tempBitmap );