imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnailrequestactive.cpp
branchRCL_3
changeset 9 dea39715fc05
parent 7 2eb74cf6572e
child 10 ee674526fac5
equal deleted inserted replaced
8:7403edfcf0fb 9:dea39715fc05
    84 CThumbnailRequestActive::CThumbnailRequestActive( RFs& aFs, RThumbnailSession&
    84 CThumbnailRequestActive::CThumbnailRequestActive( RFs& aFs, RThumbnailSession&
    85     aThumbnailSession, MThumbnailManagerObserver& aObserver,
    85     aThumbnailSession, MThumbnailManagerObserver& aObserver,
    86     TThumbnailRequestId aId, TInt aPriority, CThumbnailRequestQueue* aQueue ):
    86     TThumbnailRequestId aId, TInt aPriority, CThumbnailRequestQueue* aQueue ):
    87     CActive( aPriority ), iSession( aThumbnailSession ), iParamsPckg( iParams ),
    87     CActive( aPriority ), iSession( aThumbnailSession ), iParamsPckg( iParams ),
    88     iObserver( aObserver ), iFs( aFs ), iBitmapHandle( 0 ), iRequestId( aId ), 
    88     iObserver( aObserver ), iFs( aFs ), iBitmapHandle( 0 ), iRequestId( aId ), 
    89     iRequestQueue( aQueue )
    89     iRequestQueue( aQueue ), iCanceled( EFalse )
    90     {
    90     {
    91     CActiveScheduler::Add( this );
    91     CActiveScheduler::Add( this );
    92     TN_DEBUG2( "CThumbnaiRequestActive::CThumbnailRequestActive() AO's priority = %d", Priority());
    92     TN_DEBUG2( "CThumbnaiRequestActive::CThumbnailRequestActive() AO's priority = %d", Priority());
    93     
    93     
    94     iBitmap = NULL;
    94     iBitmap = NULL;
   161             break;
   161             break;
   162             }       
   162             }       
   163         case EReqGetThumbnailHandleLater:
   163         case EReqGetThumbnailHandleLater:
   164             {
   164             {
   165             // open file handle
   165             // open file handle
       
   166             iFile.Close();
   166             User::LeaveIfError( iFile.Open( iFs, iTargetUri, EFileShareReadersOrWriters ) );  
   167             User::LeaveIfError( iFile.Open( iFs, iTargetUri, EFileShareReadersOrWriters ) );  
   167             
   168             
   168             TN_DEBUG2( "CThumbnailRequestActive::StartL() - file handle opened for %S", &iTargetUri );
   169             TN_DEBUG2( "CThumbnailRequestActive::StartL() - file handle opened for %S", &iTargetUri );
   169             
   170             
   170             CleanupClosePushL( iFile );
   171             CleanupClosePushL( iFile );
   217         iRequestCompleted = ETrue;
   218         iRequestCompleted = ETrue;
   218         }
   219         }
   219     
   220     
   220     iTimer->Cancel();
   221     iTimer->Cancel();
   221     
   222     
   222     if (iRequestType == EReqDeleteThumbnails)
   223     if (iRequestType == EReqDeleteThumbnails || iCanceled)
   223         {
   224         {
   224         // no action for delete
   225         iFile.Close();
       
   226         iMyFileHandle.Close();
       
   227     
       
   228         // no action for delete or canceled request
   225         iRequestQueue->RequestComplete(this);
   229         iRequestQueue->RequestComplete(this);
   226         
   230         
   227 #ifdef _DEBUG
   231 #ifdef _DEBUG
   228     TTime stop;
   232     TTime stop;
   229     stop.UniversalTime();
   233     stop.UniversalTime();
   237         TN_DEBUG2( "CThumbnaiRequestActive::RunL() - no thumbnail found - lets try with file handle %S", &iParams.iFileName );
   241         TN_DEBUG2( "CThumbnaiRequestActive::RunL() - no thumbnail found - lets try with file handle %S", &iParams.iFileName );
   238         iRequestCompleted = EFalse;
   242         iRequestCompleted = EFalse;
   239         
   243         
   240         // We tried to get thumbnail using file path, but it was not found in
   244         // We tried to get thumbnail using file path, but it was not found in
   241         // the database. We need to open the file now (on the client side) and
   245         // the database. We need to open the file now (on the client side) and
   242         // use file handle.
   246         // use file handle.     
   243         
   247         iFile.Close();
   244         TInt err = iFile.Open( iFs, iParams.iFileName, EFileShareReadersOrWriters );
   248         TInt err = iFile.Open( iFs, iParams.iFileName, EFileShareReadersOrWriters );
   245         TN_DEBUG2( "CThumbnaiRequestActive::RunL() - file handle open err = %d", err );
   249         TN_DEBUG2( "CThumbnaiRequestActive::RunL() - file handle open err = %d", err );
   246         User::LeaveIfError( err );
   250         User::LeaveIfError( err );
   247         
   251         
   248         CleanupClosePushL( iFile );
   252         CleanupClosePushL( iFile );
   271 	    
   275 	    
   272 	    TN_DEBUG2( "CThumbnaiRequestActive::RunL() - iObserver.ThumbnailReady %d", iParams.iRequestId );
   276 	    TN_DEBUG2( "CThumbnaiRequestActive::RunL() - iObserver.ThumbnailReady %d", iParams.iRequestId );
   273 	    iObserver.ThumbnailReady( iStatus.Int(), *iCallbackThumbnail, iParams.iRequestId );
   277 	    iObserver.ThumbnailReady( iStatus.Int(), *iCallbackThumbnail, iParams.iRequestId );
   274 	  
   278 	  
   275 	    ReleaseServerBitmap();
   279 	    ReleaseServerBitmap();
       
   280 	    
       
   281 	    iFile.Close();
       
   282 	    iMyFileHandle.Close();
       
   283 	    
   276 	    iRequestQueue->RequestComplete(this);
   284 	    iRequestQueue->RequestComplete(this);
   277 	    
   285 	    
   278         #ifdef _DEBUG
   286         #ifdef _DEBUG
   279             TTime stop;
   287             TTime stop;
   280             stop.UniversalTime();
   288             stop.UniversalTime();
   294         
   302         
   295         iProcessingPreview = EFalse;
   303         iProcessingPreview = EFalse;
   296       
   304       
   297         ReleaseServerBitmap();
   305         ReleaseServerBitmap();
   298         
   306         
       
   307         iFile.Close();
       
   308         
   299         //set flags so that EThumbnailGeneratePersistentSizesOnly is done aka check all missing sizes 
   309         //set flags so that EThumbnailGeneratePersistentSizesOnly is done aka check all missing sizes 
   300         iParams.iQualityPreference = CThumbnailManager::EOptimizeForQuality;
   310         iParams.iQualityPreference = CThumbnailManager::EOptimizeForQuality;
   301         iParams.iControlFlags = EThumbnailGeneratePersistentSizesOnly;
   311         iParams.iControlFlags = EThumbnailGeneratePersistentSizesOnly;
   302         iRequestType = EReqUpdateThumbnails;
   312         iRequestType = EReqUpdateThumbnails;
   303         
   313         
   348             }
   358             }
   349 
   359 
   350         if ( iProcessingPreview )
   360         if ( iProcessingPreview )
   351             {
   361             {
   352             TN_DEBUG2( "CThumbnailRequestActive::RunL() - iObserver.ThumbnailPreviewReady %d", iParams.iRequestId );
   362             TN_DEBUG2( "CThumbnailRequestActive::RunL() - iObserver.ThumbnailPreviewReady %d", iParams.iRequestId );
   353 			//increase priority of 2nd round (both, AO and request itself)
   363 			
       
   364             //increase priority of 2nd round (both, AO and request itself)
   354             this->SetPriority(this->Priority() + 1);
   365             this->SetPriority(this->Priority() + 1);
   355             iParams.iPriority++;
   366             iParams.iPriority++;
   356             iObserver.ThumbnailPreviewReady( *iCallbackThumbnail, iParams.iRequestId );
   367             iObserver.ThumbnailPreviewReady( *iCallbackThumbnail, iParams.iRequestId );
   357             iProcessingPreview = EFalse;
   368             iProcessingPreview = EFalse;
       
   369             
   358             ReleaseServerBitmap();
   370             ReleaseServerBitmap();
       
   371             
       
   372             iFile.Close();
       
   373             
   359             Get2ndPhaseThumbnailL();
   374             Get2ndPhaseThumbnailL();
   360             }
   375             }
   361         else
   376         else
   362             {
   377             {
   363             TN_DEBUG2( "CThumbnailRequestActive::RunL() - iObserver.ThumbnailReady %d", iParams.iRequestId );
   378             TN_DEBUG2( "CThumbnailRequestActive::RunL() - iObserver.ThumbnailReady %d", iParams.iRequestId );
   364             
   379             
   365             iObserver.ThumbnailReady( iStatus.Int(), * iCallbackThumbnail, iParams.iRequestId );
   380             iObserver.ThumbnailReady( iStatus.Int(), * iCallbackThumbnail, iParams.iRequestId );
   366             ReleaseServerBitmap();    
   381             ReleaseServerBitmap();    
       
   382             
       
   383             iFile.Close();
       
   384             iMyFileHandle.Close();
   367             
   385             
   368             iRequestQueue->RequestComplete(this);
   386             iRequestQueue->RequestComplete(this);
   369             
   387             
   370 #ifdef _DEBUG
   388 #ifdef _DEBUG
   371         TTime stop;
   389         TTime stop;
   415     TN_DEBUG1( "CThumbnailRequestActive::DoCancel");
   433     TN_DEBUG1( "CThumbnailRequestActive::DoCancel");
   416     iTimer->Cancel();
   434     iTimer->Cancel();
   417     
   435     
   418     __ASSERT_DEBUG(( iRequestId > 0 ), ThumbnailPanic( EThumbnailWrongId ));
   436     __ASSERT_DEBUG(( iRequestId > 0 ), ThumbnailPanic( EThumbnailWrongId ));
   419 
   437 
       
   438     iCanceled = ETrue;
   420     iSession.CancelRequest( iRequestId );
   439     iSession.CancelRequest( iRequestId );
   421     ReleaseServerBitmap();
   440     ReleaseServerBitmap();
   422     }
   441     }
   423 
   442 
   424 
   443 
   476         
   495         
   477         iError = KErrNone;
   496         iError = KErrNone;
   478         }
   497         }
   479     
   498     
   480     ReleaseServerBitmap();
   499     ReleaseServerBitmap();
       
   500     
       
   501     iFile.Close();
       
   502     iMyFileHandle.Close();
   481     
   503     
   482     iRequestCompleted = ETrue;
   504     iRequestCompleted = ETrue;
   483     iRequestQueue->RequestComplete(this);
   505     iRequestQueue->RequestComplete(this);
   484     iRequestActive = EFalse;
   506     iRequestActive = EFalse;
   485     }
   507     }