imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailserversession.cpp
branchRCL_3
changeset 21 ad31f4183ddc
parent 20 ffb2d5dd62e9
child 28 ff2fb7658ff7
equal deleted inserted replaced
20:ffb2d5dd62e9 21:ad31f4183ddc
   154 // CThumbnailServerSession::CreateL()
   154 // CThumbnailServerSession::CreateL()
   155 // ---------------------------------------------------------------------------
   155 // ---------------------------------------------------------------------------
   156 //
   156 //
   157 void CThumbnailServerSession::CreateL()
   157 void CThumbnailServerSession::CreateL()
   158     {
   158     {
       
   159     TN_DEBUG2( "CThumbnailServerSession::AddSession() = 0x%08x", this );
       
   160     
   159     Server()->AddSession();
   161     Server()->AddSession();
   160     }
   162     }
   161 
   163 
   162 
   164 
   163 // -----------------------------------------------------------------------------
   165 // -----------------------------------------------------------------------------
   469         TRAPD( err, FetchThumbnailL());
   471         TRAPD( err, FetchThumbnailL());
   470         
   472         
   471         if( err == KErrCompletion )
   473         if( err == KErrCompletion )
   472             {
   474             {
   473             // If thumbnail of requested size is blacklisted, fetching is left with KErrCompletion
   475             // If thumbnail of requested size is blacklisted, fetching is left with KErrCompletion
   474             TN_DEBUG1( 
   476             TN_DEBUG1( "CThumbnailServerSession::RequestThumbByFileHandleAsyncL() - thumbnail blacklisted" );
   475                 "CThumbnailServerSession::RequestThumbByFileHandleAsyncL() - thumbnail blacklisted" );
   477             
   476             aMessage.Complete( err );
   478             aMessage.Complete( err );
   477             iMessage = RMessage2();
   479             iMessage = RMessage2();
   478             }
   480             }
   479         else if ( !err && iBitmap )
   481         else if ( !err && iBitmap )
   480             {
   482             {
   492             TN_DEBUG1( "CThumbnailServerSession::RequestThumbByFileHandleAsyncL() - KErrNotFound & !EDoNotCreate" );
   494             TN_DEBUG1( "CThumbnailServerSession::RequestThumbByFileHandleAsyncL() - KErrNotFound & !EDoNotCreate" );
   493             CreateGenerateTaskFromFileHandleL( &file);
   495             CreateGenerateTaskFromFileHandleL( &file);
   494             }
   496             }
   495         else if (!err && iBuffer)
   497         else if (!err && iBuffer)
   496             {
   498             {
   497             TN_DEBUG1( 
   499             TN_DEBUG1( "CThumbnailServerSession::RequestThumbByFileHandleAsyncL() - found existing thumbnail - jpeg " );
   498                 "CThumbnailServerSession::RequestThumbByFileHandleAsyncL() - found existing thumbnail - jpeg " );
       
   499             
   500             
   500             CThumbnailDecodeTask* task = new( ELeave )CThumbnailDecodeTask( Server()
   501             CThumbnailDecodeTask* task = new( ELeave )CThumbnailDecodeTask( Server()
   501                         ->Processor(), * Server(), iBuffer, params.iPriority, params.iDisplayMode );
   502                         ->Processor(), * Server(), iBuffer, params.iPriority, params.iDisplayMode );
   502             
   503             
   503             CleanupStack::PushL( task );
   504             CleanupStack::PushL( task );
   513             file.Close();
   514             file.Close();
   514             TN_DEBUG1("CThumbnailServerSession::RequestThumbByFileHandleAsyncL - file handle closed");
   515             TN_DEBUG1("CThumbnailServerSession::RequestThumbByFileHandleAsyncL - file handle closed");
   515             }
   516             }
   516         else
   517         else
   517             {
   518             {
   518             TN_DEBUG2( 
   519             TN_DEBUG2( "CThumbnailServerSession::RequestThumbByFileHandleAsyncL() - thumbnail not found, err=%d", err );
   519                 "CThumbnailServerSession::RequestThumbByFileHandleAsyncL() - thumbnail not found, err=%d", err );
   520             
   520             aMessage.Complete( ConvertSqlErrToE32Err( err ));
   521             aMessage.Complete( ConvertSqlErrToE32Err( err ));
   521             iMessage = RMessage2();
   522             iMessage = RMessage2();
   522             }     
   523             }     
   523         }
   524         }
   524     }
   525     }
   589 	        iBuffer = NULL;
   590 	        iBuffer = NULL;
   590 	        }
   591 	        }
   591 	    else if( err == KErrCompletion )
   592 	    else if( err == KErrCompletion )
   592 	        {
   593 	        {
   593             // If thumbnail of requested size is blacklisted, fetching is left with KErrCompletion
   594             // If thumbnail of requested size is blacklisted, fetching is left with KErrCompletion
   594             TN_DEBUG1( 
   595             TN_DEBUG1( "CThumbnailServerSession::RequestThumbByPathAsyncL() - thumbnail blacklisted" );
   595                 "CThumbnailServerSession::RequestThumbByPathAsyncL() - thumbnail blacklisted" );
   596             
   596             aMessage.Complete( err );
   597             aMessage.Complete( err );
   597             iMessage = RMessage2();
   598             iMessage = RMessage2();
   598 	        }
   599 	        }
   599 	    else 
   600 	    else 
   600 	        {
   601 	        {
   641         }
   642         }
   642       
   643       
   643     aMessage.ReadL( 0, iRequestParams );
   644     aMessage.ReadL( 0, iRequestParams );
   644     const TThumbnailRequestParams& params = iRequestParams();
   645     const TThumbnailRequestParams& params = iRequestParams();
   645     
   646     
   646     if(params.iThumbnailSize != EUnknownThumbnailSize)
   647     // delete existing
       
   648     if(params.iOverwrite)
   647         {
   649         {
   648         Server()->DeleteThumbnailsL( params.iTargetUri);
   650         Server()->DeleteThumbnailsL( params.iTargetUri);
   649         }
   651         }
   650     
   652     
   651     if(params.iThumbnailSize == EFullScreenThumbnailSize ||
   653     // if only one size
   652        params.iThumbnailSize == EGridThumbnailSize ||
   654     if ((params.iControlFlags & EThumbnailGeneratePersistentSizesOnly) == 0)
   653        params.iThumbnailSize == EListThumbnailSize )
   655         {
   654        {
   656         if(params.iThumbnailSize == EFullScreenThumbnailSize ||
   655        TInt sourceType = TThumbnailPersistentSize::EUnknownSourceType;
   657            params.iThumbnailSize == EGridThumbnailSize ||
   656        TDataType mimetype;
   658            params.iThumbnailSize == EListThumbnailSize )
   657        TInt ret = Server()->MimeTypeFromFileExt( params.iTargetUri, mimetype );
       
   658 	   
       
   659        if( ret == KErrNone )
       
   660            {
   659            {
   661            sourceType = Server()->SourceTypeFromMimeType( mimetype );   
   660            TInt sourceType = TThumbnailPersistentSize::EUnknownSourceType;
   662            ModifyThumbnailSize(sourceType);
   661            TDataType mimetype;
       
   662            TInt ret = Server()->MimeTypeFromFileExt( params.iTargetUri, mimetype );
       
   663            
       
   664            if( ret == KErrNone )
       
   665                {
       
   666                sourceType = Server()->SourceTypeFromMimeType( mimetype );   
       
   667                ModifyThumbnailSize(sourceType);
       
   668                }
       
   669            User::LeaveIfError( ret );
   663            }
   670            }
   664        User::LeaveIfError( ret );
   671         }
   665        }
       
   666     
   672     
   667     TInt bufferSize = aMessage.Int2();
   673     TInt bufferSize = aMessage.Int2();
   668     HBufC8* buffer = HBufC8::NewMaxLC( bufferSize );
   674     HBufC8* buffer = HBufC8::NewMaxLC( bufferSize );
   669     TPtr8 ptr = buffer->Des();
   675     TPtr8 ptr = buffer->Des();
   670     aMessage.ReadL( 1 /* buffer pointer */, ptr );
   676     aMessage.ReadL( 1 /* buffer pointer */, ptr );
   684         }
   690         }
   685         
   691         
   686     aMessage.ReadL( 0, iRequestParams );
   692     aMessage.ReadL( 0, iRequestParams );
   687     const TThumbnailRequestParams& params = iRequestParams();
   693     const TThumbnailRequestParams& params = iRequestParams();
   688     
   694     
       
   695     const TThumbnailServerRequestId reqId( this, params.iRequestId );
       
   696     
       
   697     // delete existing
       
   698     if(params.iOverwrite)
       
   699         {
       
   700         Server()->DeleteThumbnailsL( params.iTargetUri);
       
   701         }
       
   702     
       
   703     // if only one size
       
   704     if ((params.iControlFlags & EThumbnailGeneratePersistentSizesOnly) == 0)
       
   705         {
       
   706         if(params.iThumbnailSize == EFullScreenThumbnailSize ||
       
   707            params.iThumbnailSize == EGridThumbnailSize ||
       
   708            params.iThumbnailSize == EListThumbnailSize )
       
   709            {
       
   710            TInt sourceType = TThumbnailPersistentSize::EUnknownSourceType;
       
   711            TDataType mimetype;
       
   712            TInt ret = Server()->MimeTypeFromFileExt( params.iTargetUri, mimetype );
       
   713            
       
   714            if( ret == KErrNone )
       
   715                {
       
   716                sourceType = Server()->SourceTypeFromMimeType( mimetype );   
       
   717                ModifyThumbnailSize(sourceType);
       
   718                }
       
   719            User::LeaveIfError( ret );
       
   720            }
       
   721         }
       
   722     
   689     TInt bitmapHandle = aMessage.Int1();
   723     TInt bitmapHandle = aMessage.Int1();
   690     TThumbnailServerRequestId &reqId = (TThumbnailServerRequestId&)params.iRequestId;
       
   691     
   724     
   692     // get bitmap
   725     // get bitmap
   693     CFbsBitmap* bitmap = new( ELeave )CFbsBitmap();
   726     CFbsBitmap* bitmap = new( ELeave )CFbsBitmap();
   694     CleanupStack::PushL( bitmap );
   727     CleanupStack::PushL( bitmap );
   695     User::LeaveIfError( bitmap->Duplicate( bitmapHandle ) );
   728     User::LeaveIfError( bitmap->Duplicate( bitmapHandle ) );
   696     
   729 
   697     // use pool to prevent bitmap leak
   730     // use pool to prevent bitmap leak
   698     // this bitmap is shared to several scale tasks, one of which can Leave
   731     // this bitmap is shared to several scale tasks, one of which can Leave
   699     Server()->AddBitmapToPoolL( reqId.iSession, bitmap, reqId );
   732     Server()->AddBitmapToPoolL( this, bitmap, reqId );
   700     
   733     
   701     CleanupStack::Pop( bitmap );
   734     CleanupStack::Pop( bitmap );
   702     iBitmapHandle = bitmap->Handle();
   735     iBitmapHandle = bitmap->Handle();
   703     
   736     
   704     RArray < TThumbnailPersistentSize >* missingSizes = NULL;
   737     RArray < TThumbnailPersistentSize >* missingSizes = NULL;
   763             Server()->Processor().AddTaskL( scaleTask );
   796             Server()->Processor().AddTaskL( scaleTask );
   764             CleanupStack::Pop( scaleTask );
   797             CleanupStack::Pop( scaleTask );
   765         
   798         
   766             // completion to first task, because task processor works like stack
   799             // completion to first task, because task processor works like stack
   767             if( i == 0 )
   800             if( i == 0 )
   768                 {
   801                 {            
   769                 // scaleTask is now responsible for completing the RMessage
   802                 // scaleTask is now responsible for completing the RMessage
   770                 scaleTask->SetMessageData( reqId, iMessage, iClientThread );
   803                 scaleTask->SetMessageData( reqId, iMessage, iClientThread );
   771                 iMessage = RMessage2();
   804                 iMessage = RMessage2();
   772                 }
   805                 }
   773             }
   806             }
   797 // Create a task to generate a new thumbnail
   830 // Create a task to generate a new thumbnail
   798 // -----------------------------------------------------------------------------
   831 // -----------------------------------------------------------------------------
   799 //
   832 //
   800 void CThumbnailServerSession::CreateGenerateTaskFromFileHandleL( RFile64* aFile)
   833 void CThumbnailServerSession::CreateGenerateTaskFromFileHandleL( RFile64* aFile)
   801     {
   834     {
   802     const TThumbnailRequestParams& params = iRequestParams();
   835     TThumbnailRequestParams& params = iRequestParams();
   803 
   836 
   804     TN_DEBUG2( 
   837     TN_DEBUG2( 
   805         "CThumbnailServerSession::CreateGenerateTaskFromFileHandleL() -- create thumbnail generation task for %S", &params.iFileName );
   838         "CThumbnailServerSession::CreateGenerateTaskFromFileHandleL() -- create thumbnail generation task for %S", &params.iFileName );
   806     
   839     
   807     // disk space check only for stored sizes
   840     // disk space check only for stored sizes
   819         TInt sourceType = TThumbnailPersistentSize::EUnknownSourceType;
   852         TInt sourceType = TThumbnailPersistentSize::EUnknownSourceType;
   820         sourceType = Server()->SourceTypeFromMimeType( params.iMimeType );
   853         sourceType = Server()->SourceTypeFromMimeType( params.iMimeType );
   821         missingSizes = new (ELeave) RArray < TThumbnailPersistentSize >;
   854         missingSizes = new (ELeave) RArray < TThumbnailPersistentSize >;
   822         CleanupClosePushL( *missingSizes );
   855         CleanupClosePushL( *missingSizes );
   823 		
   856 		
   824 		    
       
   825 	    TBool gridSizeOnly(EFalse);
   857 	    TBool gridSizeOnly(EFalse);
   826             
   858             
   827 	    if ( params.iQualityPreference == CThumbnailManager
   859 	    if ( params.iQualityPreference == CThumbnailManager
   828 	                    ::EOptimizeForQualityWithPreview )
   860 	                    ::EOptimizeForQualityWithPreview )
   829 	        {
   861 	        {
   841                {
   873                {
   842                aFile->Close();
   874                aFile->Close();
   843                }
   875                }
   844             return;
   876             return;
   845             }            
   877             }            
       
   878         }
       
   879     // creating single TN on demand
       
   880     else if( params.iThumbnailSize > ECustomThumbnailSize && params.iThumbnailSize  < EThumbnailSizeCount)
       
   881         {
       
   882         TThumbnailPersistentSize persistentSize = Server()->PersistentSizeL(params.iThumbnailSize);
       
   883         
       
   884         if(persistentSize.iCrop)
       
   885             {
       
   886             params.iFlags = ( CThumbnailManager::TThumbnailFlags ) (params.iFlags | CThumbnailManager::ECropToAspectRatio);
       
   887             }
       
   888         else
       
   889             {
       
   890             params.iFlags = ( CThumbnailManager::TThumbnailFlags ) (params.iFlags & CThumbnailManager::ECropToAspectRatio);
       
   891             }
       
   892         
       
   893         if( ClientThreadAlive() )
       
   894             {
       
   895             iMessage.Write( 0, iRequestParams );
       
   896             }
   846         }
   897         }
   847     
   898     
   848     // priority
   899     // priority
   849     TInt priority = params.iPriority;
   900     TInt priority = params.iPriority;
   850     if ( priority > KMaxGeneratePriority )
   901     if ( priority > KMaxGeneratePriority )
  1077 
  1128 
  1078         iMessage.WriteL( 0, iRequestParams );
  1129         iMessage.WriteL( 0, iRequestParams );
  1079         
  1130         
  1080         TN_DEBUG1("CThumbnailServerSession()::ProcessBitmapL() bitmap to pool");
  1131         TN_DEBUG1("CThumbnailServerSession()::ProcessBitmapL() bitmap to pool");
  1081         
  1132         
  1082         TThumbnailServerRequestId &reqId = (TThumbnailServerRequestId&)params.iRequestId;
  1133         Server()->AddBitmapToPoolL( this, iBitmap, TThumbnailServerRequestId( this, params.iRequestId ) );
  1083         Server()->AddBitmapToPoolL( this, iBitmap, reqId );
       
  1084         
  1134         
  1085         iMessage.Complete( KErrNone );
  1135         iMessage.Complete( KErrNone );
  1086         iMessage = RMessage2();
  1136         iMessage = RMessage2();
  1087         
  1137         
  1088         iBitmap = NULL; // owned by server now
  1138         iBitmap = NULL; // owned by server now
  1180     
  1230     
  1181     // read message params
  1231     // read message params
  1182     aMessage.ReadL( 0, iRequestParams );
  1232     aMessage.ReadL( 0, iRequestParams );
  1183     const TThumbnailRequestParams& params = iRequestParams();
  1233     const TThumbnailRequestParams& params = iRequestParams();
  1184     
  1234     
  1185     
       
  1186 #ifdef RD_MDS_2_5        
  1235 #ifdef RD_MDS_2_5        
  1187     // try to query path from MDS
  1236     // try to query path from MDS
  1188     CThumbnailMDSQueryTask* task = new( ELeave )CThumbnailMDSQueryTask(
  1237     CThumbnailMDSQueryTask* task = new( ELeave )CThumbnailMDSQueryTask(
  1189             Server()->Processor(), params.iPriority + 1, Server()->GetMdESession(), *Server());
  1238             Server()->Processor(), params.iPriority + 1, Server()->GetMdESession(), *Server());
  1190     
  1239     
  1191     CleanupStack::PushL( task );
  1240     CleanupStack::PushL( task );
  1192     task->QueryPathByIdL(params.iThumbnailId, ETrue);
  1241     task->QueryPathByIdL(params.iThumbnailId, ETrue);
       
  1242     task->SetMessageData( TThumbnailServerRequestId( this, params.iRequestId ) );
  1193     Server()->QueueTaskL( task );
  1243     Server()->QueueTaskL( task );
  1194     CleanupStack::Pop( task ); // owned by processor now
  1244     CleanupStack::Pop( task ); // owned by processor now
  1195 #endif // RD_MDS_2_5
  1245 #endif // RD_MDS_2_5
       
  1246     
  1196     aMessage.Complete( KErrNone );
  1247     aMessage.Complete( KErrNone );
  1197     iMessage = RMessage2();
  1248     iMessage = RMessage2();
  1198     }
  1249     }
  1199 
  1250 
  1200 // -----------------------------------------------------------------------------
  1251 // -----------------------------------------------------------------------------
  1201 // Get the required size (in characters) for a buffer that contains the
  1252 // Get the required size (in characters) for a buffer that contains the
  1202 // list of supported MIME types
  1253 // list of supported MIME types
  1203 // -----------------------------------------------------------------------------
  1254 // -----------------------------------------------------------------------------
  1204 //
  1255 //
  1205 void CThumbnailServerSession::GetMimeTypeBufferSizeL( const RMessage2& aMessage
  1256 void CThumbnailServerSession::GetMimeTypeBufferSizeL( const RMessage2& aMessage )
  1206     )
       
  1207     {
  1257     {
  1208     TPckgBuf < TInt > buf;
  1258     TPckgBuf < TInt > buf;
  1209     buf() = Server()->GetMimeTypeBufferSize();
  1259     buf() = Server()->GetMimeTypeBufferSize();
  1210     aMessage.WriteL( 0, buf );
  1260     aMessage.WriteL( 0, buf );
  1211     }
  1261     }