imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnailrequestactive.cpp
changeset 14 2edacbf5d3f9
parent 1 235a7fc86938
child 15 7197e789b953
equal deleted inserted replaced
1:235a7fc86938 14:2edacbf5d3f9
   190             {
   190             {
   191             break;
   191             break;
   192             }
   192             }
   193         }
   193         }
   194     
   194     
       
   195     iTimer->Cancel();
   195     iTimer->Start( KClientRequestTimeout, KClientRequestTimeout, 
   196     iTimer->Start( KClientRequestTimeout, KClientRequestTimeout, 
   196                    TCallBack(TimerCallBack, this));
   197                    TCallBack(TimerCallBack, this));
   197     SetActive();
   198     SetActive();
   198     }
   199     }
   199 
   200 
   202 // CThumbnailRequestActive::RunL()
   203 // CThumbnailRequestActive::RunL()
   203 // ---------------------------------------------------------------------------
   204 // ---------------------------------------------------------------------------
   204 //
   205 //
   205 void CThumbnailRequestActive::RunL()
   206 void CThumbnailRequestActive::RunL()
   206     {
   207     {
   207     TN_DEBUG2( "CThumbnaiRequestActive::RunL() - request ID: %d", iParams.iRequestId );
   208     TN_DEBUG2( "CThumbnailRequestActive::RunL() - request ID: %d", iParams.iRequestId );
   208     
   209     
   209     if ( iParams.iControlFlags == EThumbnailPreviewThumbnail )
   210     if ( iParams.iControlFlags == EThumbnailPreviewThumbnail )
   210         {
   211         {
   211         iRequestCompleted = EFalse;
   212         iRequestCompleted = EFalse;
   212 		iProcessingPreview = ETrue;
   213 		iProcessingPreview = ETrue;
   231 #endif
   232 #endif
   232         }
   233         }
   233     else if ( iStatus.Int() == KThumbnailErrThumbnailNotFound && iParams.iFileName.Length() && 
   234     else if ( iStatus.Int() == KThumbnailErrThumbnailNotFound && iParams.iFileName.Length() && 
   234          !( iParams.iFlags& CThumbnailManager::EDoNotCreate ))
   235          !( iParams.iFlags& CThumbnailManager::EDoNotCreate ))
   235         {
   236         {
   236         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 );
   237         iRequestCompleted = EFalse;
   238         iRequestCompleted = EFalse;
   238         
   239         
   239         // 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
   240         // 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
   241         // use file handle.
   242         // use file handle.
   242         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         
   243         CleanupClosePushL( iFile );
   248         CleanupClosePushL( iFile );
   244         
   249         
   245         TN_DEBUG2( "CThumbnaiRequestActive::RunL() - file handle opened for %S", &iParams.iFileName );
   250         TN_DEBUG2( "CThumbnaiRequestActive::RunL() - file handle opened for %S", &iParams.iFileName );
   246         
   251         
   247         iSession.RequestThumbnailL( iFile, iParams.iTargetUri, iParamsPckg, iStatus );
   252         iSession.RequestThumbnailL( iFile, iParams.iFileName, iParamsPckg, iStatus );
   248         CleanupStack::PopAndDestroy( &iFile );
   253         CleanupStack::PopAndDestroy( &iFile );
   249         
   254         
   250         iTimer->Start( KClientRequestTimeout, KClientRequestTimeout, 
   255         iTimer->Start( KClientRequestTimeout, KClientRequestTimeout, 
   251                            TCallBack(TimerCallBack, this));
   256                            TCallBack(TimerCallBack, this));
   252         SetActive();
   257         SetActive();
   253         }
   258         }
   254     else if ( iStatus.Int())
   259     else if ( iStatus.Int())
   255         {
   260         {
   256         TN_DEBUG2( "CThumbnaiRequestActive::RunL() - error (%d) occured", iStatus.Int() );
   261         TN_DEBUG2( "CThumbnailRequestActive::RunL() - error (%d) occured", iStatus.Int() );
   257         // An error occurred
   262         // An error occurred
   258         iError = iStatus.Int();
   263         iError = iStatus.Int();
   259         HandleError();
   264         HandleError();
   260         }
   265         }
   261     else if (iParams.iControlFlags == EThumbnailGeneratePersistentSizesOnly)
   266     //1st round thumb ready from exif (stored)
       
   267     else if (iParams.iOriginalControlFlags == EThumbnailGeneratePersistentSizesOnly && !iProcessingPreview)
   262 	    {
   268 	    {
   263 	    TN_DEBUG1( "CThumbnaiRequestActive::RunL()- generate persistent sizes" );
   269 	    TN_DEBUG1( "CThumbnaiRequestActive::RunL()- generate persistent sizes thumbnailready" );
   264 	    iBitmapHandle = iParams.iBitmapHandle;
   270 	    iBitmapHandle = iParams.iBitmapHandle;
   265 	    
   271 	    
   266 	    TN_DEBUG2( "CThumbnaiRequestActive::RunL() - iObserver.ThumbnailReady %d", iParams.iRequestId );
   272 	    TN_DEBUG2( "CThumbnaiRequestActive::RunL() - iObserver.ThumbnailReady %d", iParams.iRequestId );
   267 	    iObserver.ThumbnailReady( iStatus.Int(), *iCallbackThumbnail, iParams.iRequestId );
   273 	    iObserver.ThumbnailReady( iStatus.Int(), *iCallbackThumbnail, iParams.iRequestId );
   268 	  
   274 	  
   269 	    ReleaseServerBitmap();
   275 	    ReleaseServerBitmap();
   270 	    iRequestQueue->RequestComplete(this);
   276 	    iRequestQueue->RequestComplete(this);
   271 	    
   277 	    
   272 #ifdef _DEBUG
   278         #ifdef _DEBUG
   273     TTime stop;
   279             TTime stop;
   274     stop.UniversalTime();
   280             stop.UniversalTime();
   275     TN_DEBUG3( "CThumbnailRequestActive::RunL() total execution time %d, %d ms",
   281             TN_DEBUG3( "CThumbnailRequestActive::RunL() total execution time %d, %d ms",
   276                iParams.iRequestId, (TInt)stop.MicroSecondsFrom(iStartExecTime).Int64()/1000 );
   282                        iParams.iRequestId, (TInt)stop.MicroSecondsFrom(iStartExecTime).Int64()/1000 );
   277 #endif
   283         #endif
   278 	    }
   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         }
   279     else
   319     else
   280         {
   320         {
   281         TN_DEBUG1( "CThumbnaiRequestActive::RunL() - succesful" );
   321         TN_DEBUG1( "CThumbnailRequestActive::RunL() - succesful" );
   282         
   322         
   283         // Success
   323         // Success
   284         iBitmapHandle = iParams.iBitmapHandle;
   324         iBitmapHandle = iParams.iBitmapHandle;
   285         CFbsBitmap* bitmap = new( ELeave )CFbsBitmap();
   325         
   286         CleanupStack::PushL( bitmap );
   326         if( iBitmapHandle )
   287         User::LeaveIfError( bitmap->Duplicate( iBitmapHandle ));
   327             {
   288         CleanupStack::Pop( bitmap );
   328             CFbsBitmap* bitmap = new( ELeave )CFbsBitmap();
   289 		
   329             CleanupStack::PushL( bitmap );
   290 		// reduce bpp value (displaymode to match reqested bits per pixel)
   330             User::LeaveIfError( bitmap->Duplicate( iBitmapHandle ));
   291 		#ifdef _DEBUG
   331             CleanupStack::Pop( bitmap );
   292         TN_DEBUG2( "CThumbnaiRequestActive::RunL() - displaymode is %d", bitmap->DisplayMode());
   332             
   293 		#endif
   333             // reduce bpp value (displaymode to match reqested bits per pixel)
   294         
   334             #ifdef _DEBUG
   295         if( bitmap->DisplayMode() > iParams.iDisplayMode )
   335             TN_DEBUG2( "CThumbnailRequestActive::RunL() - displaymode is %d", bitmap->DisplayMode());
   296             {
   336             #endif
   297             bitmap->SetDisplayMode( iParams.iDisplayMode );
   337             
   298 			#ifdef _DEBUG
   338             if( bitmap->DisplayMode() > iParams.iDisplayMode )
   299             TN_DEBUG2( "CThumbnaiRequestActive::RunL() - displaymode is now %d", bitmap->DisplayMode());
   339                 {
   300 			#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
   301             }
   348             }
   302         
       
   303         iCallbackThumbnail->Set( bitmap, iClientData );
       
   304         bitmap = NULL; // Owned by iCallbackThumbnail or client now
       
   305 
   349 
   306         if ( iProcessingPreview )
   350         if ( iProcessingPreview )
   307             {
   351             {
   308             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++;
   309             iObserver.ThumbnailPreviewReady( *iCallbackThumbnail, iParams.iRequestId );
   356             iObserver.ThumbnailPreviewReady( *iCallbackThumbnail, iParams.iRequestId );
   310             iProcessingPreview = EFalse;
   357             iProcessingPreview = EFalse;
   311             ReleaseServerBitmap();
   358             ReleaseServerBitmap();
   312             Get2ndPhaseThumbnailL();
   359             Get2ndPhaseThumbnailL();
   313             }
   360             }
   314         else
   361         else
   315             {
   362             {
   316             TN_DEBUG2( "CThumbnaiRequestActive::RunL() - iObserver.ThumbnailReady %d", iParams.iRequestId );
   363             TN_DEBUG2( "CThumbnailRequestActive::RunL() - iObserver.ThumbnailReady %d", iParams.iRequestId );
   317             
   364             
   318             iObserver.ThumbnailReady( iStatus.Int(), * iCallbackThumbnail, iParams.iRequestId );
   365             iObserver.ThumbnailReady( iStatus.Int(), * iCallbackThumbnail, iParams.iRequestId );
   319             ReleaseServerBitmap();    
   366             ReleaseServerBitmap();    
   320             
   367             
   321             iRequestQueue->RequestComplete(this);
   368             iRequestQueue->RequestComplete(this);
   380 // Releases reserved bitmap.
   427 // Releases reserved bitmap.
   381 // ---------------------------------------------------------------------------
   428 // ---------------------------------------------------------------------------
   382 //
   429 //
   383 void CThumbnailRequestActive::ReleaseServerBitmap()
   430 void CThumbnailRequestActive::ReleaseServerBitmap()
   384     {
   431     {
   385     TN_DEBUG1( "CThumbnailRequestActive::ReleaseServerBitmap");
       
   386     
       
   387     if ( iBitmapHandle && iSession.Handle())
   432     if ( iBitmapHandle && iSession.Handle())
   388         {
   433         {
       
   434     	TN_DEBUG1( "CThumbnailRequestActive::ReleaseServerBitmap");
       
   435     
   389         iSession.ReleaseBitmap( iBitmapHandle );
   436         iSession.ReleaseBitmap( iBitmapHandle );
   390         iBitmapHandle = 0;
   437         iBitmapHandle = 0;
   391         }
   438         }
   392     }
   439     }
   393 
   440 
   462 
   509 
   463     iClientData = aClientData;
   510     iClientData = aClientData;
   464     iParams.iControlFlags = (aGeneratePersistentSizesOnly ?
   511     iParams.iControlFlags = (aGeneratePersistentSizesOnly ?
   465     						EThumbnailGeneratePersistentSizesOnly :
   512     						EThumbnailGeneratePersistentSizesOnly :
   466     						EThumbnailNoControlFlags);    
   513     						EThumbnailNoControlFlags);    
       
   514     iParams.iOriginalControlFlags = iParams.iControlFlags;
   467     iParams.iBitmapHandle = 0;
   515     iParams.iBitmapHandle = 0;
   468     iParams.iSize = aSize;
   516     iParams.iSize = aSize;
   469     iParams.iDisplayMode = aDisplayMode;
   517     iParams.iDisplayMode = aDisplayMode;
   470     User::LeaveIfError( aFile.FullName( iParams.iFileName ));
   518     User::LeaveIfError( aFile.FullName( iParams.iFileName ));
   471     iParams.iRequestId = iRequestId;
   519     iParams.iRequestId = iRequestId;
   495     iRequestType = EReqGetThumbnailHandleLater;
   543     iRequestType = EReqGetThumbnailHandleLater;
   496 
   544 
   497     iClientData = aClientData;
   545     iClientData = aClientData;
   498     iParams.iControlFlags = (aGeneratePersistentSizesOnly ?
   546     iParams.iControlFlags = (aGeneratePersistentSizesOnly ?
   499                             EThumbnailGeneratePersistentSizesOnly :
   547                             EThumbnailGeneratePersistentSizesOnly :
   500                             EThumbnailNoControlFlags);    
   548                             EThumbnailNoControlFlags);
       
   549     iParams.iOriginalControlFlags = iParams.iControlFlags;
   501     iParams.iBitmapHandle = 0;
   550     iParams.iBitmapHandle = 0;
   502     iParams.iSize = aSize;
   551     iParams.iSize = aSize;
   503     iParams.iDisplayMode = aDisplayMode;
   552     iParams.iDisplayMode = aDisplayMode;
   504     iParams.iFileName = aPath;
   553     iParams.iFileName = aPath;
   505     iParams.iRequestId = iRequestId;
   554     iParams.iRequestId = iRequestId;
   528 
   577 
   529     iClientData = aClientData;
   578     iClientData = aClientData;
   530     iParams.iControlFlags = (aGeneratePersistentSizesOnly ?
   579     iParams.iControlFlags = (aGeneratePersistentSizesOnly ?
   531     						EThumbnailGeneratePersistentSizesOnly :
   580     						EThumbnailGeneratePersistentSizesOnly :
   532     						EThumbnailNoControlFlags);
   581     						EThumbnailNoControlFlags);
   533     						
   582     iParams.iOriginalControlFlags = iParams.iControlFlags;
   534     iParams.iBitmapHandle = 0;
   583     iParams.iBitmapHandle = 0;
   535     iParams.iSize = aSize;
   584     iParams.iSize = aSize;
   536     iParams.iDisplayMode = aDisplayMode;
   585     iParams.iDisplayMode = aDisplayMode;
   537     iParams.iRequestId = iRequestId;
   586     iParams.iRequestId = iRequestId;
   538     iParams.iPriority = aPriority;
   587     iParams.iPriority = aPriority;
   560 
   609 
   561     iClientData = aClientData;
   610     iClientData = aClientData;
   562     iParams.iControlFlags = (aGeneratePersistentSizesOnly ?
   611     iParams.iControlFlags = (aGeneratePersistentSizesOnly ?
   563                             EThumbnailGeneratePersistentSizesOnly :
   612                             EThumbnailGeneratePersistentSizesOnly :
   564                             EThumbnailNoControlFlags);
   613                             EThumbnailNoControlFlags);
   565                            
   614     iParams.iOriginalControlFlags = iParams.iControlFlags;  
   566     iParams.iMimeType = TDataType( aMimeType );
   615     iParams.iMimeType = TDataType( aMimeType );
   567     iParams.iBitmapHandle = 0;
   616     iParams.iBitmapHandle = 0;
   568     iParams.iSize = aSize;
   617     iParams.iSize = aSize;
   569     iParams.iBuffer = aBuffer; // save pointer for deletion (~CThumbnailRequestActive())
   618     iParams.iBuffer = aBuffer; // save pointer for deletion (~CThumbnailRequestActive())
   570     iParams.iThumbnailSize = aThumbnailSize;
   619     iParams.iThumbnailSize = aThumbnailSize;
   591     {    
   640     {    
   592     iClientData = aClientData;
   641     iClientData = aClientData;
   593     iParams.iControlFlags = (aGeneratePersistentSizesOnly ?
   642     iParams.iControlFlags = (aGeneratePersistentSizesOnly ?
   594                             EThumbnailGeneratePersistentSizesOnly :
   643                             EThumbnailGeneratePersistentSizesOnly :
   595                             EThumbnailNoControlFlags);
   644                             EThumbnailNoControlFlags);
   596                            
   645     iParams.iOriginalControlFlags = iParams.iControlFlags;  
   597     iParams.iBitmapHandle = 0;
   646     iParams.iBitmapHandle = 0;
   598     iParams.iSize = aSize;
   647     iParams.iSize = aSize;
   599     iParams.iThumbnailSize = aThumbnailSize;
   648     iParams.iThumbnailSize = aThumbnailSize;
   600     iParams.iDisplayMode = aDisplayMode;
   649     iParams.iDisplayMode = aDisplayMode;
   601     iParams.iRequestId = iRequestId;
   650     iParams.iRequestId = iRequestId;
   642     const TInt64 aModified )
   691     const TInt64 aModified )
   643     {
   692     {
   644     iRequestType = EReqUpdateThumbnails;
   693     iRequestType = EReqUpdateThumbnails;
   645     
   694     
   646     iParams.iControlFlags = EThumbnailGeneratePersistentSizesOnly;   
   695     iParams.iControlFlags = EThumbnailGeneratePersistentSizesOnly;   
       
   696     iParams.iOriginalControlFlags = iParams.iControlFlags;
   647     iParams.iBitmapHandle = 0;
   697     iParams.iBitmapHandle = 0;
   648     iParams.iDisplayMode = aDisplayMode;
   698     iParams.iDisplayMode = aDisplayMode;
   649     iParams.iRequestId = iRequestId;
   699     iParams.iRequestId = iRequestId;
   650     iParams.iPriority = aPriority;
   700     iParams.iPriority = aPriority;
   651     iParams.iFlags = aFlags;
   701     iParams.iFlags = aFlags;
   728     TN_DEBUG1( "CThumbnailRequestActive::StartError");
   778     TN_DEBUG1( "CThumbnailRequestActive::StartError");
   729     
   779     
   730     iStartError = aErr;
   780     iStartError = aErr;
   731     iRequestActive = ETrue;
   781     iRequestActive = ETrue;
   732     
   782     
   733     iTimer->Start( KClientRequestStartErrorTimeout, KClientRequestStartErrorTimeout, 
   783     if (!iTimer->IsActive())
   734                    TCallBack(TimerCallBack, this));
   784         {
       
   785         iTimer->Start( KClientRequestStartErrorTimeout, KClientRequestStartErrorTimeout, 
       
   786                        TCallBack(TimerCallBack, this));
       
   787         }
   735     }
   788     }
   736 
   789 
   737 // ---------------------------------------------------------------------------
   790 // ---------------------------------------------------------------------------
   738 // CThumbnailRequestActive::TimerCallBack()
   791 // CThumbnailRequestActive::TimerCallBack()
   739 // ---------------------------------------------------------------------------
   792 // ---------------------------------------------------------------------------