imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailserversession.cpp
branchRCL_3
changeset 7 2eb74cf6572e
parent 5 82749d516180
child 8 7403edfcf0fb
--- a/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailserversession.cpp	Fri Feb 19 23:07:36 2010 +0200
+++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailserversession.cpp	Fri Mar 12 15:43:57 2010 +0200
@@ -102,11 +102,6 @@
                 err = ChangePriority( aMessage );
                 break;
                 }
-        case ECreateThumbnails:
-                {
-                CreateThumbnailsL( aMessage );
-                break;
-                }
         case EDeleteThumbnails:
                 {
                 DeleteThumbnailsL( aMessage );
@@ -243,17 +238,24 @@
     aMessage.ReadL( 0, iRequestParams );
     const TThumbnailRequestParams& params = iRequestParams();
     
-    TBool finished = Server()->UpdateThumbnailsL( params.iThumbnailId, params.iFileName, params.iOrientation, params.iModified );
+    TBool finished = Server()->UpdateThumbnailsL( params.iFileName, params.iOrientation, params.iModified );
     
     RArray < TThumbnailPersistentSize >* missingSizes = NULL;
     
+    TBool gridSizeOnly(EFalse);
+            
+    if ( params.iQualityPreference == CThumbnailManager
+                    ::EOptimizeForQualityWithPreview )
+        {
+        gridSizeOnly = ETrue;
+        }
+    
     if (finished)
         {
         // source type
         TDataType mimeType;
         TInt sourceType = 0;
         TInt err = Server()->MimeTypeFromFileExt( params.iFileName, mimeType );
-        TBool missingIDs(EFalse);
         
         // get missing sizes
         if ( err == KErrNone && ( params.iControlFlags & EThumbnailGeneratePersistentSizesOnly ) != 0 )
@@ -263,7 +265,7 @@
             missingSizes = new (ELeave) RArray < TThumbnailPersistentSize >;
             CleanupClosePushL( *missingSizes );
         
-            Server()->GetMissingSizesAndIDsL( params.iFileName, sourceType, *missingSizes, missingIDs);
+            Server()->GetMissingSizesL( params.iFileName, sourceType, *missingSizes, gridSizeOnly );
                 
             if ( missingSizes->Count() == 0)
                 {
@@ -276,7 +278,7 @@
         
         if(!missingSizes)
             {
-            TN_DEBUG1( "CThumbnailServerSession::UpdateThumbnailsL() - finished" );
+            TN_DEBUG1( "CThumbnailServerSession::UpdateThumbnailsL() - finished part 1" );
             aMessage.Complete( KErrNone );
             }
         else
@@ -285,7 +287,7 @@
             }
         }
 
-    if(missingSizes || !finished)
+    if (missingSizes || !finished)
         {
         TN_DEBUG1( "CThumbnailServerSession::UpdateThumbnailsL() - need to create (some) thumbs" );
         
@@ -306,7 +308,7 @@
         }
     else
         {
-        TN_DEBUG1( "CThumbnailServerSession::UpdateThumbnailsL() - finished" );
+        TN_DEBUG1( "CThumbnailServerSession::UpdateThumbnailsL() - finished part 2" );
         }
     
     iMessage = RMessage2();
@@ -334,54 +336,14 @@
 
     aMessage.ReadL( 0, iRequestParams );
     const TThumbnailRequestParams& params = iRequestParams();
-    TRAPD( err, Server()->FetchThumbnailL( params.iThumbnailId, iBitmap, iBuffer,
-                                           params.iThumbnailSize, iOriginalSize ));
-    if ( !err && iBitmap )
-        {
-        TN_DEBUG1( 
-            "CThumbnailServerSession::RequestThumbByIdAsyncL() - found existing thumbnail- bitmap" );
-
-        ProcessBitmapL();
-        }
-    else if ( !err && iBuffer)
-        {
-        TN_DEBUG1( 
-             "CThumbnailServerSession::RequestThumbByIdAsyncL() - found existing thumbnail- jpeg" );
-        
-        CThumbnailDecodeTask* task = new( ELeave )CThumbnailDecodeTask( Server()
-                 ->Processor(), * Server(), iBuffer, params.iPriority, params.iDisplayMode );
-        
-        CleanupStack::PushL( task );
-        task->SetMessageData( TThumbnailServerRequestId( this, params.iRequestId ), iMessage );
-        Server()->QueueTaskL( task );
-        CleanupStack::Pop( task ); // owned by processor now
-        
-        // Decode task is now responsible for completing the message
-        iMessage = RMessage2();
-        
-        //CThumbnailDecodeTask is responsible freeing
-        iBuffer = NULL;
-        }
-    else if( err == KErrCompletion )                
-        {
-        // If thumbnail of requested size is blacklisted, fetching is left with KErrCompletion
-        TN_DEBUG1( 
-            "CThumbnailServerSession::RequestThumbByIdAsyncL() - thumbnail blacklisted" );
-        aMessage.Complete( err );
-        iMessage = RMessage2();
-        }
-    else                
-        {
-        TN_DEBUG2( 
-            "CThumbnailServerSession::RequestThumbByIdAsyncL() - thumbnail not found ( query path from MDS ), err=%d ", err );
-
+    
 #ifdef RD_MDS_2_5        
         // try to query path from MDS
         CThumbnailMDSQueryTask* task = new( ELeave )CThumbnailMDSQueryTask(
                 Server()->Processor(), params.iPriority + 1, Server()->GetMdESession(), *Server());
         
         CleanupStack::PushL( task );
-        task->QueryPathByIdL(params.iThumbnailId);
+        task->QueryPathByIdL(params.iThumbnailId, EFalse);
         task->SetMessageData( TThumbnailServerRequestId( this, params.iRequestId ), iMessage );
         Server()->QueueTaskL( task );
         CleanupStack::Pop( task ); // owned by processor now
@@ -389,14 +351,13 @@
         // query task is now responsible for completing the message
         iMessage = RMessage2();
 #else
-        User::Leave(KThumbnailErrThumbnailNotFound);
+        User::Leave(KErrNotSupported);
 #endif // RD_MDS_2_5
         
-        }   
     
 #ifdef _DEBUG
     aStop.UniversalTime();
-    TN_DEBUG2( "CThumbnailStore::RequestThumbByIdAsyncL() request took %d ms", (TInt)aStop.MicroSecondsFrom(aStart).Int64()/1000 );
+    TN_DEBUG2( "CThumbnailServerSession::RequestThumbByIdAsyncL() request took %d ms", (TInt)aStop.MicroSecondsFrom(aStart).Int64()/1000 );
 #endif 
     
     TN_DEBUG1("CThumbnailServerSession::RequestThumbByIdAsyncL() - end" );
@@ -437,6 +398,7 @@
     // CreateThumbnails
     if (params.iControlFlags == EThumbnailGeneratePersistentSizesOnly)
         {
+        TN_DEBUG1( "CThumbnailServerSession::RequestThumbByFileHandleAsyncL() - EThumbnailGeneratePersistentSizesOnly" );
         CleanupClosePushL( file );
         CreateGenerateTaskFromFileHandleL( &file );
         CleanupStack::Pop( &file );         
@@ -467,6 +429,7 @@
         else if ( (err == KErrNotFound || err == KErrAccessDenied) && 
                  !(params.iFlags& CThumbnailManager::EDoNotCreate) )
             {
+            TN_DEBUG1( "CThumbnailServerSession::RequestThumbByFileHandleAsyncL() - KErrNotFound & !EDoNotCreate" );
             CreateGenerateTaskFromFileHandleL( &file);
             }
         else if (!err && iBuffer)
@@ -569,7 +532,7 @@
 	        {
             // If thumbnail of requested size is blacklisted, fetching is left with KErrCompletion
             TN_DEBUG1( 
-                "CThumbnailServerSession::RequestThumbByIdAsyncL() - thumbnail blacklisted" );
+                "CThumbnailServerSession::RequestThumbByPathAsyncL() - thumbnail blacklisted" );
             aMessage.Complete( err );
             iMessage = RMessage2();
 	        }
@@ -595,24 +558,7 @@
 	            User::Leave( KErrDiskFull );
 	            }
 
