453 TInt sourceType = TThumbnailPersistentSize::EUnknownSourceType; |
460 TInt sourceType = TThumbnailPersistentSize::EUnknownSourceType; |
454 sourceType = Server()->SourceTypeFromMimeType( params.iMimeType ); |
461 sourceType = Server()->SourceTypeFromMimeType( params.iMimeType ); |
455 ModifyThumbnailSize(sourceType); |
462 ModifyThumbnailSize(sourceType); |
456 } |
463 } |
457 |
464 |
|
465 // delete existing |
|
466 if(params.iImport && params.iOverwrite) |
|
467 { |
|
468 Server()->DeleteThumbnailsL( params.iTargetUri); |
|
469 } |
|
470 |
458 // CreateThumbnails |
471 // CreateThumbnails |
459 if (params.iControlFlags == EThumbnailGeneratePersistentSizesOnly) |
472 if (params.iControlFlags == EThumbnailGeneratePersistentSizesOnly) |
460 { |
473 { |
461 TN_DEBUG1( "CThumbnailServerSession::RequestThumbByFileHandleAsyncL() - EThumbnailGeneratePersistentSizesOnly" ); |
474 TN_DEBUG1( "CThumbnailServerSession::RequestThumbByFileHandleAsyncL() - EThumbnailGeneratePersistentSizesOnly" ); |
462 CleanupClosePushL( file ); |
|
463 CreateGenerateTaskFromFileHandleL( &file ); |
475 CreateGenerateTaskFromFileHandleL( &file ); |
464 CleanupStack::Pop( &file ); |
476 |
|
477 // ownership of the file transferred |
|
478 CleanupStack::Pop(&file); |
465 } |
479 } |
466 // single thumbnail request |
480 // single thumbnail request |
467 else |
481 else |
468 { |
482 { |
469 TRAPD( err, FetchThumbnailL()); |
483 TRAPD( err, FetchThumbnailL()); |
470 |
484 |
471 if( err == KErrCompletion ) |
485 if( err == KErrCompletion ) |
472 { |
486 { |
473 // If thumbnail of requested size is blacklisted, fetching is left with KErrCompletion |
487 // If thumbnail of requested size is blacklisted, fetching is left with KErrCompletion |
474 TN_DEBUG1( |
488 TN_DEBUG1( "CThumbnailServerSession::RequestThumbByFileHandleAsyncL() - thumbnail blacklisted" ); |
475 "CThumbnailServerSession::RequestThumbByFileHandleAsyncL() - thumbnail blacklisted" ); |
489 |
476 aMessage.Complete( err ); |
490 aMessage.Complete( err ); |
477 iMessage = RMessage2(); |
491 iMessage = RMessage2(); |
|
492 |
|
493 // close file |
|
494 CleanupStack::PopAndDestroy(&file); |
478 } |
495 } |
479 else if ( !err && iBitmap ) |
496 else if ( !err && iBitmap ) |
480 { |
497 { |
481 TN_DEBUG1( "CThumbnailServerSession::RequestThumbByFileHandleAsyncL() - found existing thumbnail - bitmap " ); |
498 TN_DEBUG1( "CThumbnailServerSession::RequestThumbByFileHandleAsyncL() - found existing thumbnail - bitmap " ); |
482 |
499 |
483 // Thumbnail already stored |
500 // Thumbnail already stored |
484 file.Close(); |
501 CleanupStack::PopAndDestroy(&file); |
485 TN_DEBUG1("CThumbnailServerSession::RequestThumbByFileHandleAsyncL - file handle closed"); |
502 TN_DEBUG1("CThumbnailServerSession::RequestThumbByFileHandleAsyncL - file handle closed"); |
486 |
503 |
487 ProcessBitmapL(); |
504 ProcessBitmapL(); |
488 } |
505 } |
489 else if ( (err == KErrNotFound || err == KErrAccessDenied) && |
506 else if ( (err == KErrNotFound || err == KErrAccessDenied) && |
490 !(params.iFlags& CThumbnailManager::EDoNotCreate) ) |
507 !(params.iFlags& CThumbnailManager::EDoNotCreate) ) |
491 { |
508 { |
492 TN_DEBUG1( "CThumbnailServerSession::RequestThumbByFileHandleAsyncL() - KErrNotFound & !EDoNotCreate" ); |
509 TN_DEBUG1( "CThumbnailServerSession::RequestThumbByFileHandleAsyncL() - KErrNotFound & !EDoNotCreate" ); |
493 CreateGenerateTaskFromFileHandleL( &file); |
510 CreateGenerateTaskFromFileHandleL( &file); |
|
511 |
|
512 // ownership of the file transferred |
|
513 CleanupStack::Pop(&file); |
494 } |
514 } |
495 else if (!err && iBuffer) |
515 else if (!err && iBuffer) |
496 { |
516 { |
497 TN_DEBUG1( |
517 TN_DEBUG1( "CThumbnailServerSession::RequestThumbByFileHandleAsyncL() - found existing thumbnail - jpeg " ); |
498 "CThumbnailServerSession::RequestThumbByFileHandleAsyncL() - found existing thumbnail - jpeg " ); |
|
499 |
518 |
500 CThumbnailDecodeTask* task = new( ELeave )CThumbnailDecodeTask( Server() |
519 CThumbnailDecodeTask* task = new( ELeave )CThumbnailDecodeTask( Server() |
501 ->Processor(), * Server(), iBuffer, params.iPriority, params.iDisplayMode ); |
520 ->Processor(), * Server(), iBuffer, params.iPriority, params.iDisplayMode ); |
502 |
521 |
503 CleanupStack::PushL( task ); |
522 CleanupStack::PushL( task ); |
508 // Decode task is now responsible for completing the message |
527 // Decode task is now responsible for completing the message |
509 iMessage = RMessage2(); |
528 iMessage = RMessage2(); |
510 |
529 |
511 //CThumbnailDecodeTask is responsible freeing |
530 //CThumbnailDecodeTask is responsible freeing |
512 iBuffer = NULL; |
531 iBuffer = NULL; |
513 file.Close(); |
532 |
|
533 // close file |
|
534 CleanupStack::PopAndDestroy(&file); |
514 TN_DEBUG1("CThumbnailServerSession::RequestThumbByFileHandleAsyncL - file handle closed"); |
535 TN_DEBUG1("CThumbnailServerSession::RequestThumbByFileHandleAsyncL - file handle closed"); |
515 } |
536 } |
516 else |
537 else |
517 { |
538 { |
518 TN_DEBUG2( |
539 TN_DEBUG2( "CThumbnailServerSession::RequestThumbByFileHandleAsyncL() - thumbnail not found, err=%d", err ); |
519 "CThumbnailServerSession::RequestThumbByFileHandleAsyncL() - thumbnail not found, err=%d", err ); |
540 |
520 aMessage.Complete( ConvertSqlErrToE32Err( err )); |
541 aMessage.Complete( ConvertSqlErrToE32Err( err )); |
521 iMessage = RMessage2(); |
542 iMessage = RMessage2(); |
|
543 |
|
544 // close file |
|
545 CleanupStack::PopAndDestroy(&file); |
522 } |
546 } |
523 } |
547 } |
524 } |
548 } |
525 |
549 |
526 // ----------------------------------------------------------------------------- |
550 // ----------------------------------------------------------------------------- |
589 iBuffer = NULL; |
613 iBuffer = NULL; |
590 } |
614 } |
591 else if( err == KErrCompletion ) |
615 else if( err == KErrCompletion ) |
592 { |
616 { |
593 // If thumbnail of requested size is blacklisted, fetching is left with KErrCompletion |
617 // If thumbnail of requested size is blacklisted, fetching is left with KErrCompletion |
594 TN_DEBUG1( |
618 TN_DEBUG1( "CThumbnailServerSession::RequestThumbByPathAsyncL() - thumbnail blacklisted" ); |
595 "CThumbnailServerSession::RequestThumbByPathAsyncL() - thumbnail blacklisted" ); |
619 |
596 aMessage.Complete( err ); |
620 aMessage.Complete( err ); |
597 iMessage = RMessage2(); |
621 iMessage = RMessage2(); |
598 } |
622 } |
599 else |
623 else |
600 { |
624 { |
601 TN_DEBUG2( |
625 TN_DEBUG2( |
602 "CThumbnailServerSession::RequestThumbByPathAsyncL() - thumbnail not found, err = %d", err ); |
626 "CThumbnailServerSession::RequestThumbByPathAsyncL() - thumbnail not found, err = %d", err ); |
603 |
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 |
604 if ( (err == KErrNotFound || err == KErrAccessDenied) && |
641 if ( (err == KErrNotFound || err == KErrAccessDenied) && |
605 !(params.iFlags& CThumbnailManager::EDoNotCreate) ) |
642 !(params.iFlags& CThumbnailManager::EDoNotCreate) ) |
606 { |
643 { |
607 // 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 |
608 // and retry the request using file handle |
645 // and retry the request using file handle |
609 err = KThumbnailErrThumbnailNotFound; |
646 err = KThumbnailErrThumbnailNotFound; |
610 } |
647 } |
611 else |
|
612 { |
|
613 User::Leave(err); |
|
614 } |
|
615 |
|
616 if(Server()->StoreForPathL(params.iFileName)->IsDiskFull()) |
|
617 { |
|
618 User::Leave( KErrDiskFull ); |
|
619 } |
|
620 |
648 |
621 User::Leave(err); |
649 User::Leave(err); |
622 } |
650 } |
623 } |
651 } |
624 |
652 |
639 } |
667 } |
640 |
668 |
641 aMessage.ReadL( 0, iRequestParams ); |
669 aMessage.ReadL( 0, iRequestParams ); |
642 const TThumbnailRequestParams& params = iRequestParams(); |
670 const TThumbnailRequestParams& params = iRequestParams(); |
643 |
671 |
644 if(params.iThumbnailSize != EUnknownThumbnailSize) |
672 // delete existing |
|
673 if(params.iOverwrite) |
645 { |
674 { |
646 Server()->DeleteThumbnailsL( params.iTargetUri); |
675 Server()->DeleteThumbnailsL( params.iTargetUri); |
647 } |
676 } |
648 |
677 |
649 if(params.iThumbnailSize == EFullScreenThumbnailSize || |
678 // if only one size |
650 params.iThumbnailSize == EGridThumbnailSize || |
679 if ((params.iControlFlags & EThumbnailGeneratePersistentSizesOnly) == 0) |
651 params.iThumbnailSize == EListThumbnailSize ) |
680 { |
652 { |
681 if(params.iThumbnailSize == EFullScreenThumbnailSize || |
653 TInt sourceType = TThumbnailPersistentSize::EUnknownSourceType; |
682 params.iThumbnailSize == EGridThumbnailSize || |
654 TDataType mimetype; |
683 params.iThumbnailSize == EListThumbnailSize ) |
655 TInt ret = Server()->MimeTypeFromFileExt( params.iTargetUri, mimetype ); |
|
656 |
|
657 if( ret == KErrNone ) |
|
658 { |
684 { |
659 sourceType = Server()->SourceTypeFromMimeType( mimetype ); |
685 TInt sourceType = TThumbnailPersistentSize::EUnknownSourceType; |
660 ModifyThumbnailSize(sourceType); |
686 TDataType mimetype; |
|
687 TInt ret = Server()->MimeTypeFromFileExt( params.iTargetUri, mimetype ); |
|
688 |
|
689 if( ret == KErrNone ) |
|
690 { |
|
691 sourceType = Server()->SourceTypeFromMimeType( mimetype ); |
|
692 ModifyThumbnailSize(sourceType); |
|
693 } |
|
694 User::LeaveIfError( ret ); |
661 } |
695 } |
662 User::LeaveIfError( ret ); |
696 } |
663 } |
|
664 |
697 |
665 TInt bufferSize = aMessage.Int2(); |
698 TInt bufferSize = aMessage.Int2(); |
666 HBufC8* buffer = HBufC8::NewMaxLC( bufferSize ); |
699 HBufC8* buffer = HBufC8::NewMaxLC( bufferSize ); |
667 TPtr8 ptr = buffer->Des(); |
700 TPtr8 ptr = buffer->Des(); |
668 aMessage.ReadL( 1 /* buffer pointer */, ptr ); |
701 aMessage.ReadL( 1 /* buffer pointer */, ptr ); |
682 } |
715 } |
683 |
716 |
684 aMessage.ReadL( 0, iRequestParams ); |
717 aMessage.ReadL( 0, iRequestParams ); |
685 const TThumbnailRequestParams& params = iRequestParams(); |
718 const TThumbnailRequestParams& params = iRequestParams(); |
686 |
719 |
|
720 const TThumbnailServerRequestId reqId( this, params.iRequestId ); |
|
721 |
|
722 // delete existing |
|
723 if(params.iOverwrite) |
|
724 { |
|
725 Server()->DeleteThumbnailsL( params.iTargetUri); |
|
726 } |
|
727 |
|
728 // if only one size |
|
729 if ((params.iControlFlags & EThumbnailGeneratePersistentSizesOnly) == 0) |
|
730 { |
|
731 if(params.iThumbnailSize == EFullScreenThumbnailSize || |
|
732 params.iThumbnailSize == EGridThumbnailSize || |
|
733 params.iThumbnailSize == EListThumbnailSize ) |
|
734 { |
|
735 TInt sourceType = TThumbnailPersistentSize::EUnknownSourceType; |
|
736 TDataType mimetype; |
|
737 TInt ret = Server()->MimeTypeFromFileExt( params.iTargetUri, mimetype ); |
|
738 |
|
739 if( ret == KErrNone ) |
|
740 { |
|
741 sourceType = Server()->SourceTypeFromMimeType( mimetype ); |
|
742 ModifyThumbnailSize(sourceType); |
|
743 } |
|
744 User::LeaveIfError( ret ); |
|
745 } |
|
746 } |
|
747 |
687 TInt bitmapHandle = aMessage.Int1(); |
748 TInt bitmapHandle = aMessage.Int1(); |
688 TThumbnailServerRequestId &reqId = (TThumbnailServerRequestId&)params.iRequestId; |
|
689 |
749 |
690 // get bitmap |
750 // get bitmap |
691 CFbsBitmap* bitmap = new( ELeave )CFbsBitmap(); |
751 CFbsBitmap* bitmap = new( ELeave )CFbsBitmap(); |
692 CleanupStack::PushL( bitmap ); |
752 CleanupStack::PushL( bitmap ); |
693 User::LeaveIfError( bitmap->Duplicate( bitmapHandle ) ); |
753 User::LeaveIfError( bitmap->Duplicate( bitmapHandle ) ); |
694 |
754 |
695 // use pool to prevent bitmap leak |
755 // use pool to prevent bitmap leak |
696 // this bitmap is shared to several scale tasks, one of which can Leave |
756 // this bitmap is shared to several scale tasks, one of which can Leave |
697 Server()->AddBitmapToPoolL( reqId.iSession, bitmap, reqId ); |
757 Server()->AddBitmapToPoolL( this, bitmap, reqId ); |
698 |
758 |
699 CleanupStack::Pop( bitmap ); |
759 CleanupStack::Pop( bitmap ); |
700 iBitmapHandle = bitmap->Handle(); |
760 iBitmapHandle = bitmap->Handle(); |
701 |
761 |
702 RArray < TThumbnailPersistentSize >* missingSizes = NULL; |
762 RArray < TThumbnailPersistentSize >* missingSizes = NULL; |
753 |
813 |
754 CThumbnailScaleTask* scaleTask = CThumbnailScaleTask::NewL( Server()->Processor(), |
814 CThumbnailScaleTask* scaleTask = CThumbnailScaleTask::NewL( Server()->Processor(), |
755 *Server(), params.iTargetUri, bitmap, bitmapSize, |
815 *Server(), params.iTargetUri, bitmap, bitmapSize, |
756 (*missingSizes)[i].iSize, (*missingSizes)[i].iCrop, params.iDisplayMode, |
816 (*missingSizes)[i].iSize, (*missingSizes)[i].iCrop, params.iDisplayMode, |
757 KMaxPriority, KNullDesC, (*missingSizes)[i].iType, params.iModified, EFalse, EFalse, |
817 KMaxPriority, KNullDesC, (*missingSizes)[i].iType, params.iModified, EFalse, EFalse, |
758 reqId); |
818 reqId, params.iVirtualUri); |
|
819 |
759 CleanupStack::PushL( scaleTask ); |
820 CleanupStack::PushL( scaleTask ); |
760 scaleTask->SetDoStore( ETrue ); |
821 scaleTask->SetDoStore( ETrue ); |
761 Server()->Processor().AddTaskL( scaleTask ); |
822 Server()->Processor().AddTaskL( scaleTask ); |
762 CleanupStack::Pop( scaleTask ); |
823 CleanupStack::Pop( scaleTask ); |
763 |
824 |
764 // completion to first task, because task processor works like stack |
825 // completion to first task, because task processor works like stack |
765 if( i == 0 ) |
826 if( i == 0 ) |
766 { |
827 { |
767 // scaleTask is now responsible for completing the RMessage |
828 // scaleTask is now responsible for completing the RMessage |
768 scaleTask->SetMessageData( reqId, iMessage, iClientThread ); |
829 scaleTask->SetMessageData( reqId, iMessage, iClientThread ); |
769 iMessage = RMessage2(); |
830 iMessage = RMessage2(); |
770 } |
831 } |
771 } |
832 } |
795 // Create a task to generate a new thumbnail |
856 // Create a task to generate a new thumbnail |
796 // ----------------------------------------------------------------------------- |
857 // ----------------------------------------------------------------------------- |
797 // |
858 // |
798 void CThumbnailServerSession::CreateGenerateTaskFromFileHandleL( RFile64* aFile) |
859 void CThumbnailServerSession::CreateGenerateTaskFromFileHandleL( RFile64* aFile) |
799 { |
860 { |
800 const TThumbnailRequestParams& params = iRequestParams(); |
861 TThumbnailRequestParams& params = iRequestParams(); |
801 |
862 |
802 TN_DEBUG2( |
863 TN_DEBUG2( |
803 "CThumbnailServerSession::CreateGenerateTaskFromFileHandleL() -- create thumbnail generation task for %S", ¶ms.iFileName ); |
864 "CThumbnailServerSession::CreateGenerateTaskFromFileHandleL() -- create thumbnail generation task for %S", ¶ms.iFileName ); |
804 |
865 |
805 if(Server()->StoreForPathL(params.iFileName)->IsDiskFull()) |
866 // disk space check only for stored sizes |
|
867 if ( params.iImport && |
|
868 Server()->StoreForPathL(params.iTargetUri)->IsDiskFull() ) |
|
869 { |
|
870 User::Leave( KErrDiskFull ); |
|
871 } |
|
872 else if ( params.iThumbnailSize != ECustomThumbnailSize && |
|
873 Server()->StoreForPathL(params.iFileName)->IsDiskFull() ) |
806 { |
874 { |
807 User::Leave( KErrDiskFull ); |
875 User::Leave( KErrDiskFull ); |
808 } |
876 } |
809 |
877 |
810 RArray < TThumbnailPersistentSize >* missingSizes = NULL; |
878 RArray < TThumbnailPersistentSize >* missingSizes = NULL; |
815 TInt sourceType = TThumbnailPersistentSize::EUnknownSourceType; |
883 TInt sourceType = TThumbnailPersistentSize::EUnknownSourceType; |
816 sourceType = Server()->SourceTypeFromMimeType( params.iMimeType ); |
884 sourceType = Server()->SourceTypeFromMimeType( params.iMimeType ); |
817 missingSizes = new (ELeave) RArray < TThumbnailPersistentSize >; |
885 missingSizes = new (ELeave) RArray < TThumbnailPersistentSize >; |
818 CleanupClosePushL( *missingSizes ); |
886 CleanupClosePushL( *missingSizes ); |
819 |
887 |
820 |
|
821 TBool gridSizeOnly(EFalse); |
888 TBool gridSizeOnly(EFalse); |
822 |
889 |
823 if ( params.iQualityPreference == CThumbnailManager |
890 if ( params.iQualityPreference == CThumbnailManager::EOptimizeForQualityWithPreview ) |
824 ::EOptimizeForQualityWithPreview ) |
|
825 { |
891 { |
826 gridSizeOnly = ETrue; |
892 gridSizeOnly = ETrue; |
827 } |
893 } |
828 |
894 |
829 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 } |
830 |
904 |
831 if ( missingSizes->Count() == 0) |
905 if ( missingSizes->Count() == 0) |
832 { |
906 { |
833 // all thumbs already exist |
907 // all thumbs already exist |
834 CleanupStack::PopAndDestroy( missingSizes ); |
908 CleanupStack::PopAndDestroy( missingSizes ); |
856 } |
949 } |
857 CleanupClosePushL( *aFile ); |
950 CleanupClosePushL( *aFile ); |
858 CThumbnailGenerateTask* task = new( ELeave )CThumbnailGenerateTask( Server() |
951 CThumbnailGenerateTask* task = new( ELeave )CThumbnailGenerateTask( Server() |
859 ->Processor(), * Server(), aFile, NULL, ¶ms.iMimeType, params.iFlags, |
952 ->Processor(), * Server(), aFile, NULL, ¶ms.iMimeType, params.iFlags, |
860 params.iSize, params.iDisplayMode, priority, missingSizes, params.iTargetUri, |
953 params.iSize, params.iDisplayMode, priority, missingSizes, params.iTargetUri, |
861 params.iThumbnailSize, params.iModified, params.iQualityPreference ); |
954 params.iThumbnailSize, params.iModified, params.iQualityPreference, |
|
955 params.iVirtualUri); |
862 |
956 |
863 // do not store bitmaps to server pool when generating only |
957 // do not store bitmaps to server pool when generating only |
864 if( params.iControlFlags & EThumbnailGeneratePersistentSizesOnly ) |
958 if( params.iControlFlags & EThumbnailGeneratePersistentSizesOnly ) |
865 { |
959 { |
866 task->ScaledBitmapToPool( EFalse ); |
960 task->ScaledBitmapToPool( EFalse ); |
965 } |
1062 } |
966 |
1063 |
967 CThumbnailGenerateTask* task = new( ELeave )CThumbnailGenerateTask( Server() |
1064 CThumbnailGenerateTask* task = new( ELeave )CThumbnailGenerateTask( Server() |
968 ->Processor(), * Server(), NULL, aBuffer, ¶ms.iMimeType, params.iFlags, |
1065 ->Processor(), * Server(), NULL, aBuffer, ¶ms.iMimeType, params.iFlags, |
969 params.iSize, params.iDisplayMode, priority, missingSizes, params.iTargetUri, |
1066 params.iSize, params.iDisplayMode, priority, missingSizes, params.iTargetUri, |
970 params.iThumbnailSize, params.iModified, params.iQualityPreference ); |
1067 params.iThumbnailSize, params.iModified, params.iQualityPreference, |
|
1068 params.iVirtualUri); |
971 |
1069 |
972 // do not store bitmaps to server pool when generating only |
1070 // do not store bitmaps to server pool when generating only |
973 if( params.iControlFlags & EThumbnailGeneratePersistentSizesOnly ) |
1071 if( params.iControlFlags & EThumbnailGeneratePersistentSizesOnly ) |
974 { |
1072 { |
975 task->ScaledBitmapToPool( EFalse ); |
1073 task->ScaledBitmapToPool( EFalse ); |
1038 // ----------------------------------------------------------------------------- |
1136 // ----------------------------------------------------------------------------- |
1039 // |
1137 // |
1040 void CThumbnailServerSession::ProcessBitmapL() |
1138 void CThumbnailServerSession::ProcessBitmapL() |
1041 { |
1139 { |
1042 TThumbnailRequestParams& params = iRequestParams(); |
1140 TThumbnailRequestParams& params = iRequestParams(); |
1043 |
|
1044 // in import case store bitmap |
|
1045 if ( params.iTargetUri != KNullDesC && params.iFileName != KNullDesC && |
|
1046 params.iFileName.CompareF(params.iTargetUri) != 0 ) |
|
1047 { |
|
1048 Server()->StoreThumbnailL( params.iTargetUri, iBitmap, iOriginalSize, |
|
1049 params.iFlags& CThumbnailManager::ECropToAspectRatio, |
|
1050 params.iThumbnailSize, params.iModified, |
|
1051 EFalse, EFalse); |
|
1052 } |
|
1053 |
1141 |
1054 if ( ClientThreadAlive() ) |
1142 if ( ClientThreadAlive() ) |
1055 { |
1143 { |
1056 TN_DEBUG2("CThumbnailServerSession::ProcessBitmapL(), iBitmap handle= 0x%08x", iBitmap->Handle()); |
1144 TN_DEBUG2("CThumbnailServerSession::ProcessBitmapL(), iBitmap handle= 0x%08x", iBitmap->Handle()); |
1057 |
1145 |
1070 |
1158 |
1071 iMessage.WriteL( 0, iRequestParams ); |
1159 iMessage.WriteL( 0, iRequestParams ); |
1072 |
1160 |
1073 TN_DEBUG1("CThumbnailServerSession()::ProcessBitmapL() bitmap to pool"); |
1161 TN_DEBUG1("CThumbnailServerSession()::ProcessBitmapL() bitmap to pool"); |
1074 |
1162 |
1075 TThumbnailServerRequestId &reqId = (TThumbnailServerRequestId&)params.iRequestId; |
1163 Server()->AddBitmapToPoolL( this, iBitmap, TThumbnailServerRequestId( this, params.iRequestId ) ); |
1076 Server()->AddBitmapToPoolL( this, iBitmap, reqId ); |
|
1077 |
1164 |
1078 iMessage.Complete( KErrNone ); |
1165 iMessage.Complete( KErrNone ); |
1079 iMessage = RMessage2(); |
1166 iMessage = RMessage2(); |
1080 |
1167 |
1081 iBitmap = NULL; // owned by server now |
1168 iBitmap = NULL; // owned by server now |
1173 |
1260 |
1174 // read message params |
1261 // read message params |
1175 aMessage.ReadL( 0, iRequestParams ); |
1262 aMessage.ReadL( 0, iRequestParams ); |
1176 const TThumbnailRequestParams& params = iRequestParams(); |
1263 const TThumbnailRequestParams& params = iRequestParams(); |
1177 |
1264 |
1178 |
|
1179 #ifdef RD_MDS_2_5 |
1265 #ifdef RD_MDS_2_5 |
1180 // try to query path from MDS |
1266 // try to query path from MDS |
1181 CThumbnailMDSQueryTask* task = new( ELeave )CThumbnailMDSQueryTask( |
1267 CThumbnailMDSQueryTask* task = new( ELeave )CThumbnailMDSQueryTask( |
1182 Server()->Processor(), params.iPriority + 1, Server()->GetMdESession(), *Server()); |
1268 Server()->Processor(), params.iPriority + 1, Server()->GetMdESession(), *Server()); |
1183 |
1269 |
1184 CleanupStack::PushL( task ); |
1270 CleanupStack::PushL( task ); |
1185 task->QueryPathByIdL(params.iThumbnailId, ETrue); |
1271 task->QueryPathByIdL(params.iThumbnailId, ETrue); |
|
1272 task->SetMessageData( TThumbnailServerRequestId( this, params.iRequestId ) ); |
1186 Server()->QueueTaskL( task ); |
1273 Server()->QueueTaskL( task ); |
1187 CleanupStack::Pop( task ); // owned by processor now |
1274 CleanupStack::Pop( task ); // owned by processor now |
1188 #endif // RD_MDS_2_5 |
1275 #endif // RD_MDS_2_5 |
|
1276 |
1189 aMessage.Complete( KErrNone ); |
1277 aMessage.Complete( KErrNone ); |
1190 iMessage = RMessage2(); |
1278 iMessage = RMessage2(); |
1191 } |
1279 } |
1192 |
1280 |
1193 // ----------------------------------------------------------------------------- |
1281 // ----------------------------------------------------------------------------- |
1194 // Get the required size (in characters) for a buffer that contains the |
1282 // Get the required size (in characters) for a buffer that contains the |
1195 // list of supported MIME types |
1283 // list of supported MIME types |
1196 // ----------------------------------------------------------------------------- |
1284 // ----------------------------------------------------------------------------- |
1197 // |
1285 // |
1198 void CThumbnailServerSession::GetMimeTypeBufferSizeL( const RMessage2& aMessage |
1286 void CThumbnailServerSession::GetMimeTypeBufferSizeL( const RMessage2& aMessage ) |
1199 ) |
|
1200 { |
1287 { |
1201 TPckgBuf < TInt > buf; |
1288 TPckgBuf < TInt > buf; |
1202 buf() = Server()->GetMimeTypeBufferSize(); |
1289 buf() = Server()->GetMimeTypeBufferSize(); |
1203 aMessage.WriteL( 0, buf ); |
1290 aMessage.WriteL( 0, buf ); |
1204 } |
1291 } |
1270 else if(params.iThumbnailSize == EListThumbnailSize) |
1357 else if(params.iThumbnailSize == EListThumbnailSize) |
1271 { |
1358 { |
1272 params.iThumbnailSize = EAudioListThumbnailSize; |
1359 params.iThumbnailSize = EAudioListThumbnailSize; |
1273 } |
1360 } |
1274 } |
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 } |
1275 } |
1377 } |
1276 |
1378 |
1277 //------------------------------------------------------------------------ |
1379 //------------------------------------------------------------------------ |
1278 // CThumbnailServerSession::ModifyThumbnailSize |
1380 // CThumbnailServerSession::ModifyThumbnailSize |
1279 // --------------------------------------------------------------------------- |
1381 // --------------------------------------------------------------------------- |
1283 TThumbnailRequestParams& params = iRequestParams(); |
1385 TThumbnailRequestParams& params = iRequestParams(); |
1284 TInt res = 0; |
1386 TInt res = 0; |
1285 |
1387 |
1286 // mime type |
1388 // mime type |
1287 if ( params.iMimeType.Des8() == KNullDesC8 && !Server()->SupportedMimeType(params.iMimeType) ) |
1389 if ( params.iMimeType.Des8() == KNullDesC8 && !Server()->SupportedMimeType(params.iMimeType) ) |
1288 { |
1390 { |
1289 // try parsing from file extension |
1391 // try parsing from file extension |
1290 res = Server()->MimeTypeFromFileExt( params.iFileName, params.iMimeType ); |
1392 if (params.iImport) |
1291 if ( res == KErrNotFound ) |
1393 { |
1292 { |
1394 res = Server()->MimeTypeFromFileExt( params.iTargetUri, params.iMimeType ); |
1293 if( aFile ) |
1395 } |
1294 { |
1396 else |
1295 // parsed type not in the list, resolve from file |
1397 { |
1296 params.iMimeType = Server()->ResolveMimeTypeL(*aFile); |
1398 res = Server()->MimeTypeFromFileExt( params.iFileName, params.iMimeType ); |
1297 } |
1399 } |
1298 else |
1400 |
1299 { |
1401 if ( res == KErrNotFound ) |
1300 Server()->Fs().ShareProtected(); |
1402 { |
1301 RFile64 file; |
1403 if( aFile ) |
1302 CleanupClosePushL( file ); |
1404 { |
1303 |
1405 // parsed type not in the list, resolve from file |
1304 User::LeaveIfError( file.Open( Server()->Fs(), params.iFileName, EFileShareReadersOrWriters )); |
1406 params.iMimeType = Server()->ResolveMimeTypeL(*aFile); |
1305 TN_DEBUG2( "CThumbnailServerSession::ResolveMimeType - file handle opened for %S", ¶ms.iFileName ); |
1407 } |
1306 |
1408 else |
1307 params.iMimeType = Server()->ResolveMimeTypeL(file); |
1409 { |
1308 |
1410 Server()->Fs().ShareProtected(); |
1309 file.Close(); |
1411 RFile64 file; |
1310 TN_DEBUG1("CThumbnailServerSession::ResolveMimeType - file handle closed"); |
1412 CleanupClosePushL( file ); |
1311 |
1413 |
1312 CleanupStack::Pop( &file ); |
1414 User::LeaveIfError( file.Open( Server()->Fs(), params.iFileName, EFileShareReadersOrWriters )); |
1313 } |
1415 TN_DEBUG2( "CThumbnailServerSession::ResolveMimeType - file handle opened for %S", ¶ms.iFileName ); |
1314 } |
1416 |
1315 } |
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 } |
1316 } |
1426 } |
1317 |
1427 |
1318 |
1428 |
1319 // --------------------------------------------------------------------------- |
1429 // --------------------------------------------------------------------------- |
1320 // RThumbnailMessage::FilterSqlErr |
1430 // RThumbnailMessage::FilterSqlErr |
1321 // --------------------------------------------------------------------------- |
1431 // --------------------------------------------------------------------------- |
1322 // |
1432 // |
1323 TInt CThumbnailServerSession::ConvertSqlErrToE32Err( TInt aReason ) |
1433 TInt CThumbnailServerSession::ConvertSqlErrToE32Err( TInt aReason ) |
1324 { |
1434 { |
1325 TN_DEBUG2("CThumbnailServerSession::ConvertSqlErrToE32Err(%d)", aReason); |
1435 TN_DEBUG2("CThumbnailServerSession::ConvertSqlErrToE32Err(%d)", aReason); |
1326 TInt e32Err; |
1436 TInt e32Err(aReason); |
|
1437 |
1327 if ( aReason >= - 144 ) |
1438 if ( aReason >= - 144 ) |
1328 // magic: [-1..-144] is E32 error range |
1439 // magic: [-1..-144] is E32 error range |
1329 { |
1440 { |
1330 // E32 error value or non-negative value |
1441 // E32 error value or non-negative value |
1331 e32Err = aReason; |
1442 switch ( aReason ) |
|
1443 { |
|
1444 case KErrServerTerminated: |
|
1445 e32Err = KErrCorrupt; |
|
1446 break; |
|
1447 default: |
|
1448 e32Err = aReason; |
|
1449 } |
1332 } |
1450 } |
1333 else |
1451 else |
1334 { |
1452 { |
1335 switch ( aReason ) |
1453 switch ( aReason ) |
1336 { |
1454 { |