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 } |