-#ifdef RD_MDS_2_5	        
-            // try to query ID from MDS
-            CThumbnailMDSQueryTask* task = new( ELeave )CThumbnailMDSQueryTask(
-                    Server()->Processor(), params.iPriority + 1, Server()->GetMdESession(), *Server());
-            
-            CleanupStack::PushL( task );
-            task->SetUpdateToDb( EFalse );
-            task->QueryIdByPathL( params.iFileName );
-            task->SetMessageData( TThumbnailServerRequestId( this, params.iRequestId ), iMessage );
-            Server()->QueueTaskL( task );
-            CleanupStack::Pop( task ); // owned by processor now
-            
-            // query task is now responsible for completing the message
-            iMessage = RMessage2();	            
-#else
             User::Leave(err);
-#endif // RD_MDS_2_5
-	        
 	        }   
 	   }
     
@@ -690,7 +636,6 @@
     TDataType mimeType;
     TInt sourceType = 0;
     TInt err = Server()->MimeTypeFromFileExt( params.iTargetUri, mimeType );
-    TBool missingIDs(EFalse);
     
     // get missing sizes
     if ( err == KErrNone && ( params.iControlFlags & EThumbnailGeneratePersistentSizesOnly ) != 0 )
@@ -700,7 +645,7 @@
         missingSizes = new (ELeave) RArray < TThumbnailPersistentSize >;
         CleanupClosePushL( *missingSizes );
     
