imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnailrequestactive.cpp
branchRCL_3
changeset 7 2eb74cf6572e
parent 5 82749d516180
child 9 dea39715fc05
equal deleted inserted replaced
5:82749d516180 7:2eb74cf6572e
   203 // CThumbnailRequestActive::RunL()
   203 // CThumbnailRequestActive::RunL()
   204 // ---------------------------------------------------------------------------
   204 // ---------------------------------------------------------------------------
   205 //
   205 //
   206 void CThumbnailRequestActive::RunL()
   206 void CThumbnailRequestActive::RunL()
   207     {
   207     {
   208     TN_DEBUG2( "CThumbnaiRequestActive::RunL() - request ID: %d", iParams.iRequestId );
   208     TN_DEBUG2( "CThumbnailRequestActive::RunL() - request ID: %d", iParams.iRequestId );
   209     
   209     
   210     if ( iParams.iControlFlags == EThumbnailPreviewThumbnail )
   210     if ( iParams.iControlFlags == EThumbnailPreviewThumbnail )
   211         {
   211         {
   212         iRequestCompleted = EFalse;
   212         iRequestCompleted = EFalse;
   213 		iProcessingPreview = ETrue;
   213 		iProcessingPreview = ETrue;
   232 #endif
   232 #endif
   233         }
   233         }
   234     else if ( iStatus.Int() == KThumbnailErrThumbnailNotFound && iParams.iFileName.Length() && 
   234     else if ( iStatus.Int() == KThumbnailErrThumbnailNotFound && iParams.iFileName.Length() && 
   235          !( iParams.iFlags& CThumbnailManager::EDoNotCreate ))
   235          !( iParams.iFlags& CThumbnailManager::EDoNotCreate ))
   236         {
   236         {
   237         TN_DEBUG1( "CThumbnaiRequestActive::RunL() - no thumbnail found - lets try with file handle" );
   237         TN_DEBUG2( "CThumbnaiRequestActive::RunL() - no thumbnail found - lets try with file handle %S", &iParams.iFileName );
   238         iRequestCompleted = EFalse;
   238         iRequestCompleted = EFalse;
   239         
   239         
   240         // We tried to get thumbnail using file path, but it was not found in
   240         // 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
   241         // the database. We need to open the file now (on the client side) and
   242         // use file handle.
   242         // use file handle.
   243         User::LeaveIfError( iFile.Open( iFs, iParams.iFileName, EFileShareReadersOrWriters ));
   243         
       
   244         TInt err = iFile.Open( iFs, iParams.iFileName, EFileShareReadersOrWriters );
       
   245         TN_DEBUG2( "CThumbnaiRequestActive::RunL() - file handle open err = %d", err );
       
   246         User::LeaveIfError( err );
       
   247         
   244         CleanupClosePushL( iFile );
   248         CleanupClosePushL( iFile );
   245         
   249         
   246         TN_DEBUG2( "CThumbnaiRequestActive::RunL() - file handle opened for %S", &iParams.iFileName );
   250         TN_DEBUG2( "CThumbnaiRequestActive::RunL() - file handle opened for %S", &iParams.iFileName );
   247         
   251         
   248         iSession.RequestThumbnailL( iFile, iParams.iFileName, iParamsPckg, iStatus );
   252         iSession.RequestThumbnailL( iFile, iParams.iFileName, iParamsPckg, iStatus );
   252                            TCallBack(TimerCallBack, this));
   256                            TCallBack(TimerCallBack, this));
   253         SetActive();
   257         SetActive();
   254         }
   258         }
   255     else if ( iStatus.Int())
   259     else if ( iStatus.Int())
   256         {
   260         {
   257         TN_DEBUG2( "CThumbnaiRequestActive::RunL() - error (%d) occured", iStatus.Int() );
   261         TN_DEBUG2( "CThumbnailRequestActive::RunL() - error (%d) occured", iStatus.Int() );
   258         // An error occurred
   262         // An error occurred
   259         iError = iStatus.Int();
   263         iError = iStatus.Int();
   260         HandleError();
   264         HandleError();
   261         }
   265         }
   262     else if (iParams.iControlFlags == EThumbnailGeneratePersistentSizesOnly)
   266     //1st round thumb ready from exif (stored)
       
   267     else if (iParams.iOriginalControlFlags == EThumbnailGeneratePersistentSizesOnly && !iProcessingPreview)
   263 	    {
   268 	    {
   264 	    TN_DEBUG1( "CThumbnaiRequestActive::RunL()- generate persistent sizes" );
   269 	    TN_DEBUG1( "CThumbnaiRequestActive::RunL()- generate persistent sizes thumbnailready" );
   265 	    iBitmapHandle = iParams.iBitmapHandle;
   270 	    iBitmapHandle = iParams.iBitmapHandle;
   266 	    
   271 	    
   267 	    TN_DEBUG2( "CThumbnaiRequestActive::RunL() - iObserver.ThumbnailReady %d", iParams.iRequestId );
   272 	    TN_DEBUG2( "CThumbnaiRequestActive::RunL() - iObserver.ThumbnailReady %d", iParams.iRequestId );
   268 	    iObserver.ThumbnailReady( iStatus.Int(), *iCallbackThumbnail, iParams.iRequestId );
   273 	    iObserver.ThumbnailReady( iStatus.Int(), *iCallbackThumbnail, iParams.iRequestId );
   269 	  
   274 	  
   270 	    ReleaseServerBitmap();
   275 	    ReleaseServerBitmap();
   271 	    iRequestQueue->RequestComplete(this);
   276 	    iRequestQueue->RequestComplete(this);
   272 	    
   277 	    
   273 #ifdef _DEBUG
   278         #ifdef _DEBUG
   274     TTime stop;
   279             TTime stop;
   275     stop.UniversalTime();
   280             stop.UniversalTime();
   276     TN_DEBUG3( "CThumbnailRequestActive::RunL() total execution time %d, %d ms",
   281             TN_DEBUG3( "CThumbnailRequestActive::RunL() total execution time %d, %d ms",
   277                iParams.iRequestId, (TInt)stop.MicroSecondsFrom(iStartExecTime).Int64()/1000 );
   282                        iParams.iRequestId, (TInt)stop.MicroSecondsFrom(iStartExecTime).Int64()/1000 );
   278 #endif
   283         #endif
   279 	    }
   284 	    }
       
   285     //1st round preview ready from too low quality exif/exif not found (not-stored)
       
   286     //relauch using normal decoding
       
   287     else if (iParams.iOriginalControlFlags == EThumbnailGeneratePersistentSizesOnly && iProcessingPreview)
       
   288         {
       
   289         TN_DEBUG1( "CThumbnaiRequestActive::RunL()- generate persistent sizes thumbnailpreviewready" );
       
   290         iBitmapHandle = iParams.iBitmapHandle;
       
   291         
       
   292         TN_DEBUG2( "CThumbnaiRequestActive::RunL() - iObserver.ThumbnailPreviewReady %d", iParams.iRequestId );
       
   293         iObserver.ThumbnailPreviewReady( *iCallbackThumbnail, iParams.iRequestId );
       
   294         
       
   295         iProcessingPreview = EFalse;
       
   296       
       
   297         ReleaseServerBitmap();
       
   298         
       
   299         //set flags so that EThumbnailGeneratePersistentSizesOnly is done aka check all missing sizes 
       
   300         iParams.iQualityPreference = CThumbnailManager::EOptimizeForQuality;
       
   301         iParams.iControlFlags = EThumbnailGeneratePersistentSizesOnly;
       
   302         iRequestType = EReqUpdateThumbnails;
       
   303         
       
   304         //increase priority
       
   305         this->SetPriority(this->Priority() + 1);
       
   306         iParams.iPriority++;
       
   307         
       
   308         iSession.UpdateThumbnails( iPath, iOrientation, iModified, iParamsPckg, iStatus );
       
   309         
       
   310         SetActive();
       
   311            
       
   312     	#ifdef _DEBUG
       
   313         TTime stop;
       
   314         stop.UniversalTime();
       
   315         TN_DEBUG3( "CThumbnailRequestActive::RunL() total execution time %d, %d ms",
       
   316                    iParams.iRequestId, (TInt)stop.MicroSecondsFrom(iStartExecTime).Int64()/1000 );
       
   317     	#endif
       
   318         }
   280     else
   319     else
   281         {
   320         {
   282         TN_DEBUG1( "CThumbnaiRequestActive::RunL() - succesful" );
   321         TN_DEBUG1( "CThumbnailRequestActive::RunL() - succesful" );
   283         
   322         
   284         // Success
   323         // Success
   285         iBitmapHandle = iParams.iBitmapHandle;
   324         iBitmapHandle = iParams.iBitmapHandle;
   286         CFbsBitmap* bitmap = new( ELeave )CFbsBitmap();
   325         
   287         CleanupStack::PushL( bitmap );
   326         if( iBitmapHandle )
   288         User::LeaveIfError( bitmap->Duplicate( iBitmapHandle ));
   327             {
   289         CleanupStack::Pop( bitmap );
   328             CFbsBitmap* bitmap = new( ELeave )CFbsBitmap();
   290 		
   329             CleanupStack::PushL( bitmap );
   291 		// reduce bpp value (displaymode to match reqested bits per pixel)
   330             User::LeaveIfError( bitmap->Duplicate( iBitmapHandle ));
   292 		#ifdef _DEBUG
   331             CleanupStack::Pop( bitmap );
   293         TN_DEBUG2( "CThumbnaiRequestActive::RunL() - displaymode is %d", bitmap->DisplayMode());
   332             
   294 		#endif
   333             // reduce bpp value (displaymode to match reqested bits per pixel)
   295         
   334             #ifdef _DEBUG
   296         if( bitmap->DisplayMode() > iParams.iDisplayMode )
   335             TN_DEBUG2( "CThumbnailRequestActive::RunL() - displaymode is %d", bitmap->DisplayMode());
   297             {
   336             #endif
   298             bitmap->SetDisplayMode( iParams.iDisplayMode );
   337             
   299 			#ifdef _DEBUG
   338             if( bitmap->DisplayMode() > iParams.iDisplayMode )
   300             TN_DEBUG2( "CThumbnaiRequestActive::RunL() - displaymode is now %d", bitmap->DisplayMode());
   339                 {
   301 			#endif
   340                 bitmap->SetDisplayMode( iParams.iDisplayMode );
       
   341                 #ifdef _DEBUG
       
   342                 TN_DEBUG2( "CThumbnailRequestActive::RunL() - displaymode is now %d", bitmap->DisplayMode());
       
   343                 #endif
       
   344                 }
       
   345             
       
   346             iCallbackThumbnail->Set( bitmap, iClientData );
       
   347             bitmap = NULL; // Owned by iCallbackThumbnail or client now
   302             }
   348             }
   303         
       
   304         iCallbackThumbnail->Set( bitmap, iClientData );
       
   305         bitmap = NULL; // Owned by iCallbackThumbnail or client now
       
   306 
   349 
   307         if ( iProcessingPreview )
   350         if ( iProcessingPreview )
   308             {
   351             {
   309             TN_DEBUG2( "CThumbnaiRequestActive::RunL() - iObserver.ThumbnailPreviewReady %d", iParams.iRequestId );
   352             TN_DEBUG2( "CThumbnailRequestActive::RunL() - iObserver.ThumbnailPreviewReady %d", iParams.iRequestId );
       
   353 			//increase priority of 2nd round (both, AO and request itself)
       
   354             this->SetPriority(this->Priority() + 1);
       
   355             iParams.iPriority++;
   310             iObserver.ThumbnailPreviewReady( *iCallbackThumbnail, iParams.iRequestId );
   356             iObserver.ThumbnailPreviewReady( *iCallbackThumbnail, iParams.iRequestId );
   311             iProcessingPreview = EFalse;
   357             iProcessingPreview = EFalse;
   312             ReleaseServerBitmap();
   358             ReleaseServerBitmap();
   313             Get2ndPhaseThumbnailL();
   359             Get2ndPhaseThumbnailL();
   314             }
   360             }
   315         else
   361         else
   316             {
   362             {
   317             TN_DEBUG2( "CThumbnaiRequestActive::RunL() - iObserver.ThumbnailReady %d", iParams.iRequestId );
   363             TN_DEBUG2( "CThumbnailRequestActive::RunL() - iObserver.ThumbnailReady %d", iParams.iRequestId );
   318             
   364             
   319             iObserver.ThumbnailReady( iStatus.Int(), * iCallbackThumbnail, iParams.iRequestId );
   365             iObserver.ThumbnailReady( iStatus.Int(), * iCallbackThumbnail, iParams.iRequestId );
   320             ReleaseServerBitmap();    
   366             ReleaseServerBitmap();    
   321             
   367             
   322             iRequestQueue->RequestComplete(this);
   368             iRequestQueue->RequestComplete(this);
   463 
   509 
   464     iClientData = aClientData;
   510     iClientData = aClientData;
   465     iParams.iControlFlags = (aGeneratePersistentSizesOnly ?
   511     iParams.iControlFlags = (aGeneratePersistentSizesOnly ?
   466     						EThumbnailGeneratePersistentSizesOnly :
   512     						EThumbnailGeneratePersistentSizesOnly :
   467     						EThumbnailNoControlFlags);    
   513     						EThumbnailNoControlFlags);    
       
   514     iParams.iOriginalControlFlags = iParams.iControlFlags;
   468     iParams.iBitmapHandle = 0;
   515     iParams.iBitmapHandle = 0;
   469     iParams.iSize = aSize;
   516     iParams.iSize = aSize;
   470     iParams.iDisplayMode = aDisplayMode;
   517     iParams.iDisplayMode = aDisplayMode;
   471     User::LeaveIfError( aFile.FullName( iParams.iFileName ));
   518     User::LeaveIfError( aFile.FullName( iParams.iFileName ));
   472     iParams.iRequestId = iRequestId;
   519     iParams.iRequestId = iRequestId;
   496     iRequestType = EReqGetThumbnailHandleLater;
   543     iRequestType = EReqGetThumbnailHandleLater;
   497 
   544 
   498     iClientData = aClientData;
   545     iClientData = aClientData;
   499     iParams.iControlFlags = (aGeneratePersistentSizesOnly ?
   546     iParams.iControlFlags = (aGeneratePersistentSizesOnly ?
   500                             EThumbnailGeneratePersistentSizesOnly :
   547                             EThumbnailGeneratePersistentSizesOnly :
   501                             EThumbnailNoControlFlags);    
   548                             EThumbnailNoControlFlags);
       
   549     iParams.iOriginalControlFlags = iParams.iControlFlags;
   502     iParams.iBitmapHandle = 0;
   550     iParams.iBitmapHandle = 0;
   503     iParams.iSize = aSize;
   551     iParams.iSize = aSize;
   504     iParams.iDisplayMode = aDisplayMode;
   552     iParams.iDisplayMode = aDisplayMode;
   505     iParams.iFileName = aPath;
   553     iParams.iFileName = aPath;
   506     iParams.iRequestId = iRequestId;
   554     iParams.iRequestId = iRequestId;
   529 
   577 
   530     iClientData = aClientData;
   578     iClientData = aClientData;
   531     iParams.iControlFlags = (aGeneratePersistentSizesOnly ?
   579     iParams.iControlFlags = (aGeneratePersistentSizesOnly ?
   532     						EThumbnailGeneratePersistentSizesOnly :
   580     						EThumbnailGeneratePersistentSizesOnly :
   533     						EThumbnailNoControlFlags);
   581     						EThumbnailNoControlFlags);
   534     						
   582     iParams.iOriginalControlFlags = iParams.iControlFlags;
   535     iParams.iBitmapHandle = 0;
   583     iParams.iBitmapHandle = 0;
   536     iParams.iSize = aSize;
   584     iParams.iSize = aSize;
   537     iParams.iDisplayMode = aDisplayMode;
   585     iParams.iDisplayMode = aDisplayMode;
   538     iParams.iRequestId = iRequestId;
   586     iParams.iRequestId = iRequestId;
   539     iParams.iPriority = aPriority;
   587     iParams.iPriority = aPriority;
   561 
   609 
   562     iClientData = aClientData;
   610     iClientData = aClientData;
   563     iParams.iControlFlags = (aGeneratePersistentSizesOnly ?
   611     iParams.iControlFlags = (aGeneratePersistentSizesOnly ?
   564                             EThumbnailGeneratePersistentSizesOnly :
   612                             EThumbnailGeneratePersistentSizesOnly :
   565                             EThumbnailNoControlFlags);
   613                             EThumbnailNoControlFlags);
   566                            
   614     iParams.iOriginalControlFlags = iParams.iControlFlags;  
   567     iParams.iMimeType = TDataType( aMimeType );
   615     iParams.iMimeType = TDataType( aMimeType );
   568     iParams.iBitmapHandle = 0;
   616     iParams.iBitmapHandle = 0;
   569     iParams.iSize = aSize;
   617     iParams.iSize = aSize;
   570     iParams.iBuffer = aBuffer; // save pointer for deletion (~CThumbnailRequestActive())
   618     iParams.iBuffer = aBuffer; // save pointer for deletion (~CThumbnailRequestActive())
   571     iParams.iThumbnailSize = aThumbnailSize;
   619     iParams.iThumbnailSize = aThumbnailSize;
   592     {    
   640     {    
   593     iClientData = aClientData;
   641     iClientData = aClientData;
   594     iParams.iControlFlags = (aGeneratePersistentSizesOnly ?
   642     iParams.iControlFlags = (aGeneratePersistentSizesOnly ?
   595                             EThumbnailGeneratePersistentSizesOnly :
   643                             EThumbnailGeneratePersistentSizesOnly :
   596                             EThumbnailNoControlFlags);
   644                             EThumbnailNoControlFlags);
   597                            
   645     iParams.iOriginalControlFlags = iParams.iControlFlags;  
   598     iParams.iBitmapHandle = 0;
   646     iParams.iBitmapHandle = 0;
   599     iParams.iSize = aSize;
   647     iParams.iSize = aSize;
   600     iParams.iThumbnailSize = aThumbnailSize;
   648     iParams.iThumbnailSize = aThumbnailSize;
   601     iParams.iDisplayMode = aDisplayMode;
   649     iParams.iDisplayMode = aDisplayMode;
   602     iParams.iRequestId = iRequestId;
   650     iParams.iRequestId = iRequestId;
   643     const TInt64 aModified )
   691     const TInt64 aModified )
   644     {
   692     {
   645     iRequestType = EReqUpdateThumbnails;
   693     iRequestType = EReqUpdateThumbnails;
   646     
   694     
   647     iParams.iControlFlags = EThumbnailGeneratePersistentSizesOnly;   
   695     iParams.iControlFlags = EThumbnailGeneratePersistentSizesOnly;   
       
   696     iParams.iOriginalControlFlags = iParams.iControlFlags;
   648     iParams.iBitmapHandle = 0;
   697     iParams.iBitmapHandle = 0;
   649     iParams.iDisplayMode = aDisplayMode;
   698     iParams.iDisplayMode = aDisplayMode;
   650     iParams.iRequestId = iRequestId;
   699     iParams.iRequestId = iRequestId;
   651     iParams.iPriority = aPriority;
   700     iParams.iPriority = aPriority;
   652     iParams.iFlags = aFlags;
   701     iParams.iFlags = aFlags;
   729     TN_DEBUG1( "CThumbnailRequestActive::StartError");
   778     TN_DEBUG1( "CThumbnailRequestActive::StartError");
   730     
   779     
   731     iStartError = aErr;
   780     iStartError = aErr;
   732     iRequestActive = ETrue;
   781     iRequestActive = ETrue;
   733     
   782     
   734     iTimer->Start( KClientRequestStartErrorTimeout, KClientRequestStartErrorTimeout, 
   783     if (!iTimer->IsActive())
   735                    TCallBack(TimerCallBack, this));
   784         {
       
   785         iTimer->Start( KClientRequestStartErrorTimeout, KClientRequestStartErrorTimeout, 
       
   786                        TCallBack(TimerCallBack, this));
       
   787         }
   736     }
   788     }
   737 
   789 
   738 // ---------------------------------------------------------------------------
   790 // ---------------------------------------------------------------------------
   739 // CThumbnailRequestActive::TimerCallBack()
   791 // CThumbnailRequestActive::TimerCallBack()
   740 // ---------------------------------------------------------------------------
   792 // ---------------------------------------------------------------------------