imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnailrequestactive.cpp
branchRCL_3
changeset 21 ad31f4183ddc
parent 20 ffb2d5dd62e9
child 24 f0aa341a25bf
equal deleted inserted replaced
20:ffb2d5dd62e9 21:ad31f4183ddc
    63 // Two-phased constructor.
    63 // Two-phased constructor.
    64 // ---------------------------------------------------------------------------
    64 // ---------------------------------------------------------------------------
    65 //
    65 //
    66 CThumbnailRequestActive* CThumbnailRequestActive::NewL( RFs& aFs,
    66 CThumbnailRequestActive* CThumbnailRequestActive::NewL( RFs& aFs,
    67     RThumbnailSession& aThumbnailSession, MThumbnailManagerObserver& aObserver,
    67     RThumbnailSession& aThumbnailSession, MThumbnailManagerObserver& aObserver,
       
    68     MThumbnailManagerRequestObserver* aRequestObserver,
    68     TThumbnailRequestId aId, TInt aPriority, CThumbnailRequestQueue* aQueue )
    69     TThumbnailRequestId aId, TInt aPriority, CThumbnailRequestQueue* aQueue )
    69     {
    70     {
    70     CThumbnailRequestActive* self = new( ELeave )CThumbnailRequestActive( aFs,
    71     CThumbnailRequestActive* self = new( ELeave )CThumbnailRequestActive( aFs,
    71         aThumbnailSession, aObserver, aId, aPriority, aQueue );
    72         aThumbnailSession, aObserver, aRequestObserver, aId, aPriority, aQueue );
    72     CleanupStack::PushL( self );
    73     CleanupStack::PushL( self );
    73     self->ConstructL();
    74     self->ConstructL();
    74     CleanupStack::Pop( self );
    75     CleanupStack::Pop( self );
    75     return self;
    76     return self;
    76     }
    77     }
    81 // C++ default constructor can NOT contain any code, that might leave.
    82 // C++ default constructor can NOT contain any code, that might leave.
    82 // ---------------------------------------------------------------------------
    83 // ---------------------------------------------------------------------------
    83 //
    84 //
    84 CThumbnailRequestActive::CThumbnailRequestActive( RFs& aFs, RThumbnailSession&
    85 CThumbnailRequestActive::CThumbnailRequestActive( RFs& aFs, RThumbnailSession&
    85     aThumbnailSession, MThumbnailManagerObserver& aObserver,
    86     aThumbnailSession, MThumbnailManagerObserver& aObserver,
       
    87     MThumbnailManagerRequestObserver* aRequestObserver,
    86     TThumbnailRequestId aId, TInt aPriority, CThumbnailRequestQueue* aQueue ):
    88     TThumbnailRequestId aId, TInt aPriority, CThumbnailRequestQueue* aQueue ):
    87     CActive( aPriority ), iSession( aThumbnailSession ), iParamsPckg( iParams ),
    89     CActive( aPriority ), iSession( aThumbnailSession ), iParamsPckg( iParams ),
    88     iObserver( aObserver ), iFs( aFs ), iBitmapHandle( 0 ), iRequestId( aId ), 
    90     iObserver( aObserver ), iRequestObserver( aRequestObserver ), iFs( aFs ), iBitmapHandle( 0 ), 
    89     iRequestQueue( aQueue ), iCanceled( EFalse )
    91     iRequestId( aId ), iRequestQueue( aQueue ), iCanceled( EFalse )
    90     {
    92     {
    91     CActiveScheduler::Add( this );
    93     CActiveScheduler::Add( this );
    92     TN_DEBUG2( "CThumbnaiRequestActive::CThumbnailRequestActive() AO's priority = %d", Priority());
    94     TN_DEBUG2( "CThumbnaiRequestActive::CThumbnailRequestActive() AO's priority = %d", Priority());
    93     
    95     
    94     iBitmap = NULL;
    96     iBitmap = NULL;
   242         iRequestCompleted = ETrue;
   244         iRequestCompleted = ETrue;
   243         }
   245         }
   244     
   246     
   245     iTimer->Cancel();
   247     iTimer->Cancel();
   246     
   248     
   247     if (iRequestType == EReqDeleteThumbnails || iCanceled ||
   249     if (iRequestType == EReqDeleteThumbnails)
   248         iRequestType == EReqRenameThumbnails)
   250         {
   249         {
   251         TN_DEBUG1( "CThumbnailRequestActive::RunL() - delete" );
   250         TN_DEBUG1( "CThumbnailRequestActive::RunL() - rename/delete/canceled" );
   252     
       
   253         if (iRequestObserver)
       
   254             {
       
   255             iRequestObserver->ThumbnailRequestReady(iStatus.Int(), ERequestDeleteThumbnails ,iParams.iRequestId);
       
   256             }
       
   257         
       
   258         iFile.Close();
       
   259         iMyFileHandle.Close();
       
   260     
       
   261         // no action for delete/rename or canceled request
       
   262         iRequestQueue->RequestComplete(this);
       
   263         
       
   264 #ifdef _DEBUG
       
   265     TTime stop;
       
   266     stop.UniversalTime();
       
   267     TN_DEBUG3( "CThumbnailRequestActive::RunL() total execution time of req %d is %d ms",
       
   268                 iParams.iRequestId, (TInt)stop.MicroSecondsFrom(iStartExecTime).Int64()/1000 );
       
   269 #endif
       
   270         }
       
   271     else if (iCanceled || iRequestType == EReqRenameThumbnails)
       
   272         {
       
   273         if (iCanceled)
       
   274             {
       
   275             TN_DEBUG1( "CThumbnailRequestActive::RunL() - canceled" );
       
   276             }
       
   277         else if (iRequestType == EReqRenameThumbnails)
       
   278             {
       
   279             TN_DEBUG1( "CThumbnailRequestActive::RunL() - rename" );
       
   280             }
   251     
   281     
   252         iFile.Close();
   282         iFile.Close();
   253         iMyFileHandle.Close();
   283         iMyFileHandle.Close();
   254     
   284     
   255         // no action for delete/rename or canceled request
   285         // no action for delete/rename or canceled request
   285         
   315         
   286         iTimer->Start( KClientRequestTimeout, KClientRequestTimeout, 
   316         iTimer->Start( KClientRequestTimeout, KClientRequestTimeout, 
   287                            TCallBack(TimerCallBack, this));
   317                            TCallBack(TimerCallBack, this));
   288         SetActive();
   318         SetActive();
   289         }
   319         }
   290     else if ( iStatus.Int())
   320     else if ( iStatus.Int() )
   291         {
   321         {
   292         TN_DEBUG2( "CThumbnailRequestActive::RunL() - error (%d) occured", iStatus.Int() );
   322         TN_DEBUG2( "CThumbnailRequestActive::RunL() - error (%d) occured", iStatus.Int() );
   293         // An error occurred
   323         // An error occurred
   294         iError = iStatus.Int();
   324         iError = iStatus.Int();
   295         HandleError();
   325         HandleError();
   525             else
   555             else
   526                 {
   556                 {
   527                 TN_DEBUG1( "CThumbnailRequestActive::HandleError() - session reconnected");
   557                 TN_DEBUG1( "CThumbnailRequestActive::HandleError() - session reconnected");
   528                 }
   558                 }
   529             }
   559             }
   530         iCallbackThumbnail->Set( NULL, iClientData );
   560 
   531         
   561         if (iRequestObserver && iRequestType == EReqDeleteThumbnails)
   532         // don't leak internal TNM codes
   562              {
   533         if (iError == KThumbnailErrThumbnailNotFound)
   563              TN_DEBUG2( "CThumbnaiRequestActive::HandleError() - iRequestObserver->ThumbnailRequestReady %d", iParams.iRequestId );
   534             {
   564              iRequestObserver->ThumbnailRequestReady(iError, ERequestDeleteThumbnails ,iParams.iRequestId);
   535             iError = KErrNotFound;
   565              }
       
   566         else
       
   567             {			
       
   568 			 iCallbackThumbnail->Set( NULL, iClientData );
       
   569         
       
   570 	        // don't leak internal TNM codes
       
   571 	        if (iError == KThumbnailErrThumbnailNotFound)
       
   572 	            {
       
   573 	            iError = KErrNotFound;
       
   574 	            }
       
   575 			
       
   576             TN_DEBUG2( "CThumbnaiRequestActive::HandleError() - iObserver.ThumbnailReady %d", iParams.iRequestId );
       
   577             iObserver.ThumbnailReady( iError, *iCallbackThumbnail, iParams.iRequestId );
   536             }
   578             }
   537         
       
   538         TN_DEBUG2( "CThumbnaiRequestActive::HandleError() - iObserver.ThumbnailReady %d", iParams.iRequestId );
       
   539         iObserver.ThumbnailReady( iError, *iCallbackThumbnail, iParams.iRequestId );
       
   540         
   579         
   541         iError = KErrNone;
   580         iError = KErrNone;
   542         }
   581         }
   543     
   582     
   544     ReleaseServerBitmap();
   583     ReleaseServerBitmap();
   587     iParams.iPriority = aPriority;
   626     iParams.iPriority = aPriority;
   588     iParams.iFlags = aFlags;
   627     iParams.iFlags = aFlags;
   589     iParams.iQualityPreference = aQualityPreference;
   628     iParams.iQualityPreference = aQualityPreference;
   590     iParams.iThumbnailSize = aThumbnailSize;
   629     iParams.iThumbnailSize = aThumbnailSize;
   591     iParams.iThumbnailId = aThumbnailId;
   630     iParams.iThumbnailId = aThumbnailId;
       
   631     iParams.iOverwrite = EFalse;
   592     
   632     
   593     User::LeaveIfError( iFile.Duplicate( aFile ));
   633     User::LeaveIfError( iFile.Duplicate( aFile ));
   594     
   634     
   595     iTargetUri = aTargetUri;
   635     iTargetUri = aTargetUri;
   596     }
   636     }
   622     iParams.iPriority = aPriority;
   662     iParams.iPriority = aPriority;
   623     iParams.iFlags = aFlags;
   663     iParams.iFlags = aFlags;
   624     iParams.iQualityPreference = aQualityPreference;
   664     iParams.iQualityPreference = aQualityPreference;
   625     iParams.iThumbnailSize = aThumbnailSize;
   665     iParams.iThumbnailSize = aThumbnailSize;
   626     iParams.iThumbnailId = aThumbnailId;
   666     iParams.iThumbnailId = aThumbnailId;
       
   667     iParams.iOverwrite = EFalse;
   627     
   668     
   628     iTargetUri = aTargetUri;
   669     iTargetUri = aTargetUri;
   629     }
   670     }
   630 
   671 
   631 
   672 
   655     iParams.iFlags = aFlags;
   696     iParams.iFlags = aFlags;
   656     iParams.iQualityPreference = aQualityPreference;
   697     iParams.iQualityPreference = aQualityPreference;
   657     iParams.iThumbnailSize = aThumbnailSize;
   698     iParams.iThumbnailSize = aThumbnailSize;
   658     iParams.iThumbnailId = aThumbnailId;
   699     iParams.iThumbnailId = aThumbnailId;
   659     iParams.iFileName = aPath;
   700     iParams.iFileName = aPath;
       
   701     iParams.iOverwrite = EFalse;
   660     
   702     
   661     iPath = aPath;
   703     iPath = aPath;
   662     iTargetUri = aTargetUri;
   704     iTargetUri = aTargetUri;
   663     }
   705     }
   664 
   706 
   669 //
   711 //
   670 void CThumbnailRequestActive::SetThumbnailL( TDesC8* aBuffer, TThumbnailId aThumbnailId,
   712 void CThumbnailRequestActive::SetThumbnailL( TDesC8* aBuffer, TThumbnailId aThumbnailId,
   671     const TDesC8& aMimeType, CThumbnailManager::TThumbnailFlags aFlags,
   713     const TDesC8& aMimeType, CThumbnailManager::TThumbnailFlags aFlags,
   672     CThumbnailManager::TThumbnailQualityPreference aQualityPreference, const TSize& aSize,
   714     CThumbnailManager::TThumbnailQualityPreference aQualityPreference, const TSize& aSize,
   673     const TDisplayMode aDisplayMode, const TInt aPriority, TAny* aClientData,
   715     const TDisplayMode aDisplayMode, const TInt aPriority, TAny* aClientData,
   674     TBool aGeneratePersistentSizesOnly, const TDesC& aTargetUri, TThumbnailSize aThumbnailSize )
   716     TBool aGeneratePersistentSizesOnly, const TDesC& aTargetUri, TThumbnailSize aThumbnailSize,
       
   717     TBool aOverwrite)
   675     {
   718     {
   676     iRequestType = EReqSetThumbnailBuffer;
   719     iRequestType = EReqSetThumbnailBuffer;
   677 
   720 
   678     iClientData = aClientData;
   721     iClientData = aClientData;
   679     iParams.iControlFlags = (aGeneratePersistentSizesOnly ?
   722     iParams.iControlFlags = (aGeneratePersistentSizesOnly ?
   689     iParams.iRequestId = iRequestId;
   732     iParams.iRequestId = iRequestId;
   690     iParams.iPriority = aPriority;
   733     iParams.iPriority = aPriority;
   691     iParams.iFlags = aFlags;
   734     iParams.iFlags = aFlags;
   692     iParams.iQualityPreference = aQualityPreference;
   735     iParams.iQualityPreference = aQualityPreference;
   693     iParams.iThumbnailId = aThumbnailId;
   736     iParams.iThumbnailId = aThumbnailId;
       
   737     iParams.iOverwrite = aOverwrite;
   694     
   738     
   695     iTargetUri = aTargetUri;
   739     iTargetUri = aTargetUri;
   696     }
   740     }
   697 
   741 
   698 // ---------------------------------------------------------------------------
   742 // ---------------------------------------------------------------------------
   702 //
   746 //
   703 void CThumbnailRequestActive::SetThumbnailL( CFbsBitmap* aBitmap, TThumbnailId aThumbnailId,
   747 void CThumbnailRequestActive::SetThumbnailL( CFbsBitmap* aBitmap, TThumbnailId aThumbnailId,
   704     const TDesC8& aMimeType, CThumbnailManager::TThumbnailFlags aFlags,
   748     const TDesC8& aMimeType, CThumbnailManager::TThumbnailFlags aFlags,
   705     CThumbnailManager::TThumbnailQualityPreference aQualityPreference, const TSize& aSize,
   749     CThumbnailManager::TThumbnailQualityPreference aQualityPreference, const TSize& aSize,
   706     const TDisplayMode aDisplayMode, const TInt aPriority, TAny* aClientData,
   750     const TDisplayMode aDisplayMode, const TInt aPriority, TAny* aClientData,
   707     TBool aGeneratePersistentSizesOnly, const TDesC& aTargetUri, TThumbnailSize aThumbnailSize )
   751     TBool aGeneratePersistentSizesOnly, const TDesC& aTargetUri, TThumbnailSize aThumbnailSize,
       
   752     TBool aOverwrite)
   708     {    
   753     {    
   709     iClientData = aClientData;
   754     iClientData = aClientData;
   710     iParams.iControlFlags = (aGeneratePersistentSizesOnly ?
   755     iParams.iControlFlags = (aGeneratePersistentSizesOnly ?
   711                             EThumbnailGeneratePersistentSizesOnly :
   756                             EThumbnailGeneratePersistentSizesOnly :
   712                             EThumbnailNoControlFlags);
   757                             EThumbnailNoControlFlags);
   719     iParams.iPriority = aPriority;
   764     iParams.iPriority = aPriority;
   720     iParams.iFlags = aFlags;
   765     iParams.iFlags = aFlags;
   721     iParams.iQualityPreference = aQualityPreference;
   766     iParams.iQualityPreference = aQualityPreference;
   722     iParams.iThumbnailId = aThumbnailId;
   767     iParams.iThumbnailId = aThumbnailId;
   723     iParams.iFileName = aTargetUri;
   768     iParams.iFileName = aTargetUri;
       
   769     iParams.iOverwrite = aOverwrite;
   724     
   770     
   725     iTargetUri = aTargetUri;
   771     iTargetUri = aTargetUri;
   726     
   772     
   727     TInt memoryFree( 0 );
   773     TInt memoryFree( 0 );
   728     HAL::Get( HALData::EMemoryRAMFree, memoryFree );
   774     HAL::Get( HALData::EMemoryRAMFree, memoryFree );
   767     iParams.iRequestId = iRequestId;
   813     iParams.iRequestId = iRequestId;
   768     iParams.iPriority = aPriority;
   814     iParams.iPriority = aPriority;
   769     iParams.iFlags = aFlags;
   815     iParams.iFlags = aFlags;
   770     iParams.iQualityPreference = aQualityPreference;
   816     iParams.iQualityPreference = aQualityPreference;
   771     iParams.iThumbnailId = aThumbnailId;
   817     iParams.iThumbnailId = aThumbnailId;
       
   818     iParams.iOverwrite = EFalse;
   772     
   819     
   773     iPath = aPath;
   820     iPath = aPath;
   774     iOrientation = aOrientation;
   821     iOrientation = aOrientation;
   775     iModified = aModified;
   822     iModified = aModified;
   776     }
   823     }