-        Server()->GetMissingSizesAndIDsL( params.iTargetUri, sourceType, *missingSizes, missingIDs);
+        Server()->GetMissingSizesL( params.iTargetUri, sourceType, *missingSizes, EFalse);
             
         if ( missingSizes->Count() == 0)
             {
@@ -731,11 +676,9 @@
             CThumbnailScaleTask* scaleTask = CThumbnailScaleTask::NewL( Server()->Processor(),
                 *Server(), params.iTargetUri, bitmap, bitmapSize,
                 (*missingSizes)[i].iSize, (*missingSizes)[i].iCrop, params.iDisplayMode,
-                KMaxPriority, KNullDesC, (*missingSizes)[i].iType, params.iThumbnailId, EFalse, EFalse );
+                KMaxPriority, KNullDesC, (*missingSizes)[i].iType, params.iModified, EFalse, EFalse );
             CleanupStack::PushL( scaleTask );
             scaleTask->SetDoStore( ETrue );
-            //increase priority, scale needs to run before ID update below
-            scaleTask->SetPriority( params.iPriority + 1 );
             Server()->Processor().AddTaskL( scaleTask );
             CleanupStack::Pop( scaleTask );
             
@@ -746,8 +689,6 @@
                 iMessage = RMessage2();
                 }
             }
-        
-        TN_DEBUG3("CThumbnailServerSession::RequestSetThumbnailByBitmapL() ID = %d, missingIDs = %d", params.iThumbnailId, missingIDs);
         }
     else
         {
@@ -767,23 +708,6 @@
     iBitmapHandle = 0;
     bitmap = NULL;
     }
-
-// -----------------------------------------------------------------------------
-// CThumbnailServerSession::CreateThumbnailsL()
-// Create thumbnails for given object file
-// -----------------------------------------------------------------------------
-//
-void CThumbnailServerSession::CreateThumbnailsL( const RMessage2& aMessage )
-    {
-    RFile64 file;
-    CleanupClosePushL( file );
-	User::LeaveIfError( file.AdoptFromClient( aMessage, 1, 2 ));
-
-	CreateGenerateTaskFromFileHandleL( &file);
-        
-	CleanupStack::Pop( &file );
-    }      
-
  
 // -----------------------------------------------------------------------------
 // CThumbnailServerSession::CreateGenerateTaskL()
@@ -801,8 +725,6 @@
         {
         User::Leave( KErrDiskFull );
         }
-      
-    TBool missingIDs = EFalse;
     
     RArray < TThumbnailPersistentSize >* missingSizes = NULL;
     
@@ -813,35 +735,17 @@
         sourceType = Server()->SourceTypeFromMimeType( params.iMimeType );
         missingSizes = new (ELeave) RArray < TThumbnailPersistentSize >;
         CleanupClosePushL( *missingSizes );
-        
-        Server()->GetMissingSizesAndIDsL( params.iFileName, sourceType, *missingSizes, missingIDs );
-#ifdef RD_MDS_2_5        
-        if( missingIDs )
-            {
-            TN_DEBUG1("CThumbnailServerSession::CreateGenerateTaskFromFileHandleL() some IDs missing");
+		
+		    
+	    TBool gridSizeOnly(EFalse);
             
-            if( params.iThumbnailId == KNoId)
-                {
-                TN_DEBUG1("CThumbnailServerSession::CreateGenerateTaskFromFileHandleL() query fro MDS");
-                // try to query ID from MDS
-                CThumbnailMDSQueryTask* task = new( ELeave )CThumbnailMDSQueryTask(
-                        Server()->Processor(), params.iPriority + 1, Server()->GetMdESession(), *Server());
-                
-                CleanupStack::PushL( task );
-                task->QueryIdByPathL( params.iFileName );
-                
-                task->SetMessageData( TThumbnailServerRequestId( this, params.iRequestId ) );
-                Server()->QueueTaskL( task );
-                CleanupStack::Pop( task ); // owned by processor now
-                TN_DEBUG1("CThumbnailServerSession::CreateGenerateTaskFromFileHandleL() query from MDS queued" );
-                }
-            else
-                {
-                TN_DEBUG2("CThumbnailServerSession::CreateGenerateTaskFromFileHandleL() got ID %d from params", params.iThumbnailId);
-                TRAP_IGNORE( Server()->UpdateIDL(params.iFileName, params.iThumbnailId ) );
-                }
-            }
-#endif // RD_MDS_2_5
+	    if ( params.iQualityPreference == CThumbnailManager
+	                    ::EOptimizeForQualityWithPreview )
+	        {
+	        gridSizeOnly = ETrue;
+	        }
+        
+        Server()->GetMissingSizesL( params.iFileName, sourceType, *missingSizes, gridSizeOnly);
         
         if ( missingSizes->Count() == 0)
             {
@@ -873,7 +777,7 @@
     CThumbnailGenerateTask* task = new( ELeave )CThumbnailGenerateTask( Server()
         ->Processor(), * Server(), aFile, NULL, &params.iMimeType, params.iFlags,
         params.iSize, params.iDisplayMode, priority, missingSizes, params.iTargetUri,
-        params.iThumbnailSize, params.iThumbnailId, params.iQualityPreference );
+        params.iThumbnailSize, params.iModified, params.iQualityPreference );
 
     // do not store bitmaps to server pool when generating only
     if( params.iControlFlags & EThumbnailGeneratePersistentSizesOnly )
