imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailserversession.cpp
branchRCL_3
changeset 20 2b4b06654caa
parent 19 f759b6186ab5
child 21 6257223ede8a
equal deleted inserted replaced
19:f759b6186ab5 20:2b4b06654caa
   458        params.iThumbnailSize == EListThumbnailSize )
   458        params.iThumbnailSize == EListThumbnailSize )
   459         {
   459         {
   460         TInt sourceType = TThumbnailPersistentSize::EUnknownSourceType;
   460         TInt sourceType = TThumbnailPersistentSize::EUnknownSourceType;
   461         sourceType = Server()->SourceTypeFromMimeType( params.iMimeType );
   461         sourceType = Server()->SourceTypeFromMimeType( params.iMimeType );
   462         ModifyThumbnailSize(sourceType);
   462         ModifyThumbnailSize(sourceType);
       
   463         }
       
   464     
       
   465     // delete existing
       
   466     if(params.iImport && params.iOverwrite)
       
   467         {
       
   468         Server()->DeleteThumbnailsL( params.iTargetUri);
   463         }
   469         }
   464     
   470     
   465     // CreateThumbnails
   471     // CreateThumbnails
   466     if (params.iControlFlags == EThumbnailGeneratePersistentSizesOnly)
   472     if (params.iControlFlags == EThumbnailGeneratePersistentSizesOnly)
   467         {
   473         {
   617 	    else 
   623 	    else 
   618 	        {
   624 	        {
   619 	        TN_DEBUG2( 
   625 	        TN_DEBUG2( 
   620 	            "CThumbnailServerSession::RequestThumbByPathAsyncL() - thumbnail not found, err = %d", err );
   626 	            "CThumbnailServerSession::RequestThumbByPathAsyncL() - thumbnail not found, err = %d", err );
   621 	        
   627 	        
       
   628 	        // don't try to create from virtual URI
       
   629 	        if ( params.iVirtualUri )
       
   630 	            {
       
   631                 User::Leave(err);
       
   632 	            }
       
   633 	        
       
   634             // disk space check only for stored sizes
       
   635             if ( params.iThumbnailSize != ECustomThumbnailSize && 
       
   636                  Server()->StoreForPathL(params.iFileName)->IsDiskFull() )
       
   637                 {
       
   638                 User::Leave( KErrDiskFull );
       
   639                 }
       
   640 	        
   622 	        if ( (err == KErrNotFound || err == KErrAccessDenied) && 
   641 	        if ( (err == KErrNotFound || err == KErrAccessDenied) && 
   623 	            !(params.iFlags& CThumbnailManager::EDoNotCreate) )
   642 	            !(params.iFlags& CThumbnailManager::EDoNotCreate) )
   624 	            {
   643 	            {
   625 	            // Special error code so that the client side can open the file
   644 	            // Special error code so that the client side can open the file
   626 	            // and retry the request using file handle
   645 	            // and retry the request using file handle
   627 	            err = KThumbnailErrThumbnailNotFound;
   646 	            err = KThumbnailErrThumbnailNotFound;
   628 	            }
       
   629 	        else
       
   630 	            {
       
   631                 User::Leave(err);
       
   632                 }
       
   633 	        
       
   634 	        // disk space check only for stored sizes
       
   635 	        if ( params.iThumbnailSize != ECustomThumbnailSize && 
       
   636 	             Server()->StoreForPathL(params.iFileName)->IsDiskFull() )
       
   637 	            {
       
   638 	            User::Leave( KErrDiskFull );
       
   639 	            }
   647 	            }
   640 
   648 
   641             User::Leave(err);
   649             User::Leave(err);
   642 	        }   
   650 	        }   
   643 	   }
   651 	   }
   805         
   813         
   806             CThumbnailScaleTask* scaleTask = CThumbnailScaleTask::NewL( Server()->Processor(),
   814             CThumbnailScaleTask* scaleTask = CThumbnailScaleTask::NewL( Server()->Processor(),
   807                     *Server(), params.iTargetUri, bitmap, bitmapSize,
   815                     *Server(), params.iTargetUri, bitmap, bitmapSize,
   808                     (*missingSizes)[i].iSize, (*missingSizes)[i].iCrop, params.iDisplayMode,
   816                     (*missingSizes)[i].iSize, (*missingSizes)[i].iCrop, params.iDisplayMode,
   809                     KMaxPriority, KNullDesC, (*missingSizes)[i].iType, params.iModified, EFalse, EFalse,
   817                     KMaxPriority, KNullDesC, (*missingSizes)[i].iType, params.iModified, EFalse, EFalse,
   810                     reqId);
   818                     reqId, params.iVirtualUri);
       
   819             
   811             CleanupStack::PushL( scaleTask );
   820             CleanupStack::PushL( scaleTask );
   812             scaleTask->SetDoStore( ETrue );
   821             scaleTask->SetDoStore( ETrue );
   813             Server()->Processor().AddTaskL( scaleTask );
   822             Server()->Processor().AddTaskL( scaleTask );
   814             CleanupStack::Pop( scaleTask );
   823             CleanupStack::Pop( scaleTask );
   815         
   824         
   853 
   862 
   854     TN_DEBUG2( 
   863     TN_DEBUG2( 
   855         "CThumbnailServerSession::CreateGenerateTaskFromFileHandleL() -- create thumbnail generation task for %S", &params.iFileName );
   864         "CThumbnailServerSession::CreateGenerateTaskFromFileHandleL() -- create thumbnail generation task for %S", &params.iFileName );
   856     
   865     
   857     // disk space check only for stored sizes
   866     // disk space check only for stored sizes
   858     if ( params.iThumbnailSize != ECustomThumbnailSize && 
   867     if ( params.iImport && 
       
   868          Server()->StoreForPathL(params.iTargetUri)->IsDiskFull() )
       
   869         {
       
   870         User::Leave( KErrDiskFull );
       
   871         }
       
   872     else if ( params.iThumbnailSize != ECustomThumbnailSize && 
   859          Server()->StoreForPathL(params.iFileName)->IsDiskFull() )
   873          Server()->StoreForPathL(params.iFileName)->IsDiskFull() )
   860         {
   874         {
   861         User::Leave( KErrDiskFull );
   875         User::Leave( KErrDiskFull );
   862         }
   876         }
   863     
   877     
   871         missingSizes = new (ELeave) RArray < TThumbnailPersistentSize >;
   885         missingSizes = new (ELeave) RArray < TThumbnailPersistentSize >;
   872         CleanupClosePushL( *missingSizes );
   886         CleanupClosePushL( *missingSizes );
   873 		
   887 		
   874 	    TBool gridSizeOnly(EFalse);
   888 	    TBool gridSizeOnly(EFalse);
   875             
   889             
   876 	    if ( params.iQualityPreference == CThumbnailManager
   890 	    if ( params.iQualityPreference == CThumbnailManager::EOptimizeForQualityWithPreview )
   877 	                    ::EOptimizeForQualityWithPreview )
       
   878 	        {
   891 	        {
   879 	        gridSizeOnly = ETrue;
   892 	        gridSizeOnly = ETrue;
   880 	        }
   893 	        }
   881         
   894         
   882         Server()->GetMissingSizesL( params.iFileName, sourceType, *missingSizes, gridSizeOnly);
   895 	    // import vs. normal
       
   896 	    if(params.iImport)
       
   897 	        {
       
   898             Server()->GetMissingSizesL( params.iTargetUri, sourceType, *missingSizes, gridSizeOnly);
       
   899 	        }
       
   900 	    else
       
   901 	        {
       
   902             Server()->GetMissingSizesL( params.iFileName, sourceType, *missingSizes, gridSizeOnly);
       
   903 	        }     
   883         
   904         
   884         if ( missingSizes->Count() == 0)
   905         if ( missingSizes->Count() == 0)
   885             {
   906             {
   886             // all thumbs already exist
   907             // all thumbs already exist
   887             CleanupStack::PopAndDestroy( missingSizes );
   908             CleanupStack::PopAndDestroy( missingSizes );
   888             delete missingSizes;
   909             delete missingSizes;
       
   910             missingSizes = NULL;
       
   911             
   889             if( aFile )
   912             if( aFile )
   890                {
   913                {
   891                aFile->Close();
   914                aFile->Close();
   892                }
   915                }
   893             return;
   916             return;
   928         }
   951         }
   929     CleanupClosePushL( *aFile );
   952     CleanupClosePushL( *aFile );
   930     CThumbnailGenerateTask* task = new( ELeave )CThumbnailGenerateTask( Server()
   953     CThumbnailGenerateTask* task = new( ELeave )CThumbnailGenerateTask( Server()
   931         ->Processor(), * Server(), aFile, NULL, &params.iMimeType, params.iFlags,
   954         ->Processor(), * Server(), aFile, NULL, &params.iMimeType, params.iFlags,
   932         params.iSize, params.iDisplayMode, priority, missingSizes, params.iTargetUri,
   955         params.iSize, params.iDisplayMode, priority, missingSizes, params.iTargetUri,
   933         params.iThumbnailSize, params.iModified, params.iQualityPreference );
   956         params.iThumbnailSize, params.iModified, params.iQualityPreference,
       
   957         params.iVirtualUri);
   934 
   958 
   935     // do not store bitmaps to server pool when generating only
   959     // do not store bitmaps to server pool when generating only
   936     if( params.iControlFlags & EThumbnailGeneratePersistentSizesOnly )
   960     if( params.iControlFlags & EThumbnailGeneratePersistentSizesOnly )
   937         {
   961         {
   938         task->ScaledBitmapToPool( EFalse );
   962         task->ScaledBitmapToPool( EFalse );
  1014         if ( missingSizes->Count() == 0)
  1038         if ( missingSizes->Count() == 0)
  1015             {
  1039             {
  1016             // all thumbs already exist
  1040             // all thumbs already exist
  1017             CleanupStack::PopAndDestroy( missingSizes );
  1041             CleanupStack::PopAndDestroy( missingSizes );
  1018             delete missingSizes;
  1042             delete missingSizes;
       
  1043             missingSizes = NULL;
       
  1044             
  1019             if ( aBuffer)
  1045             if ( aBuffer)
  1020                {
  1046                {
  1021                delete aBuffer;
  1047                delete aBuffer;
  1022                aBuffer = NULL; 
  1048                aBuffer = NULL; 
  1023                }
  1049                }
  1040         }
  1066         }
  1041     
  1067     
  1042     CThumbnailGenerateTask* task = new( ELeave )CThumbnailGenerateTask( Server()
  1068     CThumbnailGenerateTask* task = new( ELeave )CThumbnailGenerateTask( Server()
  1043         ->Processor(), * Server(), NULL, aBuffer, &params.iMimeType, params.iFlags,
  1069         ->Processor(), * Server(), NULL, aBuffer, &params.iMimeType, params.iFlags,
  1044         params.iSize, params.iDisplayMode, priority, missingSizes, params.iTargetUri,
  1070         params.iSize, params.iDisplayMode, priority, missingSizes, params.iTargetUri,
  1045         params.iThumbnailSize, params.iModified, params.iQualityPreference );
  1071         params.iThumbnailSize, params.iModified, params.iQualityPreference,
       
  1072         params.iVirtualUri);
  1046 
  1073 
  1047     // do not store bitmaps to server pool when generating only
  1074     // do not store bitmaps to server pool when generating only
  1048     if( params.iControlFlags & EThumbnailGeneratePersistentSizesOnly )
  1075     if( params.iControlFlags & EThumbnailGeneratePersistentSizesOnly )
  1049         {
  1076         {
  1050         task->ScaledBitmapToPool( EFalse );
  1077         task->ScaledBitmapToPool( EFalse );
  1334            else if(params.iThumbnailSize == EListThumbnailSize)
  1361            else if(params.iThumbnailSize == EListThumbnailSize)
  1335                {
  1362                {
  1336                params.iThumbnailSize = EAudioListThumbnailSize;
  1363                params.iThumbnailSize = EAudioListThumbnailSize;
  1337                }       
  1364                }       
  1338            }
  1365            }
       
  1366     else if(aSourceType == TThumbnailPersistentSize::EContact)
       
  1367            {
       
  1368            if(params.iThumbnailSize == EFullScreenThumbnailSize)
       
  1369                {
       
  1370                params.iThumbnailSize = EContactFullScreenThumbnailSize;
       
  1371                }
       
  1372            else if(params.iThumbnailSize == EGridThumbnailSize)
       
  1373                {
       
  1374                params.iThumbnailSize = EContactGridThumbnailSize;
       
  1375                }
       
  1376            else if(params.iThumbnailSize == EListThumbnailSize)
       
  1377                {
       
  1378                params.iThumbnailSize = EContactListThumbnailSize;
       
  1379                }       
       
  1380            }
  1339     }
  1381     }
  1340 
  1382 
  1341 //------------------------------------------------------------------------
  1383 //------------------------------------------------------------------------
  1342 // CThumbnailServerSession::ModifyThumbnailSize
  1384 // CThumbnailServerSession::ModifyThumbnailSize
  1343 // ---------------------------------------------------------------------------
  1385 // ---------------------------------------------------------------------------
  1347     TThumbnailRequestParams& params = iRequestParams();
  1389     TThumbnailRequestParams& params = iRequestParams();
  1348     TInt res = 0;
  1390     TInt res = 0;
  1349         
  1391         
  1350     // mime type
  1392     // mime type
  1351     if ( params.iMimeType.Des8() == KNullDesC8 && !Server()->SupportedMimeType(params.iMimeType) )
  1393     if ( params.iMimeType.Des8() == KNullDesC8 && !Server()->SupportedMimeType(params.iMimeType) )
  1352        {
  1394         {
  1353        // try parsing from file extension
  1395         // try parsing from file extension
  1354        res = Server()->MimeTypeFromFileExt( params.iFileName, params.iMimeType );
  1396         if (params.iImport)
  1355        if ( res == KErrNotFound )
  1397             {
  1356            {
  1398             res = Server()->MimeTypeFromFileExt( params.iTargetUri, params.iMimeType );
  1357           if( aFile )
  1399             }
  1358              {
  1400         else
  1359              // parsed type not in the list, resolve from file
  1401             {
  1360              params.iMimeType = Server()->ResolveMimeTypeL(*aFile);
  1402             res = Server()->MimeTypeFromFileExt( params.iFileName, params.iMimeType );
  1361              }
  1403             }
  1362           else
  1404         
  1363              {
  1405         if ( res == KErrNotFound )
  1364              Server()->Fs().ShareProtected();
  1406             {
  1365              RFile64 file;
  1407             if( aFile )
  1366              CleanupClosePushL( file );
  1408                 {
  1367              
  1409                 // parsed type not in the list, resolve from file
  1368              User::LeaveIfError( file.Open( Server()->Fs(), params.iFileName, EFileShareReadersOrWriters )); 
  1410                 params.iMimeType = Server()->ResolveMimeTypeL(*aFile);
  1369              TN_DEBUG2( "CThumbnailServerSession::ResolveMimeType - file handle opened for %S", &params.iFileName );
  1411                 }
  1370              
  1412             else
  1371              params.iMimeType = Server()->ResolveMimeTypeL(file);
  1413                 {
  1372              
  1414                 Server()->Fs().ShareProtected();
  1373              file.Close();
  1415                 RFile64 file;
  1374              TN_DEBUG1("CThumbnailServerSession::ResolveMimeType - file handle closed");
  1416                 CleanupClosePushL( file );
  1375              
  1417               
  1376              CleanupStack::Pop( &file );    
  1418                 User::LeaveIfError( file.Open( Server()->Fs(), params.iFileName, EFileShareReadersOrWriters )); 
  1377              }    
  1419                 TN_DEBUG2( "CThumbnailServerSession::ResolveMimeType - file handle opened for %S", &params.iFileName );
  1378           }        
  1420               
  1379        }      
  1421                 params.iMimeType = Server()->ResolveMimeTypeL(file);
       
  1422               
       
  1423                 file.Close();
       
  1424                 TN_DEBUG1("CThumbnailServerSession::ResolveMimeType - file handle closed");
       
  1425               
       
  1426                 CleanupStack::Pop( &file );    
       
  1427                 }    
       
  1428             }        
       
  1429         }       
  1380     }
  1430     }
  1381 
  1431 
  1382 
  1432 
  1383 // ---------------------------------------------------------------------------
  1433 // ---------------------------------------------------------------------------
  1384 // RThumbnailMessage::FilterSqlErr
  1434 // RThumbnailMessage::FilterSqlErr
  1515         TN_DEBUG1( "CThumbnailServerSession::ClientThreadAlive() - message null");       
  1565         TN_DEBUG1( "CThumbnailServerSession::ClientThreadAlive() - message null");       
  1516         return EFalse;
  1566         return EFalse;
  1517         }
  1567         }
  1518     }
  1568     }
  1519 
  1569 
       
  1570 
  1520 // End of file
  1571 // End of file