imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnailrequestactive.cpp
changeset 17 ffa62e555b02
parent 15 7197e789b953
child 19 b790c5b3d11f
--- 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<CThumbnailRequestActive*>( 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;
     }