imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnailrequestactive.cpp
branchRCL_3
changeset 13 ffb2d5dd62e9
parent 11 85a88bc05e45
child 14 ad31f4183ddc
--- a/imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnailrequestactive.cpp	Tue Apr 27 16:57:55 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnailrequestactive.cpp	Tue May 11 16:30:11 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)