imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnailrequestactive.cpp
branchGCC_SURGE
changeset 32 a0ee3f735f8b
parent 30 b67379558a75
child 33 221be23823c5
equal deleted inserted replaced
26:ea43e3e86079 32:a0ee3f735f8b
    46     if(iTimer)
    46     if(iTimer)
    47         {
    47         {
    48         iTimer->Cancel();
    48         iTimer->Cancel();
    49         }
    49         }
    50     delete iTimer;
    50     delete iTimer;
       
    51     iTimer = NULL;
    51     
    52     
    52     ReleaseServerBitmap();
    53     ReleaseServerBitmap();
    53     delete iCallbackThumbnail;
    54     delete iCallbackThumbnail;
       
    55     iCallbackThumbnail = NULL;
    54     delete iParams.iBuffer;
    56     delete iParams.iBuffer;
       
    57     iParams.iBuffer = NULL;
    55     delete iBitmap;
    58     delete iBitmap;
       
    59     iBitmap = NULL;
    56     iFile.Close();
    60     iFile.Close();
    57     iMyFileHandle.Close();
    61     iMyFileHandle.Close();
    58     }
    62     }
    59 
    63 
    60 
    64 
    63 // Two-phased constructor.
    67 // Two-phased constructor.
    64 // ---------------------------------------------------------------------------
    68 // ---------------------------------------------------------------------------
    65 //
    69 //
    66 CThumbnailRequestActive* CThumbnailRequestActive::NewL( RFs& aFs,
    70 CThumbnailRequestActive* CThumbnailRequestActive::NewL( RFs& aFs,
    67     RThumbnailSession& aThumbnailSession, MThumbnailManagerObserver& aObserver,
    71     RThumbnailSession& aThumbnailSession, MThumbnailManagerObserver& aObserver,
       
    72     MThumbnailManagerRequestObserver* aRequestObserver,
    68     TThumbnailRequestId aId, TInt aPriority, CThumbnailRequestQueue* aQueue )
    73     TThumbnailRequestId aId, TInt aPriority, CThumbnailRequestQueue* aQueue )
    69     {
    74     {
    70     CThumbnailRequestActive* self = new( ELeave )CThumbnailRequestActive( aFs,
    75     CThumbnailRequestActive* self = new( ELeave )CThumbnailRequestActive( aFs,
    71         aThumbnailSession, aObserver, aId, aPriority, aQueue );
    76         aThumbnailSession, aObserver, aRequestObserver, aId, aPriority, aQueue );
    72     CleanupStack::PushL( self );
    77     CleanupStack::PushL( self );
    73     self->ConstructL();
    78     self->ConstructL();
    74     CleanupStack::Pop( self );
    79     CleanupStack::Pop( self );
    75     return self;
    80     return self;
    76     }
    81     }
    81 // C++ default constructor can NOT contain any code, that might leave.
    86 // C++ default constructor can NOT contain any code, that might leave.
    82 // ---------------------------------------------------------------------------
    87 // ---------------------------------------------------------------------------
    83 //
    88 //
    84 CThumbnailRequestActive::CThumbnailRequestActive( RFs& aFs, RThumbnailSession&
    89 CThumbnailRequestActive::CThumbnailRequestActive( RFs& aFs, RThumbnailSession&
    85     aThumbnailSession, MThumbnailManagerObserver& aObserver,
    90     aThumbnailSession, MThumbnailManagerObserver& aObserver,
       
    91     MThumbnailManagerRequestObserver* aRequestObserver,
    86     TThumbnailRequestId aId, TInt aPriority, CThumbnailRequestQueue* aQueue ):
    92     TThumbnailRequestId aId, TInt aPriority, CThumbnailRequestQueue* aQueue ):
    87     CActive( aPriority ), iSession( aThumbnailSession ), iParamsPckg( iParams ),
    93     CActive( aPriority ), iSession( aThumbnailSession ), iParamsPckg( iParams ),
    88     iObserver( aObserver ), iFs( aFs ), iBitmapHandle( 0 ), iRequestId( aId ), 
    94     iObserver( aObserver ), iRequestObserver( aRequestObserver ), iFs( aFs ), iBitmapHandle( 0 ), 
    89     iRequestQueue( aQueue ), iCanceled( EFalse )
    95     iRequestId( aId ), iRequestQueue( aQueue ), iCanceled( EFalse )
       
    96 #ifdef __RETRY_ON_SERVERCRASH
       
    97     ,iRetry(0)
       
    98 #endif
    90     {
    99     {
    91     CActiveScheduler::Add( this );
   100     CActiveScheduler::Add( this );
    92     TN_DEBUG2( "CThumbnaiRequestActive::CThumbnailRequestActive() AO's priority = %d", Priority());
   101     TN_DEBUG2( "CThumbnaiRequestActive::CThumbnailRequestActive() AO's priority = %d", Priority());
    93     
   102     
    94     iBitmap = NULL;
   103     iBitmap = NULL;
   149                 TN_DEBUG1( "CThumbnaiRequestActive::StartL()- custom size request" );
   158                 TN_DEBUG1( "CThumbnaiRequestActive::StartL()- custom size request" );
   150                   
   159                   
   151                 iFile.Close();
   160                 iFile.Close();
   152                 User::LeaveIfError( iFile.Open( iFs, iPath, EFileShareReadersOrWriters ) );  
   161                 User::LeaveIfError( iFile.Open( iFs, iPath, EFileShareReadersOrWriters ) );  
   153                 
   162                 
   154                 TN_DEBUG2( "CThumbnailRequestActive::StartL() - file handle opened for %S", &iTargetUri );
   163                 TN_DEBUG2( "CThumbnailRequestActive::StartL() - file handle opened for %S", &iPath );
   155                 
   164                 
   156                 CleanupClosePushL( iFile );
   165                 CleanupClosePushL( iFile );
       
   166                 
       
   167                 if ( iParams.iQualityPreference == CThumbnailManager::EOptimizeForQualityWithPreview )
       
   168                     {
       
   169                     // We may need the file handle later for the 2nd phase thumbnail
       
   170                     iMyFileHandle.Close();
       
   171                     User::LeaveIfError( iMyFileHandle.Duplicate( iFile ));
       
   172                     }
       
   173                 
   157                 iSession.RequestThumbnailL( iFile, iPath, iParamsPckg, iStatus );
   174                 iSession.RequestThumbnailL( iFile, iPath, iParamsPckg, iStatus );
   158                 CleanupStack::PopAndDestroy( &iFile );   
   175                 CleanupStack::PopAndDestroy( &iFile );   
   159                 }
   176                 }
   160             else
   177             else
   161                 {
   178                 {
   186             User::LeaveIfError( iFile.Open( iFs, iTargetUri, EFileShareReadersOrWriters ) );  
   203             User::LeaveIfError( iFile.Open( iFs, iTargetUri, EFileShareReadersOrWriters ) );  
   187             
   204             
   188             TN_DEBUG2( "CThumbnailRequestActive::StartL() - file handle opened for %S", &iTargetUri );
   205             TN_DEBUG2( "CThumbnailRequestActive::StartL() - file handle opened for %S", &iTargetUri );
   189             
   206             
   190             CleanupClosePushL( iFile );
   207             CleanupClosePushL( iFile );
       
   208             
       
   209             if ( iParams.iQualityPreference == CThumbnailManager::EOptimizeForQualityWithPreview )
       
   210                 {
       
   211                 // We may need the file handle later for the 2nd phase thumbnail
       
   212                 iMyFileHandle.Close();
       
   213                 User::LeaveIfError( iMyFileHandle.Duplicate( iFile ));
       
   214                 }
       
   215             
   191             iSession.RequestThumbnailL( iFile, iTargetUri, iParamsPckg, iStatus );
   216             iSession.RequestThumbnailL( iFile, iTargetUri, iParamsPckg, iStatus );
   192             CleanupStack::PopAndDestroy( &iFile );
   217             CleanupStack::PopAndDestroy( &iFile );
   193             break;
   218             break;
   194             }  
   219             }  
   195         case EReqDeleteThumbnails:
   220         case EReqDeleteThumbnails:
   209         case EReqRenameThumbnails:
   234         case EReqRenameThumbnails:
   210             {
   235             {
   211             iSession.RenameThumbnails( iParamsPckg, iStatus );
   236             iSession.RenameThumbnails( iParamsPckg, iStatus );
   212             break;
   237             break;
   213             }  
   238             }  
       
   239         case EReqSetThumbnailPath:
       
   240             {
       
   241             // open file handle
       
   242             iFile.Close();
       
   243             User::LeaveIfError( iFile.Open( iFs, iParams.iFileName, EFileShareReadersOrWriters ) );  
       
   244             
       
   245             TN_DEBUG2( "CThumbnailRequestActive::StartL() - file handle opened for %S", &iParams.iFileName );
       
   246             
       
   247             CleanupClosePushL( iFile );
       
   248             
       
   249             if ( iParams.iQualityPreference == CThumbnailManager::EOptimizeForQualityWithPreview )
       
   250                 {
       
   251                 // We may need the file handle later for the 2nd phase thumbnail
       
   252                 iMyFileHandle.Close();
       
   253                 User::LeaveIfError( iMyFileHandle.Duplicate( iFile ));
       
   254                 }
       
   255             
       
   256             iSession.RequestThumbnailL( iFile, iTargetUri, iParamsPckg, iStatus );
       
   257             CleanupStack::PopAndDestroy( &iFile );
       
   258 
       
   259             break;
       
   260             } 
       
   261             
   214         default:
   262         default:
   215             {
   263             {
   216             break;
   264             break;
   217             }
   265             }
   218         }
   266         }
   242         iRequestCompleted = ETrue;
   290         iRequestCompleted = ETrue;
   243         }
   291         }
   244     
   292     
   245     iTimer->Cancel();
   293     iTimer->Cancel();
   246     
   294     
   247     if (iRequestType == EReqDeleteThumbnails || iCanceled ||
   295     if (iRequestType == EReqDeleteThumbnails)
   248         iRequestType == EReqRenameThumbnails)
   296         {
   249         {
   297         TN_DEBUG1( "CThumbnailRequestActive::RunL() - delete" );
   250         TN_DEBUG1( "CThumbnailRequestActive::RunL() - rename/delete/canceled" );
   298     
       
   299         if (iRequestObserver)
       
   300             {
       
   301             iRequestObserver->ThumbnailRequestReady(iStatus.Int(), ERequestDeleteThumbnails ,iParams.iRequestId);
       
   302             }
       
   303         
       
   304         iFile.Close();
       
   305         iMyFileHandle.Close();
       
   306     
       
   307         // no action for delete/rename or canceled request
       
   308         iRequestQueue->RequestComplete(this);
       
   309         
       
   310 #ifdef _DEBUG
       
   311     TTime stop;
       
   312     stop.UniversalTime();
       
   313     TN_DEBUG3( "CThumbnailRequestActive::RunL() total execution time of req %d is %d ms",
       
   314                 iParams.iRequestId, (TInt)stop.MicroSecondsFrom(iStartExecTime).Int64()/1000 );
       
   315 #endif
       
   316         }
       
   317     else if (iCanceled || iRequestType == EReqRenameThumbnails)
       
   318         {
       
   319         if (iCanceled)
       
   320             {
       
   321             TN_DEBUG1( "CThumbnailRequestActive::RunL() - canceled" );
       
   322             }
       
   323         else if (iRequestType == EReqRenameThumbnails)
       
   324             {
       
   325             TN_DEBUG1( "CThumbnailRequestActive::RunL() - rename" );
       
   326             }
   251     
   327     
   252         iFile.Close();
   328         iFile.Close();
   253         iMyFileHandle.Close();
   329         iMyFileHandle.Close();
   254     
   330     
   255         // no action for delete/rename or canceled request
   331         // no action for delete/rename or canceled request
   285         
   361         
   286         iTimer->Start( KClientRequestTimeout, KClientRequestTimeout, 
   362         iTimer->Start( KClientRequestTimeout, KClientRequestTimeout, 
   287                            TCallBack(TimerCallBack, this));
   363                            TCallBack(TimerCallBack, this));
   288         SetActive();
   364         SetActive();
   289         }
   365         }
   290     else if ( iStatus.Int())
   366     else if ( iStatus.Int() )
   291         {
   367         {
   292         TN_DEBUG2( "CThumbnailRequestActive::RunL() - error (%d) occured", iStatus.Int() );
   368         TN_DEBUG2( "CThumbnailRequestActive::RunL() - error (%d) occured", iStatus.Int() );
   293         // An error occurred
   369         // An error occurred
   294         iError = iStatus.Int();
   370         iError = iStatus.Int();
   295         HandleError();
   371         HandleError();
   525             else
   601             else
   526                 {
   602                 {
   527                 TN_DEBUG1( "CThumbnailRequestActive::HandleError() - session reconnected");
   603                 TN_DEBUG1( "CThumbnailRequestActive::HandleError() - session reconnected");
   528                 }
   604                 }
   529             }
   605             }
   530         iCallbackThumbnail->Set( NULL, iClientData );
   606 
   531         
   607         if (iRequestObserver && iRequestType == EReqDeleteThumbnails)
   532         // don't leak internal TNM codes
   608              {
   533         if (iError == KThumbnailErrThumbnailNotFound)
   609              TN_DEBUG2( "CThumbnaiRequestActive::HandleError() - iRequestObserver->ThumbnailRequestReady %d", iParams.iRequestId );
   534             {
   610              iRequestObserver->ThumbnailRequestReady(iError, ERequestDeleteThumbnails ,iParams.iRequestId);
   535             iError = KErrNotFound;
   611              }
       
   612         else
       
   613             {			
       
   614 			 iCallbackThumbnail->Set( NULL, iClientData );
       
   615         
       
   616 	        // don't leak internal TNM codes
       
   617 	        if (iError == KThumbnailErrThumbnailNotFound)
       
   618 	            {
       
   619 	            iError = KErrNotFound;
       
   620 	            }
       
   621 	        
       
   622 #ifdef __RETRY_ON_SERVERCRASH
       
   623 	        if(iError == KErrServerTerminated )
       
   624 	            {
       
   625                   
       
   626                 if(iRetry < KMaxRequestRetryCount )
       
   627                     {
       
   628                     iRetry++;
       
   629                     TN_DEBUG2( "CThumbnaiRequestActive::HandleError() - KErrServerTerminated, retry %d", iRetry);
       
   630                     iError = KErrNone;
       
   631                     TRAPD(err, StartL());
       
   632                     return;
       
   633                     }
       
   634 	            }
       
   635 #endif
       
   636 	        TN_DEBUG2( "CThumbnaiRequestActive::HandleError() - iObserver.ThumbnailReady %d", iParams.iRequestId );
       
   637 	        iObserver.ThumbnailReady( iError, *iCallbackThumbnail, iParams.iRequestId );
       
   638 	            
   536             }
   639             }
   537         
       
   538         TN_DEBUG2( "CThumbnaiRequestActive::HandleError() - iObserver.ThumbnailReady %d", iParams.iRequestId );
       
   539         iObserver.ThumbnailReady( iError, *iCallbackThumbnail, iParams.iRequestId );
       
   540         
   640         
   541         iError = KErrNone;
   641         iError = KErrNone;
   542         }
   642         }
   543     
   643     
   544     ReleaseServerBitmap();
   644     ReleaseServerBitmap();
   587     iParams.iPriority = aPriority;
   687     iParams.iPriority = aPriority;
   588     iParams.iFlags = aFlags;
   688     iParams.iFlags = aFlags;
   589     iParams.iQualityPreference = aQualityPreference;
   689     iParams.iQualityPreference = aQualityPreference;
   590     iParams.iThumbnailSize = aThumbnailSize;
   690     iParams.iThumbnailSize = aThumbnailSize;
   591     iParams.iThumbnailId = aThumbnailId;
   691     iParams.iThumbnailId = aThumbnailId;
       
   692     iParams.iOverwrite = EFalse;
       
   693     iParams.iImport = EFalse;
   592     
   694     
   593     User::LeaveIfError( iFile.Duplicate( aFile ));
   695     User::LeaveIfError( iFile.Duplicate( aFile ));
   594     
   696     
   595     iTargetUri = aTargetUri;
   697     iTargetUri = aTargetUri;
       
   698     
       
   699     if (iParams.iFileName.Length() && IsVirtualUri(iParams.iFileName))
       
   700         {
       
   701         iParams.iVirtualUri = ETrue;
       
   702         }
       
   703     else
       
   704         {
       
   705         iParams.iVirtualUri = EFalse;
       
   706         }
   596     }
   707     }
   597 
   708 
   598 
   709 
   599 // ---------------------------------------------------------------------------
   710 // ---------------------------------------------------------------------------
   600 // CThumbnailRequestActive::GetThumbnailL()
   711 // CThumbnailRequestActive::GetThumbnailL()
   622     iParams.iPriority = aPriority;
   733     iParams.iPriority = aPriority;
   623     iParams.iFlags = aFlags;
   734     iParams.iFlags = aFlags;
   624     iParams.iQualityPreference = aQualityPreference;
   735     iParams.iQualityPreference = aQualityPreference;
   625     iParams.iThumbnailSize = aThumbnailSize;
   736     iParams.iThumbnailSize = aThumbnailSize;
   626     iParams.iThumbnailId = aThumbnailId;
   737     iParams.iThumbnailId = aThumbnailId;
       
   738     iParams.iOverwrite = EFalse;
       
   739     iParams.iImport = EFalse;
   627     
   740     
   628     iTargetUri = aTargetUri;
   741     iTargetUri = aTargetUri;
       
   742     
       
   743     if (iPath.Length() && IsVirtualUri(iPath))
       
   744         {
       
   745         iParams.iVirtualUri = ETrue;
       
   746         }
       
   747     else
       
   748         {
       
   749         iParams.iVirtualUri = EFalse;
       
   750         }
   629     }
   751     }
   630 
   752 
   631 
   753 
   632 // ---------------------------------------------------------------------------
   754 // ---------------------------------------------------------------------------
   633 // CThumbnailRequestActive::GetThumbnailL()
   755 // CThumbnailRequestActive::GetThumbnailL()
   655     iParams.iFlags = aFlags;
   777     iParams.iFlags = aFlags;
   656     iParams.iQualityPreference = aQualityPreference;
   778     iParams.iQualityPreference = aQualityPreference;
   657     iParams.iThumbnailSize = aThumbnailSize;
   779     iParams.iThumbnailSize = aThumbnailSize;
   658     iParams.iThumbnailId = aThumbnailId;
   780     iParams.iThumbnailId = aThumbnailId;
   659     iParams.iFileName = aPath;
   781     iParams.iFileName = aPath;
       
   782     iParams.iOverwrite = EFalse;
       
   783     iParams.iImport = EFalse;
   660     
   784     
   661     iPath = aPath;
   785     iPath = aPath;
   662     iTargetUri = aTargetUri;
   786     iTargetUri = aTargetUri;
       
   787     
       
   788     if (iPath.Length() && IsVirtualUri(iPath))
       
   789         {
       
   790         iParams.iVirtualUri = ETrue;
       
   791         }
       
   792     else
       
   793         {
       
   794         iParams.iVirtualUri = EFalse;
       
   795         }
   663     }
   796     }
   664 
   797 
   665 // ---------------------------------------------------------------------------
   798 // ---------------------------------------------------------------------------
   666 // CThumbnailRequestActive::SetThumbnailL()
   799 // CThumbnailRequestActive::SetThumbnailL()
   667 // Get a thumbnail for an object file.
   800 // Get a thumbnail for an object file.
   669 //
   802 //
   670 void CThumbnailRequestActive::SetThumbnailL( TDesC8* aBuffer, TThumbnailId aThumbnailId,
   803 void CThumbnailRequestActive::SetThumbnailL( TDesC8* aBuffer, TThumbnailId aThumbnailId,
   671     const TDesC8& aMimeType, CThumbnailManager::TThumbnailFlags aFlags,
   804     const TDesC8& aMimeType, CThumbnailManager::TThumbnailFlags aFlags,
   672     CThumbnailManager::TThumbnailQualityPreference aQualityPreference, const TSize& aSize,
   805     CThumbnailManager::TThumbnailQualityPreference aQualityPreference, const TSize& aSize,
   673     const TDisplayMode aDisplayMode, const TInt aPriority, TAny* aClientData,
   806     const TDisplayMode aDisplayMode, const TInt aPriority, TAny* aClientData,
   674     TBool aGeneratePersistentSizesOnly, const TDesC& aTargetUri, TThumbnailSize aThumbnailSize )
   807     TBool aGeneratePersistentSizesOnly, const TDesC& aTargetUri, TThumbnailSize aThumbnailSize,
       
   808     TBool aOverwrite)
   675     {
   809     {
   676     iRequestType = EReqSetThumbnailBuffer;
   810     iRequestType = EReqSetThumbnailBuffer;
   677 
   811 
   678     iClientData = aClientData;
   812     iClientData = aClientData;
   679     iParams.iControlFlags = (aGeneratePersistentSizesOnly ?
   813     iParams.iControlFlags = (aGeneratePersistentSizesOnly ?
   689     iParams.iRequestId = iRequestId;
   823     iParams.iRequestId = iRequestId;
   690     iParams.iPriority = aPriority;
   824     iParams.iPriority = aPriority;
   691     iParams.iFlags = aFlags;
   825     iParams.iFlags = aFlags;
   692     iParams.iQualityPreference = aQualityPreference;
   826     iParams.iQualityPreference = aQualityPreference;
   693     iParams.iThumbnailId = aThumbnailId;
   827     iParams.iThumbnailId = aThumbnailId;
       
   828     iParams.iOverwrite = aOverwrite;
       
   829     iParams.iImport = EFalse;
   694     
   830     
   695     iTargetUri = aTargetUri;
   831     iTargetUri = aTargetUri;
       
   832     
       
   833     if (iTargetUri.Length() && IsVirtualUri(iTargetUri))
       
   834         {
       
   835         iParams.iVirtualUri = ETrue;
       
   836         }
       
   837     else
       
   838         {
       
   839         iParams.iVirtualUri = EFalse;
       
   840         }
   696     }
   841     }
   697 
   842 
   698 // ---------------------------------------------------------------------------
   843 // ---------------------------------------------------------------------------
   699 // CThumbnailRequestActive::SetThumbnailL()
   844 // CThumbnailRequestActive::SetThumbnailL()
   700 // Get a thumbnail for an object file.
   845 // Get a thumbnail for an object file.
   702 //
   847 //
   703 void CThumbnailRequestActive::SetThumbnailL( CFbsBitmap* aBitmap, TThumbnailId aThumbnailId,
   848 void CThumbnailRequestActive::SetThumbnailL( CFbsBitmap* aBitmap, TThumbnailId aThumbnailId,
   704     const TDesC8& aMimeType, CThumbnailManager::TThumbnailFlags aFlags,
   849     const TDesC8& aMimeType, CThumbnailManager::TThumbnailFlags aFlags,
   705     CThumbnailManager::TThumbnailQualityPreference aQualityPreference, const TSize& aSize,
   850     CThumbnailManager::TThumbnailQualityPreference aQualityPreference, const TSize& aSize,
   706     const TDisplayMode aDisplayMode, const TInt aPriority, TAny* aClientData,
   851     const TDisplayMode aDisplayMode, const TInt aPriority, TAny* aClientData,
   707     TBool aGeneratePersistentSizesOnly, const TDesC& aTargetUri, TThumbnailSize aThumbnailSize )
   852     TBool aGeneratePersistentSizesOnly, const TDesC& aTargetUri, TThumbnailSize aThumbnailSize,
       
   853     TBool aOverwrite)
   708     {    
   854     {    
   709     iClientData = aClientData;
   855     iClientData = aClientData;
   710     iParams.iControlFlags = (aGeneratePersistentSizesOnly ?
   856     iParams.iControlFlags = (aGeneratePersistentSizesOnly ?
   711                             EThumbnailGeneratePersistentSizesOnly :
   857                             EThumbnailGeneratePersistentSizesOnly :
   712                             EThumbnailNoControlFlags);
   858                             EThumbnailNoControlFlags);
   719     iParams.iPriority = aPriority;
   865     iParams.iPriority = aPriority;
   720     iParams.iFlags = aFlags;
   866     iParams.iFlags = aFlags;
   721     iParams.iQualityPreference = aQualityPreference;
   867     iParams.iQualityPreference = aQualityPreference;
   722     iParams.iThumbnailId = aThumbnailId;
   868     iParams.iThumbnailId = aThumbnailId;
   723     iParams.iFileName = aTargetUri;
   869     iParams.iFileName = aTargetUri;
       
   870     iParams.iOverwrite = aOverwrite;
       
   871     iParams.iImport = EFalse;
   724     
   872     
   725     iTargetUri = aTargetUri;
   873     iTargetUri = aTargetUri;
       
   874     
       
   875     if (iTargetUri.Length() && IsVirtualUri(iTargetUri))
       
   876         {
       
   877         iParams.iVirtualUri = ETrue;
       
   878         }
       
   879     else
       
   880         {
       
   881         iParams.iVirtualUri = EFalse;
       
   882         }
   726     
   883     
   727     TInt memoryFree( 0 );
   884     TInt memoryFree( 0 );
   728     HAL::Get( HALData::EMemoryRAMFree, memoryFree );
   885     HAL::Get( HALData::EMemoryRAMFree, memoryFree );
   729     
   886     
   730     TN_DEBUG2( "CThumbnaiRequestActive::SetThumbnailbyBitmap() - memoryFree %d", memoryFree );
   887     TN_DEBUG2( "CThumbnaiRequestActive::SetThumbnailbyBitmap() - memoryFree %d", memoryFree );
   734         // save parameter bitmap, it will be deleted when request is complete
   891         // save parameter bitmap, it will be deleted when request is complete
   735         iBitmap = aBitmap;                   
   892         iBitmap = aBitmap;                   
   736         iParams.iMimeType = TDataType( aMimeType );
   893         iParams.iMimeType = TDataType( aMimeType );
   737         iRequestType = EReqSetThumbnailBitmap;
   894         iRequestType = EReqSetThumbnailBitmap;
   738         }
   895         }
   739     else
   896     else if (!iParams.iVirtualUri)
   740         {
   897         {
   741         // memory low, create thumbs using filehandle
   898         // memory low, create thumbs using filehandle
   742         TN_DEBUG1( "CThumbnaiRequestActive::SetThumbnailbyBitmap() - memory low, create thumbs using filehandle!" );
   899         TN_DEBUG1( "CThumbnaiRequestActive::SetThumbnailbyBitmap() - memory low, create thumbs using filehandle!" );
   743         delete aBitmap;
   900         delete aBitmap;
   744         aBitmap = NULL;
   901         aBitmap = NULL;
   745         iParams.iPriority = aPriority - 1;
   902         iParams.iPriority = aPriority - 1;
   746         iRequestType = EReqGetThumbnailHandleLater;
   903         iRequestType = EReqGetThumbnailHandleLater;
       
   904         }
       
   905     else
       
   906         {
       
   907         User::Leave(KErrNoMemory);
   747         }
   908         }
   748     }
   909     }
   749 
   910 
   750 // ---------------------------------------------------------------------------
   911 // ---------------------------------------------------------------------------
   751 // CThumbnailRequestActive::UpdateThumbnailsL()
   912 // CThumbnailRequestActive::UpdateThumbnailsL()
   767     iParams.iRequestId = iRequestId;
   928     iParams.iRequestId = iRequestId;
   768     iParams.iPriority = aPriority;
   929     iParams.iPriority = aPriority;
   769     iParams.iFlags = aFlags;
   930     iParams.iFlags = aFlags;
   770     iParams.iQualityPreference = aQualityPreference;
   931     iParams.iQualityPreference = aQualityPreference;
   771     iParams.iThumbnailId = aThumbnailId;
   932     iParams.iThumbnailId = aThumbnailId;
       
   933     iParams.iOverwrite = EFalse;
       
   934     iParams.iVirtualUri = EFalse;
       
   935     iParams.iImport = EFalse;
   772     
   936     
   773     iPath = aPath;
   937     iPath = aPath;
   774     iOrientation = aOrientation;
   938     iOrientation = aOrientation;
   775     iModified = aModified;
   939     iModified = aModified;
   776     }
   940     }
   807     iParams.iFileName = aCurrentPath;
   971     iParams.iFileName = aCurrentPath;
   808     iParams.iTargetUri = aNewPath;
   972     iParams.iTargetUri = aNewPath;
   809     }
   973     }
   810 
   974 
   811 // ---------------------------------------------------------------------------
   975 // ---------------------------------------------------------------------------
       
   976 // CThumbnailRequestActive::SetThumbnailL()
       
   977 // Set thumbnail from file path.
       
   978 // ---------------------------------------------------------------------------
       
   979 //
       
   980 void CThumbnailRequestActive::SetThumbnailL( const TDesC& aPath, const TDesC8& aMimeType,
       
   981     CThumbnailManager::TThumbnailFlags aFlags, CThumbnailManager
       
   982     ::TThumbnailQualityPreference aQualityPreference, const TSize& aSize, const
       
   983     TDisplayMode aDisplayMode, const TInt aPriority, TAny* aClientData,
       
   984     TBool aGeneratePersistentSizesOnly, const TDesC& aTargetUri, 
       
   985     TThumbnailSize aThumbnailSize, TBool aOverwrite)
       
   986     {
       
   987     iRequestType = EReqSetThumbnailPath;
       
   988     
       
   989     iClientData = aClientData;
       
   990     iParams.iControlFlags = (aGeneratePersistentSizesOnly ?
       
   991                             EThumbnailGeneratePersistentSizesOnly :
       
   992                             EThumbnailNoControlFlags);
       
   993     iParams.iOriginalControlFlags = iParams.iControlFlags;
       
   994     iParams.iMimeType = TDataType( aMimeType );
       
   995     iParams.iBitmapHandle = 0;
       
   996     iParams.iSize = aSize;
       
   997     iParams.iDisplayMode = aDisplayMode;
       
   998     iParams.iFileName = aPath;
       
   999     iParams.iRequestId = iRequestId;
       
  1000     iParams.iPriority = aPriority;
       
  1001     iParams.iFlags = aFlags;
       
  1002     iParams.iQualityPreference = aQualityPreference;
       
  1003     iParams.iThumbnailSize = aThumbnailSize;
       
  1004     iParams.iOverwrite = aOverwrite;
       
  1005     
       
  1006     iTargetUri = aTargetUri;
       
  1007     
       
  1008     if (iTargetUri.Length() && IsVirtualUri(iTargetUri))
       
  1009         {
       
  1010         iParams.iVirtualUri = ETrue;
       
  1011         }
       
  1012     else
       
  1013         {
       
  1014         iParams.iVirtualUri = EFalse;
       
  1015         }
       
  1016     
       
  1017     iParams.iImport = ETrue;
       
  1018     }
       
  1019 
       
  1020 // ---------------------------------------------------------------------------
   812 // Request 2nd phase thumbnail
  1021 // Request 2nd phase thumbnail
   813 // ---------------------------------------------------------------------------
  1022 // ---------------------------------------------------------------------------
   814 //
  1023 //
   815 void CThumbnailRequestActive::Get2ndPhaseThumbnailL()
  1024 void CThumbnailRequestActive::Get2ndPhaseThumbnailL()
   816     {
  1025     {
   899     TN_DEBUG1( "CThumbnailRequestActive::TimerCallBack() - end");
  1108     TN_DEBUG1( "CThumbnailRequestActive::TimerCallBack() - end");
   900     
  1109     
   901     return KErrNone;
  1110     return KErrNone;
   902     }
  1111     }
   903 
  1112 
       
  1113 // ---------------------------------------------------------------------------
       
  1114 // CThumbnailRequestActive::IsVirtualUri()
       
  1115 // Checks if URI is virtual.
       
  1116 // ---------------------------------------------------------------------------
       
  1117 //
       
  1118 TBool CThumbnailRequestActive::IsVirtualUri( const TDesC& aPath )
       
  1119     {
       
  1120     TInt pos = aPath.Find(KBackSlash);
       
  1121     
       
  1122     // normal URI
       
  1123     if ( pos == 2 )
       
  1124         {
       
  1125         return EFalse;
       
  1126         }
       
  1127     // virtual URI
       
  1128     else
       
  1129         {
       
  1130         TN_DEBUG1( "CThumbnailRequestActive::IsVirtualUri() - yes");
       
  1131         return ETrue;
       
  1132         }    
       
  1133     }
       
  1134 
   904 // End of file
  1135 // End of file