imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailserversession.cpp
changeset 30 b67379558a75
parent 29 4bdfb6b5c9b4
child 33 221be23823c5
equal deleted inserted replaced
29:4bdfb6b5c9b4 30:b67379558a75
    53 // ---------------------------------------------------------------------------
    53 // ---------------------------------------------------------------------------
    54 //
    54 //
    55 CThumbnailServerSession::~CThumbnailServerSession()
    55 CThumbnailServerSession::~CThumbnailServerSession()
    56     {
    56     {
    57     Server()->DropSession(this);
    57     Server()->DropSession(this);
       
    58     delete iBitmap;
       
    59     iBitmap = NULL;
       
    60     delete iBuffer;
       
    61     iBuffer = NULL;
    58     }
    62     }
    59 
    63 
    60 
    64 
    61 // -----------------------------------------------------------------------------
    65 // -----------------------------------------------------------------------------
    62 // CThumbnailServerSession::DispatchMessageL()
    66 // CThumbnailServerSession::DispatchMessageL()
   454        params.iThumbnailSize == EListThumbnailSize )
   458        params.iThumbnailSize == EListThumbnailSize )
   455         {
   459         {
   456         TInt sourceType = TThumbnailPersistentSize::EUnknownSourceType;
   460         TInt sourceType = TThumbnailPersistentSize::EUnknownSourceType;
   457         sourceType = Server()->SourceTypeFromMimeType( params.iMimeType );
   461         sourceType = Server()->SourceTypeFromMimeType( params.iMimeType );
   458         ModifyThumbnailSize(sourceType);
   462         ModifyThumbnailSize(sourceType);
       
   463         }
       
   464     
       
   465     // delete existing
       
   466     if(params.iImport && params.iOverwrite)
       
   467         {
       
   468         Server()->DeleteThumbnailsL( params.iTargetUri);
   459         }
   469         }
   460     
   470     
   461     // CreateThumbnails
   471     // CreateThumbnails
   462     if (params.iControlFlags == EThumbnailGeneratePersistentSizesOnly)
   472     if (params.iControlFlags == EThumbnailGeneratePersistentSizesOnly)
   463         {
   473         {
   613 	    else 
   623 	    else 
   614 	        {
   624 	        {
   615 	        TN_DEBUG2( 
   625 	        TN_DEBUG2( 
   616 	            "CThumbnailServerSession::RequestThumbByPathAsyncL() - thumbnail not found, err = %d", err );
   626 	            "CThumbnailServerSession::RequestThumbByPathAsyncL() - thumbnail not found, err = %d", err );
   617 	        
   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 	        
   618 	        if ( (err == KErrNotFound || err == KErrAccessDenied) && 
   641 	        if ( (err == KErrNotFound || err == KErrAccessDenied) && 
   619 	            !(params.iFlags& CThumbnailManager::EDoNotCreate) )
   642 	            !(params.iFlags& CThumbnailManager::EDoNotCreate) )
   620 	            {
   643 	            {
   621 	            // 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
   622 	            // and retry the request using file handle
   645 	            // and retry the request using file handle
   623 	            err = KThumbnailErrThumbnailNotFound;
   646 	            err = KThumbnailErrThumbnailNotFound;
   624 	            }
       
   625 	        else
       
   626 	            {
       
   627                 User::Leave(err);
       
   628                 }
       
   629 	        
       
   630 	        // disk space check only for stored sizes
       
   631 	        if ( params.iThumbnailSize != ECustomThumbnailSize && 
       
   632 	             Server()->StoreForPathL(params.iFileName)->IsDiskFull() )
       
   633 	            {
       
   634 	            User::Leave( KErrDiskFull );
       
   635 	            }
   647 	            }
   636 
   648 
   637             User::Leave(err);
   649             User::Leave(err);
   638 	        }   
   650 	        }   
   639 	   }
   651 	   }
   801         
   813         
   802             CThumbnailScaleTask* scaleTask = CThumbnailScaleTask::NewL( Server()->Processor(),
   814             CThumbnailScaleTask* scaleTask = CThumbnailScaleTask::NewL( Server()->Processor(),
   803                     *Server(), params.iTargetUri, bitmap, bitmapSize,
   815                     *Server(), params.iTargetUri, bitmap, bitmapSize,
   804                     (*missingSizes)[i].iSize, (*missingSizes)[i].iCrop, params.iDisplayMode,
   816                     (*missingSizes)[i].iSize, (*missingSizes)[i].iCrop, params.iDisplayMode,
   805                     KMaxPriority, KNullDesC, (*missingSizes)[i].iType, params.iModified, EFalse, EFalse,
   817                     KMaxPriority, KNullDesC, (*missingSizes)[i].iType, params.iModified, EFalse, EFalse,
   806                     reqId);
   818                     reqId, params.iVirtualUri);
       
   819             
   807             CleanupStack::PushL( scaleTask );
   820             CleanupStack::PushL( scaleTask );
   808             scaleTask->SetDoStore( ETrue );
   821             scaleTask->SetDoStore( ETrue );
   809             Server()->Processor().AddTaskL( scaleTask );
   822             Server()->Processor().AddTaskL( scaleTask );
   810             CleanupStack::Pop( scaleTask );
   823             CleanupStack::Pop( scaleTask );
   811         
   824         
   849 
   862 
   850     TN_DEBUG2( 
   863     TN_DEBUG2( 
   851         "CThumbnailServerSession::CreateGenerateTaskFromFileHandleL() -- create thumbnail generation task for %S", &params.iFileName );
   864         "CThumbnailServerSession::CreateGenerateTaskFromFileHandleL() -- create thumbnail generation task for %S", &params.iFileName );
   852     
   865     
   853     // disk space check only for stored sizes
   866     // disk space check only for stored sizes
   854     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 && 
   855          Server()->StoreForPathL(params.iFileName)->IsDiskFull() )
   873          Server()->StoreForPathL(params.iFileName)->IsDiskFull() )
   856         {
   874         {
   857         User::Leave( KErrDiskFull );
   875         User::Leave( KErrDiskFull );
   858         }
   876         }
   859     
   877     
   867         missingSizes = new (ELeave) RArray < TThumbnailPersistentSize >;
   885         missingSizes = new (ELeave) RArray < TThumbnailPersistentSize >;
   868         CleanupClosePushL( *missingSizes );
   886         CleanupClosePushL( *missingSizes );
   869 		
   887 		
   870 	    TBool gridSizeOnly(EFalse);
   888 	    TBool gridSizeOnly(EFalse);
   871             
   889             
   872 	    if ( params.iQualityPreference == CThumbnailManager
   890 	    if ( params.iQualityPreference == CThumbnailManager::EOptimizeForQualityWithPreview )
   873 	                    ::EOptimizeForQualityWithPreview )
       
   874 	        {
   891 	        {
   875 	        gridSizeOnly = ETrue;
   892 	        gridSizeOnly = ETrue;
   876 	        }
   893 	        }
   877         
   894         
   878         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 	        }     
   879         
   904         
   880         if ( missingSizes->Count() == 0)
   905         if ( missingSizes->Count() == 0)
   881             {
   906             {
   882             // all thumbs already exist
   907             // all thumbs already exist
   883             CleanupStack::PopAndDestroy( missingSizes );
   908             CleanupStack::PopAndDestroy( missingSizes );
   924         }
   949         }
   925     CleanupClosePushL( *aFile );
   950     CleanupClosePushL( *aFile );
   926     CThumbnailGenerateTask* task = new( ELeave )CThumbnailGenerateTask( Server()
   951     CThumbnailGenerateTask* task = new( ELeave )CThumbnailGenerateTask( Server()
   927         ->Processor(), * Server(), aFile, NULL, &params.iMimeType, params.iFlags,
   952         ->Processor(), * Server(), aFile, NULL, &params.iMimeType, params.iFlags,
   928         params.iSize, params.iDisplayMode, priority, missingSizes, params.iTargetUri,
   953         params.iSize, params.iDisplayMode, priority, missingSizes, params.iTargetUri,
   929         params.iThumbnailSize, params.iModified, params.iQualityPreference );
   954         params.iThumbnailSize, params.iModified, params.iQualityPreference,
       
   955         params.iVirtualUri);
   930 
   956 
   931     // do not store bitmaps to server pool when generating only
   957     // do not store bitmaps to server pool when generating only
   932     if( params.iControlFlags & EThumbnailGeneratePersistentSizesOnly )
   958     if( params.iControlFlags & EThumbnailGeneratePersistentSizesOnly )
   933         {
   959         {
   934         task->ScaledBitmapToPool( EFalse );
   960         task->ScaledBitmapToPool( EFalse );
  1036         }
  1062         }
  1037     
  1063     
  1038     CThumbnailGenerateTask* task = new( ELeave )CThumbnailGenerateTask( Server()
  1064     CThumbnailGenerateTask* task = new( ELeave )CThumbnailGenerateTask( Server()
  1039         ->Processor(), * Server(), NULL, aBuffer, &params.iMimeType, params.iFlags,
  1065         ->Processor(), * Server(), NULL, aBuffer, &params.iMimeType, params.iFlags,
  1040         params.iSize, params.iDisplayMode, priority, missingSizes, params.iTargetUri,
  1066         params.iSize, params.iDisplayMode, priority, missingSizes, params.iTargetUri,
  1041         params.iThumbnailSize, params.iModified, params.iQualityPreference );
  1067         params.iThumbnailSize, params.iModified, params.iQualityPreference,
       
  1068         params.iVirtualUri);
  1042 
  1069 
  1043     // do not store bitmaps to server pool when generating only
  1070     // do not store bitmaps to server pool when generating only
  1044     if( params.iControlFlags & EThumbnailGeneratePersistentSizesOnly )
  1071     if( params.iControlFlags & EThumbnailGeneratePersistentSizesOnly )
  1045         {
  1072         {
  1046         task->ScaledBitmapToPool( EFalse );
  1073         task->ScaledBitmapToPool( EFalse );
  1330            else if(params.iThumbnailSize == EListThumbnailSize)
  1357            else if(params.iThumbnailSize == EListThumbnailSize)
  1331                {
  1358                {
  1332                params.iThumbnailSize = EAudioListThumbnailSize;
  1359                params.iThumbnailSize = EAudioListThumbnailSize;
  1333                }       
  1360                }       
  1334            }
  1361            }
       
  1362     else if(aSourceType == TThumbnailPersistentSize::EContact)
       
  1363            {
       
  1364            if(params.iThumbnailSize == EFullScreenThumbnailSize)
       
  1365                {
       
  1366                params.iThumbnailSize = EContactFullScreenThumbnailSize;
       
  1367                }
       
  1368            else if(params.iThumbnailSize == EGridThumbnailSize)
       
  1369                {
       
  1370                params.iThumbnailSize = EContactGridThumbnailSize;
       
  1371                }
       
  1372            else if(params.iThumbnailSize == EListThumbnailSize)
       
  1373                {
       
  1374                params.iThumbnailSize = EContactListThumbnailSize;
       
  1375                }       
       
  1376            }
  1335     }
  1377     }
  1336 
  1378 
  1337 //------------------------------------------------------------------------
  1379 //------------------------------------------------------------------------
  1338 // CThumbnailServerSession::ModifyThumbnailSize
  1380 // CThumbnailServerSession::ModifyThumbnailSize
  1339 // ---------------------------------------------------------------------------
  1381 // ---------------------------------------------------------------------------
  1343     TThumbnailRequestParams& params = iRequestParams();
  1385     TThumbnailRequestParams& params = iRequestParams();
  1344     TInt res = 0;
  1386     TInt res = 0;
  1345         
  1387         
  1346     // mime type
  1388     // mime type
  1347     if ( params.iMimeType.Des8() == KNullDesC8 && !Server()->SupportedMimeType(params.iMimeType) )
  1389     if ( params.iMimeType.Des8() == KNullDesC8 && !Server()->SupportedMimeType(params.iMimeType) )
  1348        {
  1390         {
  1349        // try parsing from file extension
  1391         // try parsing from file extension
  1350        res = Server()->MimeTypeFromFileExt( params.iFileName, params.iMimeType );
  1392         if (params.iImport)
  1351        if ( res == KErrNotFound )
  1393             {
  1352            {
  1394             res = Server()->MimeTypeFromFileExt( params.iTargetUri, params.iMimeType );
  1353           if( aFile )
  1395             }
  1354              {
  1396         else
  1355              // parsed type not in the list, resolve from file
  1397             {
  1356              params.iMimeType = Server()->ResolveMimeTypeL(*aFile);
  1398             res = Server()->MimeTypeFromFileExt( params.iFileName, params.iMimeType );
  1357              }
  1399             }
  1358           else
  1400         
  1359              {
  1401         if ( res == KErrNotFound )
  1360              Server()->Fs().ShareProtected();
  1402             {
  1361              RFile64 file;
  1403             if( aFile )
  1362              CleanupClosePushL( file );
  1404                 {
  1363              
  1405                 // parsed type not in the list, resolve from file
  1364              User::LeaveIfError( file.Open( Server()->Fs(), params.iFileName, EFileShareReadersOrWriters )); 
  1406                 params.iMimeType = Server()->ResolveMimeTypeL(*aFile);
  1365              TN_DEBUG2( "CThumbnailServerSession::ResolveMimeType - file handle opened for %S", &params.iFileName );
  1407                 }
  1366              
  1408             else
  1367              params.iMimeType = Server()->ResolveMimeTypeL(file);
  1409                 {
  1368              
  1410                 Server()->Fs().ShareProtected();
  1369              file.Close();
  1411                 RFile64 file;
  1370              TN_DEBUG1("CThumbnailServerSession::ResolveMimeType - file handle closed");
  1412                 CleanupClosePushL( file );
  1371              
  1413               
  1372              CleanupStack::Pop( &file );    
  1414                 User::LeaveIfError( file.Open( Server()->Fs(), params.iFileName, EFileShareReadersOrWriters )); 
  1373              }    
  1415                 TN_DEBUG2( "CThumbnailServerSession::ResolveMimeType - file handle opened for %S", &params.iFileName );
  1374           }        
  1416               
  1375        }      
  1417                 params.iMimeType = Server()->ResolveMimeTypeL(file);
       
  1418               
       
  1419                 file.Close();
       
  1420                 TN_DEBUG1("CThumbnailServerSession::ResolveMimeType - file handle closed");
       
  1421               
       
  1422                 CleanupStack::Pop( &file );    
       
  1423                 }    
       
  1424             }        
       
  1425         }       
  1376     }
  1426     }
  1377 
  1427 
  1378 
  1428 
  1379 // ---------------------------------------------------------------------------
  1429 // ---------------------------------------------------------------------------
  1380 // RThumbnailMessage::FilterSqlErr
  1430 // RThumbnailMessage::FilterSqlErr
  1381 // ---------------------------------------------------------------------------
  1431 // ---------------------------------------------------------------------------
  1382 //
  1432 //
  1383 TInt CThumbnailServerSession::ConvertSqlErrToE32Err( TInt aReason )
  1433 TInt CThumbnailServerSession::ConvertSqlErrToE32Err( TInt aReason )
  1384     {
  1434     {
  1385     TN_DEBUG2("CThumbnailServerSession::ConvertSqlErrToE32Err(%d)", aReason);
  1435     TN_DEBUG2("CThumbnailServerSession::ConvertSqlErrToE32Err(%d)", aReason);
  1386     TInt e32Err;
  1436     TInt e32Err(aReason);
       
  1437 	
  1387     if ( aReason >=  - 144 )
  1438     if ( aReason >=  - 144 )
  1388     // magic: [-1..-144] is E32 error range 
  1439     // magic: [-1..-144] is E32 error range 
  1389         {
  1440         {
  1390         // E32 error value or non-negative value
  1441         // E32 error value or non-negative value
  1391         e32Err = aReason;
  1442         switch ( aReason )
       
  1443             {
       
  1444             case KErrServerTerminated:
       
  1445                 e32Err = KErrCorrupt;
       
  1446                 break;
       
  1447             default:
       
  1448                 e32Err = aReason;
       
  1449             }
  1392         }
  1450         }
  1393     else
  1451     else
  1394         {
  1452         {
  1395         switch ( aReason )
  1453         switch ( aReason )
  1396             {
  1454             {
  1503         TN_DEBUG1( "CThumbnailServerSession::ClientThreadAlive() - message null");       
  1561         TN_DEBUG1( "CThumbnailServerSession::ClientThreadAlive() - message null");       
  1504         return EFalse;
  1562         return EFalse;
  1505         }
  1563         }
  1506     }
  1564     }
  1507 
  1565 
       
  1566 
  1508 // End of file
  1567 // End of file