diff -r ffa62e555b02 -r b790c5b3d11f imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnailrequestactive.cpp --- a/imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnailrequestactive.cpp Mon May 03 12:48:51 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnailrequestactive.cpp Fri May 14 16:10:12 2010 +0300 @@ -141,8 +141,27 @@ } case EReqGetThumbnailPath: { - iSession.RequestThumbnailL( iPath, iTargetUri, iParams.iThumbnailId, - iParamsPckg, iStatus ); + // for custom size requests file handle can be opened here already, because + // custom thumbnails are never stored in db + if (iParams.iThumbnailSize == ECustomThumbnailSize && + iParams.iOriginalControlFlags != EThumbnailGeneratePersistentSizesOnly) + { + TN_DEBUG1( "CThumbnaiRequestActive::StartL()- custom size request" ); + + iFile.Close(); + User::LeaveIfError( iFile.Open( iFs, iPath, EFileShareReadersOrWriters ) ); + + TN_DEBUG2( "CThumbnailRequestActive::StartL() - file handle opened for %S", &iTargetUri ); + + CleanupClosePushL( iFile ); + iSession.RequestThumbnailL( iFile, iPath, iParamsPckg, iStatus ); + CleanupStack::PopAndDestroy( &iFile ); + } + else + { + iSession.RequestThumbnailL( iPath, iTargetUri, iParams.iThumbnailId, + iParamsPckg, iStatus ); + } break; } case EReqSetThumbnailBuffer: @@ -212,7 +231,7 @@ void CThumbnailRequestActive::RunL() { TN_DEBUG2( "CThumbnailRequestActive::RunL() - request ID: %d", iParams.iRequestId ); - + if ( iParams.iControlFlags == EThumbnailPreviewThumbnail ) { iRequestCompleted = EFalse; @@ -450,6 +469,24 @@ // --------------------------------------------------------------------------- +// CThumbnailRequestActive::AsyncCancel() +// --------------------------------------------------------------------------- +// +void CThumbnailRequestActive::AsyncCancel() + { + TN_DEBUG1( "CThumbnailRequestActive::AsyncCancel"); + + __ASSERT_DEBUG(( iRequestId > 0 ), ThumbnailPanic( EThumbnailWrongId )); + + iCanceled = ETrue; + iSession.CancelRequest( iRequestId ); + ReleaseServerBitmap(); + + // AO stays active until request is complete or timeout is reached + } + + +// --------------------------------------------------------------------------- // CThumbnailRequestActive::ReleaseServerBitmap() // Releases reserved bitmap. // --------------------------------------------------------------------------- @@ -619,6 +656,7 @@ iParams.iQualityPreference = aQualityPreference; iParams.iThumbnailSize = aThumbnailSize; iParams.iThumbnailId = aThumbnailId; + iParams.iFileName = aPath; iPath = aPath; iTargetUri = aTargetUri; @@ -845,13 +883,6 @@ self->iTimer->Cancel(); - if (self->IsActive()) - { - // hangs without this - TRequestStatus* statusPtr = &self->iStatus; - User::RequestComplete( statusPtr, KErrTimedOut ); - } - self->Cancel(); if (self->iStartError != KErrNone)