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", ¶ms.iFileName ); |
864 "CThumbnailServerSession::CreateGenerateTaskFromFileHandleL() -- create thumbnail generation task for %S", ¶ms.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, ¶ms.iMimeType, params.iFlags, |
952 ->Processor(), * Server(), aFile, NULL, ¶ms.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, ¶ms.iMimeType, params.iFlags, |
1065 ->Processor(), * Server(), NULL, aBuffer, ¶ms.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", ¶ms.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", ¶ms.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 { |