@@ -950,8 +854,7 @@
         missingSizes = new (ELeave) RArray < TThumbnailPersistentSize >;
         CleanupClosePushL( *missingSizes );
         
-        TBool missingIDs;
-        Server()->GetMissingSizesAndIDsL( params.iTargetUri, sourceType, *missingSizes, missingIDs );
+        Server()->GetMissingSizesL( params.iTargetUri, sourceType, *missingSizes, EFalse );
             
         if ( missingSizes->Count() == 0)
             {
@@ -984,7 +887,7 @@
     CThumbnailGenerateTask* task = new( ELeave )CThumbnailGenerateTask( Server()
         ->Processor(), * Server(), NULL, aBuffer, &params.iMimeType, params.iFlags,
         params.iSize, params.iDisplayMode, priority, missingSizes, params.iTargetUri,
-        params.iThumbnailSize, params.iThumbnailId, params.iQualityPreference );
+        params.iThumbnailSize, params.iModified, params.iQualityPreference );
 
     // do not store bitmaps to server pool when generating only
     if( params.iControlFlags & EThumbnailGeneratePersistentSizesOnly )
@@ -1030,15 +933,13 @@
     
     if( params.iFileName != KNullDesC )
         {
-        TN_DEBUG4( "CThumbnailServerSession::FetchThumbnailL( TNId==%d ThumbnailSize=%d ( Path=%S ))", 
-                params.iThumbnailId, params.iThumbnailSize, &params.iFileName );
+        TN_DEBUG3( "CThumbnailServerSession::FetchThumbnailL( ThumbnailSize=%d ( Path=%S ))", 
+                 params.iThumbnailSize, &params.iFileName );
         Server()->FetchThumbnailL( params.iFileName, iBitmap, iBuffer, params.iThumbnailSize, iOriginalSize);
         }
     else
         {
-        TN_DEBUG3( "CThumbnailServerSession::FetchThumbnailL(Path=%S ThumbnailSize=%d)", 
-                        &params.iFileName, params.iThumbnailSize );
-        Server()->FetchThumbnailL( params.iThumbnailId, iBitmap, iBuffer,  params.iThumbnailSize, iOriginalSize );
+        User::Leave( KErrNotSupported );
         }
 #ifdef _DEBUG
     if( iBitmap)
@@ -1064,7 +965,7 @@
         {
         Server()->StoreThumbnailL( params.iTargetUri, iBitmap, iOriginalSize,
                                    params.iFlags& CThumbnailManager::ECropToAspectRatio,
-                                   params.iThumbnailSize, params.iThumbnailId,
+                                   params.iThumbnailSize, params.iModified,
                                    EFalse, EFalse);
         }
     
@@ -1191,9 +1092,17 @@
     aMessage.ReadL( 0, iRequestParams );
     const TThumbnailRequestParams& params = iRequestParams();
     
-    TThumbnailId id = params.iThumbnailId;
-    Server()->DeleteThumbnailsByIdL( id );
+    
+#ifdef RD_MDS_2_5        
+    // try to query path from MDS
+    CThumbnailMDSQueryTask* task = new( ELeave )CThumbnailMDSQueryTask(
+            Server()->Processor(), params.iPriority + 1, Server()->GetMdESession(), *Server());
     
+    CleanupStack::PushL( task );
+    task->QueryPathByIdL(params.iThumbnailId, ETrue);
+    Server()->QueueTaskL( task );
+    CleanupStack::Pop( task ); // owned by processor now
+#endif // RD_MDS_2_5
     aMessage.Complete( KErrNone );
     iMessage = RMessage2();
     }
@@ -1328,6 +1237,7 @@
 //
 TInt CThumbnailServerSession::ConvertSqlErrToE32Err( TInt aReason )
     {
+    TN_DEBUG2("CThumbnailServerSession::ConvertSqlErrToE32Err(%d)", aReason);
     TInt e32Err;
     if ( aReason >=  - 144 )
     // magic: [-1..-144] is E32 error range