diff -r 7197e789b953 -r ffa62e555b02 imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnailrequestactive.cpp --- a/imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnailrequestactive.cpp Fri Apr 16 15:16:16 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnailrequestactive.cpp Mon May 03 12:48:51 2010 +0300 @@ -163,6 +163,7 @@ case EReqGetThumbnailHandleLater: { // open file handle + iFile.Close(); User::LeaveIfError( iFile.Open( iFs, iTargetUri, EFileShareReadersOrWriters ) ); TN_DEBUG2( "CThumbnailRequestActive::StartL() - file handle opened for %S", &iTargetUri ); @@ -185,7 +186,12 @@ iSession.DeleteThumbnails( iParams.iThumbnailId, iParamsPckg, iStatus ); } break; - } + } + case EReqRenameThumbnails: + { + iSession.RenameThumbnails( iParamsPckg, iStatus ); + break; + } default: { break; @@ -219,9 +225,15 @@ iTimer->Cancel(); - if (iRequestType == EReqDeleteThumbnails || iCanceled) + if (iRequestType == EReqDeleteThumbnails || iCanceled || + iRequestType == EReqRenameThumbnails) { - // no action for delete or canceled request + TN_DEBUG1( "CThumbnailRequestActive::RunL() - rename/delete/canceled" ); + + iFile.Close(); + iMyFileHandle.Close(); + + // no action for delete/rename or canceled request iRequestQueue->RequestComplete(this); #ifdef _DEBUG @@ -239,8 +251,8 @@ // We tried to get thumbnail using file path, but it was not found in // the database. We need to open the file now (on the client side) and - // use file handle. - + // use file handle. + iFile.Close(); TInt err = iFile.Open( iFs, iParams.iFileName, EFileShareReadersOrWriters ); TN_DEBUG2( "CThumbnaiRequestActive::RunL() - file handle open err = %d", err ); User::LeaveIfError( err ); @@ -273,6 +285,10 @@ iObserver.ThumbnailReady( iStatus.Int(), *iCallbackThumbnail, iParams.iRequestId ); ReleaseServerBitmap(); + + iFile.Close(); + iMyFileHandle.Close(); + iRequestQueue->RequestComplete(this); #ifdef _DEBUG @@ -296,6 +312,8 @@ ReleaseServerBitmap(); + iFile.Close(); + //set flags so that EThumbnailGeneratePersistentSizesOnly is done aka check all missing sizes iParams.iQualityPreference = CThumbnailManager::EOptimizeForQuality; iParams.iControlFlags = EThumbnailGeneratePersistentSizesOnly; @@ -350,12 +368,17 @@ if ( iProcessingPreview ) { TN_DEBUG2( "CThumbnailRequestActive::RunL() - iObserver.ThumbnailPreviewReady %d", iParams.iRequestId ); - //increase priority of 2nd round (both, AO and request itself) + + //increase priority of 2nd round (both, AO and request itself) this->SetPriority(this->Priority() + 1); iParams.iPriority++; iObserver.ThumbnailPreviewReady( *iCallbackThumbnail, iParams.iRequestId ); iProcessingPreview = EFalse; + ReleaseServerBitmap(); + + iFile.Close(); + Get2ndPhaseThumbnailL(); } else @@ -365,6 +388,9 @@ iObserver.ThumbnailReady( iStatus.Int(), * iCallbackThumbnail, iParams.iRequestId ); ReleaseServerBitmap(); + iFile.Close(); + iMyFileHandle.Close(); + iRequestQueue->RequestComplete(this); #ifdef _DEBUG @@ -480,6 +506,9 @@ ReleaseServerBitmap(); + iFile.Close(); + iMyFileHandle.Close(); + iRequestCompleted = ETrue; iRequestQueue->RequestComplete(this); iRequestActive = EFalse; @@ -726,6 +755,22 @@ } // --------------------------------------------------------------------------- +// CThumbnailRequestActive::RenameThumbnails() +// Rename thumbnails. +// --------------------------------------------------------------------------- +// +void CThumbnailRequestActive::RenameThumbnails( const TDesC& aCurrentPath, + const TDesC& aNewPath, const TInt aPriority ) + { + iRequestType = EReqRenameThumbnails; + + iParams.iRequestId = iRequestId; + iParams.iPriority = aPriority; + iParams.iFileName = aCurrentPath; + iParams.iTargetUri = aNewPath; + } + +// --------------------------------------------------------------------------- // Request 2nd phase thumbnail // --------------------------------------------------------------------------- // @@ -798,8 +843,16 @@ CThumbnailRequestActive* self = static_cast( aAny ); + self->iTimer->Cancel(); + + if (self->IsActive()) + { + // hangs without this + TRequestStatus* statusPtr = &self->iStatus; + User::RequestComplete( statusPtr, KErrTimedOut ); + } + self->Cancel(); - self->iTimer->Cancel(); if (self->iStartError != KErrNone) { @@ -812,6 +865,8 @@ self->HandleError(); + TN_DEBUG1( "CThumbnailRequestActive::TimerCallBack() - end"); + return KErrNone; }