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", ¶ms.iFileName ); |
864 "CThumbnailServerSession::CreateGenerateTaskFromFileHandleL() -- create thumbnail generation task for %S", ¶ms.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, ¶ms.iMimeType, params.iFlags, |
954 ->Processor(), * Server(), aFile, NULL, ¶ms.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 ); |
1040 } |
1066 } |
1041 |
1067 |
1042 CThumbnailGenerateTask* task = new( ELeave )CThumbnailGenerateTask( Server() |
1068 CThumbnailGenerateTask* task = new( ELeave )CThumbnailGenerateTask( Server() |
1043 ->Processor(), * Server(), NULL, aBuffer, ¶ms.iMimeType, params.iFlags, |
1069 ->Processor(), * Server(), NULL, aBuffer, ¶ms.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", ¶ms.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", ¶ms.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 |