imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailserversession.cpp
branchRCL_3
changeset 9 2eb74cf6572e
parent 5 82749d516180
child 10 7403edfcf0fb
equal deleted inserted replaced
5:82749d516180 9:2eb74cf6572e
   100         case EChangePriority:
   100         case EChangePriority:
   101                 {
   101                 {
   102                 err = ChangePriority( aMessage );
   102                 err = ChangePriority( aMessage );
   103                 break;
   103                 break;
   104                 }
   104                 }
   105         case ECreateThumbnails:
       
   106                 {
       
   107                 CreateThumbnailsL( aMessage );
       
   108                 break;
       
   109                 }
       
   110         case EDeleteThumbnails:
   105         case EDeleteThumbnails:
   111                 {
   106                 {
   112                 DeleteThumbnailsL( aMessage );
   107                 DeleteThumbnailsL( aMessage );
   113                 break;
   108                 break;
   114                 }
   109                 }
   241     
   236     
   242     // read message params
   237     // read message params
   243     aMessage.ReadL( 0, iRequestParams );
   238     aMessage.ReadL( 0, iRequestParams );
   244     const TThumbnailRequestParams& params = iRequestParams();
   239     const TThumbnailRequestParams& params = iRequestParams();
   245     
   240     
   246     TBool finished = Server()->UpdateThumbnailsL( params.iThumbnailId, params.iFileName, params.iOrientation, params.iModified );
   241     TBool finished = Server()->UpdateThumbnailsL( params.iFileName, params.iOrientation, params.iModified );
   247     
   242     
   248     RArray < TThumbnailPersistentSize >* missingSizes = NULL;
   243     RArray < TThumbnailPersistentSize >* missingSizes = NULL;
       
   244     
       
   245     TBool gridSizeOnly(EFalse);
       
   246             
       
   247     if ( params.iQualityPreference == CThumbnailManager
       
   248                     ::EOptimizeForQualityWithPreview )
       
   249         {
       
   250         gridSizeOnly = ETrue;
       
   251         }
   249     
   252     
   250     if (finished)
   253     if (finished)
   251         {
   254         {
   252         // source type
   255         // source type
   253         TDataType mimeType;
   256         TDataType mimeType;
   254         TInt sourceType = 0;
   257         TInt sourceType = 0;
   255         TInt err = Server()->MimeTypeFromFileExt( params.iFileName, mimeType );
   258         TInt err = Server()->MimeTypeFromFileExt( params.iFileName, mimeType );
   256         TBool missingIDs(EFalse);
       
   257         
   259         
   258         // get missing sizes
   260         // get missing sizes
   259         if ( err == KErrNone && ( params.iControlFlags & EThumbnailGeneratePersistentSizesOnly ) != 0 )
   261         if ( err == KErrNone && ( params.iControlFlags & EThumbnailGeneratePersistentSizesOnly ) != 0 )
   260             {
   262             {
   261             sourceType = Server()->SourceTypeFromMimeType( mimeType );
   263             sourceType = Server()->SourceTypeFromMimeType( mimeType );
   262             
   264             
   263             missingSizes = new (ELeave) RArray < TThumbnailPersistentSize >;
   265             missingSizes = new (ELeave) RArray < TThumbnailPersistentSize >;
   264             CleanupClosePushL( *missingSizes );
   266             CleanupClosePushL( *missingSizes );
   265         
   267         
   266             Server()->GetMissingSizesAndIDsL( params.iFileName, sourceType, *missingSizes, missingIDs);
   268             Server()->GetMissingSizesL( params.iFileName, sourceType, *missingSizes, gridSizeOnly );
   267                 
   269                 
   268             if ( missingSizes->Count() == 0)
   270             if ( missingSizes->Count() == 0)
   269                 {
   271                 {
   270                 // all thumbs already exist
   272                 // all thumbs already exist
   271                 CleanupStack::PopAndDestroy( missingSizes );
   273                 CleanupStack::PopAndDestroy( missingSizes );
   274                 }            
   276                 }            
   275             }
   277             }
   276         
   278         
   277         if(!missingSizes)
   279         if(!missingSizes)
   278             {
   280             {
   279             TN_DEBUG1( "CThumbnailServerSession::UpdateThumbnailsL() - finished" );
   281             TN_DEBUG1( "CThumbnailServerSession::UpdateThumbnailsL() - finished part 1" );
   280             aMessage.Complete( KErrNone );
   282             aMessage.Complete( KErrNone );
   281             }
   283             }
   282         else
   284         else
   283             {
   285             {
   284             TN_DEBUG1( "CThumbnailServerSession::UpdateThumbnailsL() - some sizes missing..." ); 
   286             TN_DEBUG1( "CThumbnailServerSession::UpdateThumbnailsL() - some sizes missing..." ); 
   285             }
   287             }
   286         }
   288         }
   287 
   289 
   288     if(missingSizes || !finished)
   290     if (missingSizes || !finished)
   289         {
   291         {
   290         TN_DEBUG1( "CThumbnailServerSession::UpdateThumbnailsL() - need to create (some) thumbs" );
   292         TN_DEBUG1( "CThumbnailServerSession::UpdateThumbnailsL() - need to create (some) thumbs" );
   291         
   293         
   292         if(missingSizes)
   294         if(missingSizes)
   293             {
   295             {
   304         // need to create new thumbs
   306         // need to create new thumbs
   305         aMessage.Complete( KThumbnailErrThumbnailNotFound );
   307         aMessage.Complete( KThumbnailErrThumbnailNotFound );
   306         }
   308         }
   307     else
   309     else
   308         {
   310         {
   309         TN_DEBUG1( "CThumbnailServerSession::UpdateThumbnailsL() - finished" );
   311         TN_DEBUG1( "CThumbnailServerSession::UpdateThumbnailsL() - finished part 2" );
   310         }
   312         }
   311     
   313     
   312     iMessage = RMessage2();
   314     iMessage = RMessage2();
   313     }
   315     }
   314 
   316 
   332        User::Leave(KErrArgument);
   334        User::Leave(KErrArgument);
   333        }
   335        }
   334 
   336 
   335     aMessage.ReadL( 0, iRequestParams );
   337     aMessage.ReadL( 0, iRequestParams );
   336     const TThumbnailRequestParams& params = iRequestParams();
   338     const TThumbnailRequestParams& params = iRequestParams();
   337     TRAPD( err, Server()->FetchThumbnailL( params.iThumbnailId, iBitmap, iBuffer,
   339     
   338                                            params.iThumbnailSize, iOriginalSize ));
       
   339     if ( !err && iBitmap )
       
   340         {
       
   341         TN_DEBUG1( 
       
   342             "CThumbnailServerSession::RequestThumbByIdAsyncL() - found existing thumbnail- bitmap" );
       
   343 
       
   344         ProcessBitmapL();
       
   345         }
       
   346     else if ( !err && iBuffer)
       
   347         {
       
   348         TN_DEBUG1( 
       
   349              "CThumbnailServerSession::RequestThumbByIdAsyncL() - found existing thumbnail- jpeg" );
       
   350         
       
   351         CThumbnailDecodeTask* task = new( ELeave )CThumbnailDecodeTask( Server()
       
   352                  ->Processor(), * Server(), iBuffer, params.iPriority, params.iDisplayMode );
       
   353         
       
   354         CleanupStack::PushL( task );
       
   355         task->SetMessageData( TThumbnailServerRequestId( this, params.iRequestId ), iMessage );
       
   356         Server()->QueueTaskL( task );
       
   357         CleanupStack::Pop( task ); // owned by processor now
       
   358         
       
   359         // Decode task is now responsible for completing the message
       
   360         iMessage = RMessage2();
       
   361         
       
   362         //CThumbnailDecodeTask is responsible freeing
       
   363         iBuffer = NULL;
       
   364         }
       
   365     else if( err == KErrCompletion )                
       
   366         {
       
   367         // If thumbnail of requested size is blacklisted, fetching is left with KErrCompletion
       
   368         TN_DEBUG1( 
       
   369             "CThumbnailServerSession::RequestThumbByIdAsyncL() - thumbnail blacklisted" );
       
   370         aMessage.Complete( err );
       
   371         iMessage = RMessage2();
       
   372         }
       
   373     else                
       
   374         {
       
   375         TN_DEBUG2( 
       
   376             "CThumbnailServerSession::RequestThumbByIdAsyncL() - thumbnail not found ( query path from MDS ), err=%d ", err );
       
   377 
       
   378 #ifdef RD_MDS_2_5        
   340 #ifdef RD_MDS_2_5        
   379         // try to query path from MDS
   341         // try to query path from MDS
   380         CThumbnailMDSQueryTask* task = new( ELeave )CThumbnailMDSQueryTask(
   342         CThumbnailMDSQueryTask* task = new( ELeave )CThumbnailMDSQueryTask(
   381                 Server()->Processor(), params.iPriority + 1, Server()->GetMdESession(), *Server());
   343                 Server()->Processor(), params.iPriority + 1, Server()->GetMdESession(), *Server());
   382         
   344         
   383         CleanupStack::PushL( task );
   345         CleanupStack::PushL( task );
   384         task->QueryPathByIdL(params.iThumbnailId);
   346         task->QueryPathByIdL(params.iThumbnailId, EFalse);
   385         task->SetMessageData( TThumbnailServerRequestId( this, params.iRequestId ), iMessage );
   347         task->SetMessageData( TThumbnailServerRequestId( this, params.iRequestId ), iMessage );
   386         Server()->QueueTaskL( task );
   348         Server()->QueueTaskL( task );
   387         CleanupStack::Pop( task ); // owned by processor now
   349         CleanupStack::Pop( task ); // owned by processor now
   388         
   350         
   389         // query task is now responsible for completing the message
   351         // query task is now responsible for completing the message
   390         iMessage = RMessage2();
   352         iMessage = RMessage2();
   391 #else
   353 #else
   392         User::Leave(KThumbnailErrThumbnailNotFound);
   354         User::Leave(KErrNotSupported);
   393 #endif // RD_MDS_2_5
   355 #endif // RD_MDS_2_5
   394         
   356         
   395         }   
       
   396     
   357     
   397 #ifdef _DEBUG
   358 #ifdef _DEBUG
   398     aStop.UniversalTime();
   359     aStop.UniversalTime();
   399     TN_DEBUG2( "CThumbnailStore::RequestThumbByIdAsyncL() request took %d ms", (TInt)aStop.MicroSecondsFrom(aStart).Int64()/1000 );
   360     TN_DEBUG2( "CThumbnailServerSession::RequestThumbByIdAsyncL() request took %d ms", (TInt)aStop.MicroSecondsFrom(aStart).Int64()/1000 );
   400 #endif 
   361 #endif 
   401     
   362     
   402     TN_DEBUG1("CThumbnailServerSession::RequestThumbByIdAsyncL() - end" );
   363     TN_DEBUG1("CThumbnailServerSession::RequestThumbByIdAsyncL() - end" );
   403     }
   364     }
   404 
   365 
   435         }
   396         }
   436     
   397     
   437     // CreateThumbnails
   398     // CreateThumbnails
   438     if (params.iControlFlags == EThumbnailGeneratePersistentSizesOnly)
   399     if (params.iControlFlags == EThumbnailGeneratePersistentSizesOnly)
   439         {
   400         {
       
   401         TN_DEBUG1( "CThumbnailServerSession::RequestThumbByFileHandleAsyncL() - EThumbnailGeneratePersistentSizesOnly" );
   440         CleanupClosePushL( file );
   402         CleanupClosePushL( file );
   441         CreateGenerateTaskFromFileHandleL( &file );
   403         CreateGenerateTaskFromFileHandleL( &file );
   442         CleanupStack::Pop( &file );         
   404         CleanupStack::Pop( &file );         
   443         }
   405         }
   444     // single thumbnail request
   406     // single thumbnail request
   465             ProcessBitmapL();
   427             ProcessBitmapL();
   466             }
   428             }
   467         else if ( (err == KErrNotFound || err == KErrAccessDenied) && 
   429         else if ( (err == KErrNotFound || err == KErrAccessDenied) && 
   468                  !(params.iFlags& CThumbnailManager::EDoNotCreate) )
   430                  !(params.iFlags& CThumbnailManager::EDoNotCreate) )
   469             {
   431             {
       
   432             TN_DEBUG1( "CThumbnailServerSession::RequestThumbByFileHandleAsyncL() - KErrNotFound & !EDoNotCreate" );
   470             CreateGenerateTaskFromFileHandleL( &file);
   433             CreateGenerateTaskFromFileHandleL( &file);
   471             }
   434             }
   472         else if (!err && iBuffer)
   435         else if (!err && iBuffer)
   473             {
   436             {
   474             TN_DEBUG1( 
   437             TN_DEBUG1( 
   567 	        }
   530 	        }
   568 	    else if( err == KErrCompletion )
   531 	    else if( err == KErrCompletion )
   569 	        {
   532 	        {
   570             // If thumbnail of requested size is blacklisted, fetching is left with KErrCompletion
   533             // If thumbnail of requested size is blacklisted, fetching is left with KErrCompletion
   571             TN_DEBUG1( 
   534             TN_DEBUG1( 
   572                 "CThumbnailServerSession::RequestThumbByIdAsyncL() - thumbnail blacklisted" );
   535                 "CThumbnailServerSession::RequestThumbByPathAsyncL() - thumbnail blacklisted" );
   573             aMessage.Complete( err );
   536             aMessage.Complete( err );
   574             iMessage = RMessage2();
   537             iMessage = RMessage2();
   575 	        }
   538 	        }
   576 	    else 
   539 	    else 
   577 	        {
   540 	        {
   593 	        if(Server()->StoreForPathL(params.iFileName)->IsDiskFull())
   556 	        if(Server()->StoreForPathL(params.iFileName)->IsDiskFull())
   594 	            {
   557 	            {
   595 	            User::Leave( KErrDiskFull );
   558 	            User::Leave( KErrDiskFull );
   596 	            }
   559 	            }
   597 
   560 
   598 #ifdef RD_MDS_2_5	        
       
   599             // try to query ID from MDS
       
   600             CThumbnailMDSQueryTask* task = new( ELeave )CThumbnailMDSQueryTask(
       
   601                     Server()->Processor(), params.iPriority + 1, Server()->GetMdESession(), *Server());
       
   602             
       
   603             CleanupStack::PushL( task );
       
   604             task->SetUpdateToDb( EFalse );
       
   605             task->QueryIdByPathL( params.iFileName );
       
   606             task->SetMessageData( TThumbnailServerRequestId( this, params.iRequestId ), iMessage );
       
   607             Server()->QueueTaskL( task );
       
   608             CleanupStack::Pop( task ); // owned by processor now
       
   609             
       
   610             // query task is now responsible for completing the message
       
   611             iMessage = RMessage2();	            
       
   612 #else
       
   613             User::Leave(err);
   561             User::Leave(err);
   614 #endif // RD_MDS_2_5
       
   615 	        
       
   616 	        }   
   562 	        }   
   617 	   }
   563 	   }
   618     
   564     
   619 #ifdef _DEBUG
   565 #ifdef _DEBUG
   620     aStop.UniversalTime();
   566     aStop.UniversalTime();
   688     
   634     
   689     // source type
   635     // source type
   690     TDataType mimeType;
   636     TDataType mimeType;
   691     TInt sourceType = 0;
   637     TInt sourceType = 0;
   692     TInt err = Server()->MimeTypeFromFileExt( params.iTargetUri, mimeType );
   638     TInt err = Server()->MimeTypeFromFileExt( params.iTargetUri, mimeType );
   693     TBool missingIDs(EFalse);
       
   694     
   639     
   695     // get missing sizes
   640     // get missing sizes
   696     if ( err == KErrNone && ( params.iControlFlags & EThumbnailGeneratePersistentSizesOnly ) != 0 )
   641     if ( err == KErrNone && ( params.iControlFlags & EThumbnailGeneratePersistentSizesOnly ) != 0 )
   697         {
   642         {
   698         sourceType = Server()->SourceTypeFromMimeType( mimeType );
   643         sourceType = Server()->SourceTypeFromMimeType( mimeType );
   699         
   644         
   700         missingSizes = new (ELeave) RArray < TThumbnailPersistentSize >;
   645         missingSizes = new (ELeave) RArray < TThumbnailPersistentSize >;
   701         CleanupClosePushL( *missingSizes );
   646         CleanupClosePushL( *missingSizes );
   702     
   647     
   703         Server()->GetMissingSizesAndIDsL( params.iTargetUri, sourceType, *missingSizes, missingIDs);
   648         Server()->GetMissingSizesL( params.iTargetUri, sourceType, *missingSizes, EFalse);
   704             
   649             
   705         if ( missingSizes->Count() == 0)
   650         if ( missingSizes->Count() == 0)
   706             {
   651             {
   707             // all thumbs already exist
   652             // all thumbs already exist
   708             CleanupStack::PopAndDestroy( missingSizes );
   653             CleanupStack::PopAndDestroy( missingSizes );
   729                }
   674                }
   730             
   675             
   731             CThumbnailScaleTask* scaleTask = CThumbnailScaleTask::NewL( Server()->Processor(),
   676             CThumbnailScaleTask* scaleTask = CThumbnailScaleTask::NewL( Server()->Processor(),
   732                 *Server(), params.iTargetUri, bitmap, bitmapSize,
   677                 *Server(), params.iTargetUri, bitmap, bitmapSize,
   733                 (*missingSizes)[i].iSize, (*missingSizes)[i].iCrop, params.iDisplayMode,
   678                 (*missingSizes)[i].iSize, (*missingSizes)[i].iCrop, params.iDisplayMode,
   734                 KMaxPriority, KNullDesC, (*missingSizes)[i].iType, params.iThumbnailId, EFalse, EFalse );
   679                 KMaxPriority, KNullDesC, (*missingSizes)[i].iType, params.iModified, EFalse, EFalse );
   735             CleanupStack::PushL( scaleTask );
   680             CleanupStack::PushL( scaleTask );
   736             scaleTask->SetDoStore( ETrue );
   681             scaleTask->SetDoStore( ETrue );
   737             //increase priority, scale needs to run before ID update below
       
   738             scaleTask->SetPriority( params.iPriority + 1 );
       
   739             Server()->Processor().AddTaskL( scaleTask );
   682             Server()->Processor().AddTaskL( scaleTask );
   740             CleanupStack::Pop( scaleTask );
   683             CleanupStack::Pop( scaleTask );
   741             
   684             
   742             if( i == count-1 )
   685             if( i == count-1 )
   743                 {
   686                 {
   744                 // scaleTask is now responsible for completing the RMessage
   687                 // scaleTask is now responsible for completing the RMessage
   745                 scaleTask->SetMessageData( reqId, iMessage );
   688                 scaleTask->SetMessageData( reqId, iMessage );
   746                 iMessage = RMessage2();
   689                 iMessage = RMessage2();
   747                 }
   690                 }
   748             }
   691             }
   749         
       
   750         TN_DEBUG3("CThumbnailServerSession::RequestSetThumbnailByBitmapL() ID = %d, missingIDs = %d", params.iThumbnailId, missingIDs);
       
   751         }
   692         }
   752     else
   693     else
   753         {
   694         {
   754         // complete message
   695         // complete message
   755         aMessage.Complete( KErrNone );
   696         aMessage.Complete( KErrNone );
   765     
   706     
   766     Server()->DeleteBitmapFromPool( iBitmapHandle );
   707     Server()->DeleteBitmapFromPool( iBitmapHandle );
   767     iBitmapHandle = 0;
   708     iBitmapHandle = 0;
   768     bitmap = NULL;
   709     bitmap = NULL;
   769     }
   710     }
   770 
       
   771 // -----------------------------------------------------------------------------
       
   772 // CThumbnailServerSession::CreateThumbnailsL()
       
   773 // Create thumbnails for given object file
       
   774 // -----------------------------------------------------------------------------
       
   775 //
       
   776 void CThumbnailServerSession::CreateThumbnailsL( const RMessage2& aMessage )
       
   777     {
       
   778     RFile64 file;
       
   779     CleanupClosePushL( file );
       
   780 	User::LeaveIfError( file.AdoptFromClient( aMessage, 1, 2 ));
       
   781 
       
   782 	CreateGenerateTaskFromFileHandleL( &file);
       
   783         
       
   784 	CleanupStack::Pop( &file );
       
   785     }      
       
   786 
       
   787  
   711  
   788 // -----------------------------------------------------------------------------
   712 // -----------------------------------------------------------------------------
   789 // CThumbnailServerSession::CreateGenerateTaskL()
   713 // CThumbnailServerSession::CreateGenerateTaskL()
   790 // Create a task to generate a new thumbnail
   714 // Create a task to generate a new thumbnail
   791 // -----------------------------------------------------------------------------
   715 // -----------------------------------------------------------------------------
   799     
   723     
   800     if(Server()->StoreForPathL(params.iFileName)->IsDiskFull())
   724     if(Server()->StoreForPathL(params.iFileName)->IsDiskFull())
   801         {
   725         {
   802         User::Leave( KErrDiskFull );
   726         User::Leave( KErrDiskFull );
   803         }
   727         }
   804       
       
   805     TBool missingIDs = EFalse;
       
   806     
   728     
   807     RArray < TThumbnailPersistentSize >* missingSizes = NULL;
   729     RArray < TThumbnailPersistentSize >* missingSizes = NULL;
   808     
   730     
   809     // get missing sizes
   731     // get missing sizes
   810     if ( ( params.iControlFlags & EThumbnailGeneratePersistentSizesOnly ) != 0 )
   732     if ( ( params.iControlFlags & EThumbnailGeneratePersistentSizesOnly ) != 0 )
   811         {
   733         {
   812         TInt sourceType = TThumbnailPersistentSize::EUnknownSourceType;
   734         TInt sourceType = TThumbnailPersistentSize::EUnknownSourceType;
   813         sourceType = Server()->SourceTypeFromMimeType( params.iMimeType );
   735         sourceType = Server()->SourceTypeFromMimeType( params.iMimeType );
   814         missingSizes = new (ELeave) RArray < TThumbnailPersistentSize >;
   736         missingSizes = new (ELeave) RArray < TThumbnailPersistentSize >;
   815         CleanupClosePushL( *missingSizes );
   737         CleanupClosePushL( *missingSizes );
   816         
   738 		
   817         Server()->GetMissingSizesAndIDsL( params.iFileName, sourceType, *missingSizes, missingIDs );
   739 		    
   818 #ifdef RD_MDS_2_5        
   740 	    TBool gridSizeOnly(EFalse);
   819         if( missingIDs )
       
   820             {
       
   821             TN_DEBUG1("CThumbnailServerSession::CreateGenerateTaskFromFileHandleL() some IDs missing");
       
   822             
   741             
   823             if( params.iThumbnailId == KNoId)
   742 	    if ( params.iQualityPreference == CThumbnailManager
   824                 {
   743 	                    ::EOptimizeForQualityWithPreview )
   825                 TN_DEBUG1("CThumbnailServerSession::CreateGenerateTaskFromFileHandleL() query fro MDS");
   744 	        {
   826                 // try to query ID from MDS
   745 	        gridSizeOnly = ETrue;
   827                 CThumbnailMDSQueryTask* task = new( ELeave )CThumbnailMDSQueryTask(
   746 	        }
   828                         Server()->Processor(), params.iPriority + 1, Server()->GetMdESession(), *Server());
   747         
   829                 
   748         Server()->GetMissingSizesL( params.iFileName, sourceType, *missingSizes, gridSizeOnly);
   830                 CleanupStack::PushL( task );
       
   831                 task->QueryIdByPathL( params.iFileName );
       
   832                 
       
   833                 task->SetMessageData( TThumbnailServerRequestId( this, params.iRequestId ) );
       
   834                 Server()->QueueTaskL( task );
       
   835                 CleanupStack::Pop( task ); // owned by processor now
       
   836                 TN_DEBUG1("CThumbnailServerSession::CreateGenerateTaskFromFileHandleL() query from MDS queued" );
       
   837                 }
       
   838             else
       
   839                 {
       
   840                 TN_DEBUG2("CThumbnailServerSession::CreateGenerateTaskFromFileHandleL() got ID %d from params", params.iThumbnailId);
       
   841                 TRAP_IGNORE( Server()->UpdateIDL(params.iFileName, params.iThumbnailId ) );
       
   842                 }
       
   843             }
       
   844 #endif // RD_MDS_2_5
       
   845         
   749         
   846         if ( missingSizes->Count() == 0)
   750         if ( missingSizes->Count() == 0)
   847             {
   751             {
   848             // all thumbs already exist
   752             // all thumbs already exist
   849             CleanupStack::PopAndDestroy( missingSizes );
   753             CleanupStack::PopAndDestroy( missingSizes );
   871         }
   775         }
   872     CleanupClosePushL( *aFile );
   776     CleanupClosePushL( *aFile );
   873     CThumbnailGenerateTask* task = new( ELeave )CThumbnailGenerateTask( Server()
   777     CThumbnailGenerateTask* task = new( ELeave )CThumbnailGenerateTask( Server()
   874         ->Processor(), * Server(), aFile, NULL, &params.iMimeType, params.iFlags,
   778         ->Processor(), * Server(), aFile, NULL, &params.iMimeType, params.iFlags,
   875         params.iSize, params.iDisplayMode, priority, missingSizes, params.iTargetUri,
   779         params.iSize, params.iDisplayMode, priority, missingSizes, params.iTargetUri,
   876         params.iThumbnailSize, params.iThumbnailId, params.iQualityPreference );
   780         params.iThumbnailSize, params.iModified, params.iQualityPreference );
   877 
   781 
   878     // do not store bitmaps to server pool when generating only
   782     // do not store bitmaps to server pool when generating only
   879     if( params.iControlFlags & EThumbnailGeneratePersistentSizesOnly )
   783     if( params.iControlFlags & EThumbnailGeneratePersistentSizesOnly )
   880         {
   784         {
   881         task->ScaledBitmapToPool( EFalse );
   785         task->ScaledBitmapToPool( EFalse );
   948     if ( ( params.iControlFlags & EThumbnailGeneratePersistentSizesOnly ) != 0 )
   852     if ( ( params.iControlFlags & EThumbnailGeneratePersistentSizesOnly ) != 0 )
   949         {
   853         {
   950         missingSizes = new (ELeave) RArray < TThumbnailPersistentSize >;
   854         missingSizes = new (ELeave) RArray < TThumbnailPersistentSize >;
   951         CleanupClosePushL( *missingSizes );
   855         CleanupClosePushL( *missingSizes );
   952         
   856         
   953         TBool missingIDs;
   857         Server()->GetMissingSizesL( params.iTargetUri, sourceType, *missingSizes, EFalse );
   954         Server()->GetMissingSizesAndIDsL( params.iTargetUri, sourceType, *missingSizes, missingIDs );
       
   955             
   858             
   956         if ( missingSizes->Count() == 0)
   859         if ( missingSizes->Count() == 0)
   957             {
   860             {
   958             // all thumbs already exist
   861             // all thumbs already exist
   959             CleanupStack::PopAndDestroy( missingSizes );
   862             CleanupStack::PopAndDestroy( missingSizes );
   982         }
   885         }
   983     
   886     
   984     CThumbnailGenerateTask* task = new( ELeave )CThumbnailGenerateTask( Server()
   887     CThumbnailGenerateTask* task = new( ELeave )CThumbnailGenerateTask( Server()
   985         ->Processor(), * Server(), NULL, aBuffer, &params.iMimeType, params.iFlags,
   888         ->Processor(), * Server(), NULL, aBuffer, &params.iMimeType, params.iFlags,
   986         params.iSize, params.iDisplayMode, priority, missingSizes, params.iTargetUri,
   889         params.iSize, params.iDisplayMode, priority, missingSizes, params.iTargetUri,
   987         params.iThumbnailSize, params.iThumbnailId, params.iQualityPreference );
   890         params.iThumbnailSize, params.iModified, params.iQualityPreference );
   988 
   891 
   989     // do not store bitmaps to server pool when generating only
   892     // do not store bitmaps to server pool when generating only
   990     if( params.iControlFlags & EThumbnailGeneratePersistentSizesOnly )
   893     if( params.iControlFlags & EThumbnailGeneratePersistentSizesOnly )
   991         {
   894         {
   992         task->ScaledBitmapToPool( EFalse );
   895         task->ScaledBitmapToPool( EFalse );
  1028         params.iSize = persistentSize.iSize;
   931         params.iSize = persistentSize.iSize;
  1029         }
   932         }
  1030     
   933     
  1031     if( params.iFileName != KNullDesC )
   934     if( params.iFileName != KNullDesC )
  1032         {
   935         {
  1033         TN_DEBUG4( "CThumbnailServerSession::FetchThumbnailL( TNId==%d ThumbnailSize=%d ( Path=%S ))", 
   936         TN_DEBUG3( "CThumbnailServerSession::FetchThumbnailL( ThumbnailSize=%d ( Path=%S ))", 
  1034                 params.iThumbnailId, params.iThumbnailSize, &params.iFileName );
   937                  params.iThumbnailSize, &params.iFileName );
  1035         Server()->FetchThumbnailL( params.iFileName, iBitmap, iBuffer, params.iThumbnailSize, iOriginalSize);
   938         Server()->FetchThumbnailL( params.iFileName, iBitmap, iBuffer, params.iThumbnailSize, iOriginalSize);
  1036         }
   939         }
  1037     else
   940     else
  1038         {
   941         {
  1039         TN_DEBUG3( "CThumbnailServerSession::FetchThumbnailL(Path=%S ThumbnailSize=%d)", 
   942         User::Leave( KErrNotSupported );
  1040                         &params.iFileName, params.iThumbnailSize );
       
  1041         Server()->FetchThumbnailL( params.iThumbnailId, iBitmap, iBuffer,  params.iThumbnailSize, iOriginalSize );
       
  1042         }
   943         }
  1043 #ifdef _DEBUG
   944 #ifdef _DEBUG
  1044     if( iBitmap)
   945     if( iBitmap)
  1045         {
   946         {
  1046         TN_DEBUG4( "CThumbnailServerSession::FetchThumbnailL() size %d x %d displaymode %d", iBitmap->SizeInPixels().iWidth, iBitmap->SizeInPixels().iHeight, iBitmap->DisplayMode());
   947         TN_DEBUG4( "CThumbnailServerSession::FetchThumbnailL() size %d x %d displaymode %d", iBitmap->SizeInPixels().iWidth, iBitmap->SizeInPixels().iHeight, iBitmap->DisplayMode());
  1062     if ( params.iTargetUri != KNullDesC && params.iFileName != KNullDesC &&
   963     if ( params.iTargetUri != KNullDesC && params.iFileName != KNullDesC &&
  1063          params.iFileName.CompareF(params.iTargetUri) != 0 )
   964          params.iFileName.CompareF(params.iTargetUri) != 0 )
  1064         {
   965         {
  1065         Server()->StoreThumbnailL( params.iTargetUri, iBitmap, iOriginalSize,
   966         Server()->StoreThumbnailL( params.iTargetUri, iBitmap, iOriginalSize,
  1066                                    params.iFlags& CThumbnailManager::ECropToAspectRatio,
   967                                    params.iFlags& CThumbnailManager::ECropToAspectRatio,
  1067                                    params.iThumbnailSize, params.iThumbnailId,
   968                                    params.iThumbnailSize, params.iModified,
  1068                                    EFalse, EFalse);
   969                                    EFalse, EFalse);
  1069         }
   970         }
  1070     
   971     
  1071     if ( ClientThreadAlive(iMessage) )
   972     if ( ClientThreadAlive(iMessage) )
  1072         {        
   973         {        
  1189     
  1090     
  1190     // read message params
  1091     // read message params
  1191     aMessage.ReadL( 0, iRequestParams );
  1092     aMessage.ReadL( 0, iRequestParams );
  1192     const TThumbnailRequestParams& params = iRequestParams();
  1093     const TThumbnailRequestParams& params = iRequestParams();
  1193     
  1094     
  1194     TThumbnailId id = params.iThumbnailId;
  1095     
  1195     Server()->DeleteThumbnailsByIdL( id );
  1096 #ifdef RD_MDS_2_5        
  1196     
  1097     // try to query path from MDS
       
  1098     CThumbnailMDSQueryTask* task = new( ELeave )CThumbnailMDSQueryTask(
       
  1099             Server()->Processor(), params.iPriority + 1, Server()->GetMdESession(), *Server());
       
  1100     
       
  1101     CleanupStack::PushL( task );
       
  1102     task->QueryPathByIdL(params.iThumbnailId, ETrue);
       
  1103     Server()->QueueTaskL( task );
       
  1104     CleanupStack::Pop( task ); // owned by processor now
       
  1105 #endif // RD_MDS_2_5
  1197     aMessage.Complete( KErrNone );
  1106     aMessage.Complete( KErrNone );
  1198     iMessage = RMessage2();
  1107     iMessage = RMessage2();
  1199     }
  1108     }
  1200 
  1109 
  1201 // -----------------------------------------------------------------------------
  1110 // -----------------------------------------------------------------------------
  1326 // RThumbnailMessage::FilterSqlErr
  1235 // RThumbnailMessage::FilterSqlErr
  1327 // ---------------------------------------------------------------------------
  1236 // ---------------------------------------------------------------------------
  1328 //
  1237 //
  1329 TInt CThumbnailServerSession::ConvertSqlErrToE32Err( TInt aReason )
  1238 TInt CThumbnailServerSession::ConvertSqlErrToE32Err( TInt aReason )
  1330     {
  1239     {
       
  1240     TN_DEBUG2("CThumbnailServerSession::ConvertSqlErrToE32Err(%d)", aReason);
  1331     TInt e32Err;
  1241     TInt e32Err;
  1332     if ( aReason >=  - 144 )
  1242     if ( aReason >=  - 144 )
  1333     // magic: [-1..-144] is E32 error range 
  1243     // magic: [-1..-144] is E32 error range 
  1334         {
  1244         {
  1335         // E32 error value or non-negative value
  1245         // E32 error value or non-negative value