154 // CThumbnailServerSession::CreateL() |
154 // CThumbnailServerSession::CreateL() |
155 // --------------------------------------------------------------------------- |
155 // --------------------------------------------------------------------------- |
156 // |
156 // |
157 void CThumbnailServerSession::CreateL() |
157 void CThumbnailServerSession::CreateL() |
158 { |
158 { |
|
159 TN_DEBUG2( "CThumbnailServerSession::AddSession() = 0x%08x", this ); |
|
160 |
159 Server()->AddSession(); |
161 Server()->AddSession(); |
160 } |
162 } |
161 |
163 |
162 |
164 |
163 // ----------------------------------------------------------------------------- |
165 // ----------------------------------------------------------------------------- |
469 TRAPD( err, FetchThumbnailL()); |
471 TRAPD( err, FetchThumbnailL()); |
470 |
472 |
471 if( err == KErrCompletion ) |
473 if( err == KErrCompletion ) |
472 { |
474 { |
473 // If thumbnail of requested size is blacklisted, fetching is left with KErrCompletion |
475 // If thumbnail of requested size is blacklisted, fetching is left with KErrCompletion |
474 TN_DEBUG1( |
476 TN_DEBUG1( "CThumbnailServerSession::RequestThumbByFileHandleAsyncL() - thumbnail blacklisted" ); |
475 "CThumbnailServerSession::RequestThumbByFileHandleAsyncL() - thumbnail blacklisted" ); |
477 |
476 aMessage.Complete( err ); |
478 aMessage.Complete( err ); |
477 iMessage = RMessage2(); |
479 iMessage = RMessage2(); |
478 } |
480 } |
479 else if ( !err && iBitmap ) |
481 else if ( !err && iBitmap ) |
480 { |
482 { |
492 TN_DEBUG1( "CThumbnailServerSession::RequestThumbByFileHandleAsyncL() - KErrNotFound & !EDoNotCreate" ); |
494 TN_DEBUG1( "CThumbnailServerSession::RequestThumbByFileHandleAsyncL() - KErrNotFound & !EDoNotCreate" ); |
493 CreateGenerateTaskFromFileHandleL( &file); |
495 CreateGenerateTaskFromFileHandleL( &file); |
494 } |
496 } |
495 else if (!err && iBuffer) |
497 else if (!err && iBuffer) |
496 { |
498 { |
497 TN_DEBUG1( |
499 TN_DEBUG1( "CThumbnailServerSession::RequestThumbByFileHandleAsyncL() - found existing thumbnail - jpeg " ); |
498 "CThumbnailServerSession::RequestThumbByFileHandleAsyncL() - found existing thumbnail - jpeg " ); |
|
499 |
500 |
500 CThumbnailDecodeTask* task = new( ELeave )CThumbnailDecodeTask( Server() |
501 CThumbnailDecodeTask* task = new( ELeave )CThumbnailDecodeTask( Server() |
501 ->Processor(), * Server(), iBuffer, params.iPriority, params.iDisplayMode ); |
502 ->Processor(), * Server(), iBuffer, params.iPriority, params.iDisplayMode ); |
502 |
503 |
503 CleanupStack::PushL( task ); |
504 CleanupStack::PushL( task ); |
513 file.Close(); |
514 file.Close(); |
514 TN_DEBUG1("CThumbnailServerSession::RequestThumbByFileHandleAsyncL - file handle closed"); |
515 TN_DEBUG1("CThumbnailServerSession::RequestThumbByFileHandleAsyncL - file handle closed"); |
515 } |
516 } |
516 else |
517 else |
517 { |
518 { |
518 TN_DEBUG2( |
519 TN_DEBUG2( "CThumbnailServerSession::RequestThumbByFileHandleAsyncL() - thumbnail not found, err=%d", err ); |
519 "CThumbnailServerSession::RequestThumbByFileHandleAsyncL() - thumbnail not found, err=%d", err ); |
520 |
520 aMessage.Complete( ConvertSqlErrToE32Err( err )); |
521 aMessage.Complete( ConvertSqlErrToE32Err( err )); |
521 iMessage = RMessage2(); |
522 iMessage = RMessage2(); |
522 } |
523 } |
523 } |
524 } |
524 } |
525 } |
589 iBuffer = NULL; |
590 iBuffer = NULL; |
590 } |
591 } |
591 else if( err == KErrCompletion ) |
592 else if( err == KErrCompletion ) |
592 { |
593 { |
593 // If thumbnail of requested size is blacklisted, fetching is left with KErrCompletion |
594 // If thumbnail of requested size is blacklisted, fetching is left with KErrCompletion |
594 TN_DEBUG1( |
595 TN_DEBUG1( "CThumbnailServerSession::RequestThumbByPathAsyncL() - thumbnail blacklisted" ); |
595 "CThumbnailServerSession::RequestThumbByPathAsyncL() - thumbnail blacklisted" ); |
596 |
596 aMessage.Complete( err ); |
597 aMessage.Complete( err ); |
597 iMessage = RMessage2(); |
598 iMessage = RMessage2(); |
598 } |
599 } |
599 else |
600 else |
600 { |
601 { |
641 } |
642 } |
642 |
643 |
643 aMessage.ReadL( 0, iRequestParams ); |
644 aMessage.ReadL( 0, iRequestParams ); |
644 const TThumbnailRequestParams& params = iRequestParams(); |
645 const TThumbnailRequestParams& params = iRequestParams(); |
645 |
646 |
646 if(params.iThumbnailSize != EUnknownThumbnailSize) |
647 // delete existing |
|
648 if(params.iOverwrite) |
647 { |
649 { |
648 Server()->DeleteThumbnailsL( params.iTargetUri); |
650 Server()->DeleteThumbnailsL( params.iTargetUri); |
649 } |
651 } |
650 |
652 |
651 if(params.iThumbnailSize == EFullScreenThumbnailSize || |
653 // if only one size |
652 params.iThumbnailSize == EGridThumbnailSize || |
654 if ((params.iControlFlags & EThumbnailGeneratePersistentSizesOnly) == 0) |
653 params.iThumbnailSize == EListThumbnailSize ) |
655 { |
654 { |
656 if(params.iThumbnailSize == EFullScreenThumbnailSize || |
655 TInt sourceType = TThumbnailPersistentSize::EUnknownSourceType; |
657 params.iThumbnailSize == EGridThumbnailSize || |
656 TDataType mimetype; |
658 params.iThumbnailSize == EListThumbnailSize ) |
657 TInt ret = Server()->MimeTypeFromFileExt( params.iTargetUri, mimetype ); |
|
658 |
|
659 if( ret == KErrNone ) |
|
660 { |
659 { |
661 sourceType = Server()->SourceTypeFromMimeType( mimetype ); |
660 TInt sourceType = TThumbnailPersistentSize::EUnknownSourceType; |
662 ModifyThumbnailSize(sourceType); |
661 TDataType mimetype; |
|
662 TInt ret = Server()->MimeTypeFromFileExt( params.iTargetUri, mimetype ); |
|
663 |
|
664 if( ret == KErrNone ) |
|
665 { |
|
666 sourceType = Server()->SourceTypeFromMimeType( mimetype ); |
|
667 ModifyThumbnailSize(sourceType); |
|
668 } |
|
669 User::LeaveIfError( ret ); |
663 } |
670 } |
664 User::LeaveIfError( ret ); |
671 } |
665 } |
|
666 |
672 |
667 TInt bufferSize = aMessage.Int2(); |
673 TInt bufferSize = aMessage.Int2(); |
668 HBufC8* buffer = HBufC8::NewMaxLC( bufferSize ); |
674 HBufC8* buffer = HBufC8::NewMaxLC( bufferSize ); |
669 TPtr8 ptr = buffer->Des(); |
675 TPtr8 ptr = buffer->Des(); |
670 aMessage.ReadL( 1 /* buffer pointer */, ptr ); |
676 aMessage.ReadL( 1 /* buffer pointer */, ptr ); |
684 } |
690 } |
685 |
691 |
686 aMessage.ReadL( 0, iRequestParams ); |
692 aMessage.ReadL( 0, iRequestParams ); |
687 const TThumbnailRequestParams& params = iRequestParams(); |
693 const TThumbnailRequestParams& params = iRequestParams(); |
688 |
694 |
|
695 const TThumbnailServerRequestId reqId( this, params.iRequestId ); |
|
696 |
|
697 // delete existing |
|
698 if(params.iOverwrite) |
|
699 { |
|
700 Server()->DeleteThumbnailsL( params.iTargetUri); |
|
701 } |
|
702 |
|
703 // if only one size |
|
704 if ((params.iControlFlags & EThumbnailGeneratePersistentSizesOnly) == 0) |
|
705 { |
|
706 if(params.iThumbnailSize == EFullScreenThumbnailSize || |
|
707 params.iThumbnailSize == EGridThumbnailSize || |
|
708 params.iThumbnailSize == EListThumbnailSize ) |
|
709 { |
|
710 TInt sourceType = TThumbnailPersistentSize::EUnknownSourceType; |
|
711 TDataType mimetype; |
|
712 TInt ret = Server()->MimeTypeFromFileExt( params.iTargetUri, mimetype ); |
|
713 |
|
714 if( ret == KErrNone ) |
|
715 { |
|
716 sourceType = Server()->SourceTypeFromMimeType( mimetype ); |
|
717 ModifyThumbnailSize(sourceType); |
|
718 } |
|
719 User::LeaveIfError( ret ); |
|
720 } |
|
721 } |
|
722 |
689 TInt bitmapHandle = aMessage.Int1(); |
723 TInt bitmapHandle = aMessage.Int1(); |
690 TThumbnailServerRequestId &reqId = (TThumbnailServerRequestId&)params.iRequestId; |
|
691 |
724 |
692 // get bitmap |
725 // get bitmap |
693 CFbsBitmap* bitmap = new( ELeave )CFbsBitmap(); |
726 CFbsBitmap* bitmap = new( ELeave )CFbsBitmap(); |
694 CleanupStack::PushL( bitmap ); |
727 CleanupStack::PushL( bitmap ); |
695 User::LeaveIfError( bitmap->Duplicate( bitmapHandle ) ); |
728 User::LeaveIfError( bitmap->Duplicate( bitmapHandle ) ); |
696 |
729 |
697 // use pool to prevent bitmap leak |
730 // use pool to prevent bitmap leak |
698 // this bitmap is shared to several scale tasks, one of which can Leave |
731 // this bitmap is shared to several scale tasks, one of which can Leave |
699 Server()->AddBitmapToPoolL( reqId.iSession, bitmap, reqId ); |
732 Server()->AddBitmapToPoolL( this, bitmap, reqId ); |
700 |
733 |
701 CleanupStack::Pop( bitmap ); |
734 CleanupStack::Pop( bitmap ); |
702 iBitmapHandle = bitmap->Handle(); |
735 iBitmapHandle = bitmap->Handle(); |
703 |
736 |
704 RArray < TThumbnailPersistentSize >* missingSizes = NULL; |
737 RArray < TThumbnailPersistentSize >* missingSizes = NULL; |
763 Server()->Processor().AddTaskL( scaleTask ); |
796 Server()->Processor().AddTaskL( scaleTask ); |
764 CleanupStack::Pop( scaleTask ); |
797 CleanupStack::Pop( scaleTask ); |
765 |
798 |
766 // completion to first task, because task processor works like stack |
799 // completion to first task, because task processor works like stack |
767 if( i == 0 ) |
800 if( i == 0 ) |
768 { |
801 { |
769 // scaleTask is now responsible for completing the RMessage |
802 // scaleTask is now responsible for completing the RMessage |
770 scaleTask->SetMessageData( reqId, iMessage, iClientThread ); |
803 scaleTask->SetMessageData( reqId, iMessage, iClientThread ); |
771 iMessage = RMessage2(); |
804 iMessage = RMessage2(); |
772 } |
805 } |
773 } |
806 } |
797 // Create a task to generate a new thumbnail |
830 // Create a task to generate a new thumbnail |
798 // ----------------------------------------------------------------------------- |
831 // ----------------------------------------------------------------------------- |
799 // |
832 // |
800 void CThumbnailServerSession::CreateGenerateTaskFromFileHandleL( RFile64* aFile) |
833 void CThumbnailServerSession::CreateGenerateTaskFromFileHandleL( RFile64* aFile) |
801 { |
834 { |
802 const TThumbnailRequestParams& params = iRequestParams(); |
835 TThumbnailRequestParams& params = iRequestParams(); |
803 |
836 |
804 TN_DEBUG2( |
837 TN_DEBUG2( |
805 "CThumbnailServerSession::CreateGenerateTaskFromFileHandleL() -- create thumbnail generation task for %S", ¶ms.iFileName ); |
838 "CThumbnailServerSession::CreateGenerateTaskFromFileHandleL() -- create thumbnail generation task for %S", ¶ms.iFileName ); |
806 |
839 |
807 // disk space check only for stored sizes |
840 // disk space check only for stored sizes |
819 TInt sourceType = TThumbnailPersistentSize::EUnknownSourceType; |
852 TInt sourceType = TThumbnailPersistentSize::EUnknownSourceType; |
820 sourceType = Server()->SourceTypeFromMimeType( params.iMimeType ); |
853 sourceType = Server()->SourceTypeFromMimeType( params.iMimeType ); |
821 missingSizes = new (ELeave) RArray < TThumbnailPersistentSize >; |
854 missingSizes = new (ELeave) RArray < TThumbnailPersistentSize >; |
822 CleanupClosePushL( *missingSizes ); |
855 CleanupClosePushL( *missingSizes ); |
823 |
856 |
824 |
|
825 TBool gridSizeOnly(EFalse); |
857 TBool gridSizeOnly(EFalse); |
826 |
858 |
827 if ( params.iQualityPreference == CThumbnailManager |
859 if ( params.iQualityPreference == CThumbnailManager |
828 ::EOptimizeForQualityWithPreview ) |
860 ::EOptimizeForQualityWithPreview ) |
829 { |
861 { |
841 { |
873 { |
842 aFile->Close(); |
874 aFile->Close(); |
843 } |
875 } |
844 return; |
876 return; |
845 } |
877 } |
|
878 } |
|
879 // creating single TN on demand |
|
880 else if( params.iThumbnailSize > ECustomThumbnailSize && params.iThumbnailSize < EThumbnailSizeCount) |
|
881 { |
|
882 TThumbnailPersistentSize persistentSize = Server()->PersistentSizeL(params.iThumbnailSize); |
|
883 |
|
884 if(persistentSize.iCrop) |
|
885 { |
|
886 params.iFlags = ( CThumbnailManager::TThumbnailFlags ) (params.iFlags | CThumbnailManager::ECropToAspectRatio); |
|
887 } |
|
888 else |
|
889 { |
|
890 params.iFlags = ( CThumbnailManager::TThumbnailFlags ) (params.iFlags & CThumbnailManager::ECropToAspectRatio); |
|
891 } |
|
892 |
|
893 if( ClientThreadAlive() ) |
|
894 { |
|
895 iMessage.Write( 0, iRequestParams ); |
|
896 } |
846 } |
897 } |
847 |
898 |
848 // priority |
899 // priority |
849 TInt priority = params.iPriority; |
900 TInt priority = params.iPriority; |
850 if ( priority > KMaxGeneratePriority ) |
901 if ( priority > KMaxGeneratePriority ) |
1077 |
1128 |
1078 iMessage.WriteL( 0, iRequestParams ); |
1129 iMessage.WriteL( 0, iRequestParams ); |
1079 |
1130 |
1080 TN_DEBUG1("CThumbnailServerSession()::ProcessBitmapL() bitmap to pool"); |
1131 TN_DEBUG1("CThumbnailServerSession()::ProcessBitmapL() bitmap to pool"); |
1081 |
1132 |
1082 TThumbnailServerRequestId &reqId = (TThumbnailServerRequestId&)params.iRequestId; |
1133 Server()->AddBitmapToPoolL( this, iBitmap, TThumbnailServerRequestId( this, params.iRequestId ) ); |
1083 Server()->AddBitmapToPoolL( this, iBitmap, reqId ); |
|
1084 |
1134 |
1085 iMessage.Complete( KErrNone ); |
1135 iMessage.Complete( KErrNone ); |
1086 iMessage = RMessage2(); |
1136 iMessage = RMessage2(); |
1087 |
1137 |
1088 iBitmap = NULL; // owned by server now |
1138 iBitmap = NULL; // owned by server now |
1180 |
1230 |
1181 // read message params |
1231 // read message params |
1182 aMessage.ReadL( 0, iRequestParams ); |
1232 aMessage.ReadL( 0, iRequestParams ); |
1183 const TThumbnailRequestParams& params = iRequestParams(); |
1233 const TThumbnailRequestParams& params = iRequestParams(); |
1184 |
1234 |
1185 |
|
1186 #ifdef RD_MDS_2_5 |
1235 #ifdef RD_MDS_2_5 |
1187 // try to query path from MDS |
1236 // try to query path from MDS |
1188 CThumbnailMDSQueryTask* task = new( ELeave )CThumbnailMDSQueryTask( |
1237 CThumbnailMDSQueryTask* task = new( ELeave )CThumbnailMDSQueryTask( |
1189 Server()->Processor(), params.iPriority + 1, Server()->GetMdESession(), *Server()); |
1238 Server()->Processor(), params.iPriority + 1, Server()->GetMdESession(), *Server()); |
1190 |
1239 |
1191 CleanupStack::PushL( task ); |
1240 CleanupStack::PushL( task ); |
1192 task->QueryPathByIdL(params.iThumbnailId, ETrue); |
1241 task->QueryPathByIdL(params.iThumbnailId, ETrue); |
|
1242 task->SetMessageData( TThumbnailServerRequestId( this, params.iRequestId ) ); |
1193 Server()->QueueTaskL( task ); |
1243 Server()->QueueTaskL( task ); |
1194 CleanupStack::Pop( task ); // owned by processor now |
1244 CleanupStack::Pop( task ); // owned by processor now |
1195 #endif // RD_MDS_2_5 |
1245 #endif // RD_MDS_2_5 |
|
1246 |
1196 aMessage.Complete( KErrNone ); |
1247 aMessage.Complete( KErrNone ); |
1197 iMessage = RMessage2(); |
1248 iMessage = RMessage2(); |
1198 } |
1249 } |
1199 |
1250 |
1200 // ----------------------------------------------------------------------------- |
1251 // ----------------------------------------------------------------------------- |
1201 // Get the required size (in characters) for a buffer that contains the |
1252 // Get the required size (in characters) for a buffer that contains the |
1202 // list of supported MIME types |
1253 // list of supported MIME types |
1203 // ----------------------------------------------------------------------------- |
1254 // ----------------------------------------------------------------------------- |
1204 // |
1255 // |
1205 void CThumbnailServerSession::GetMimeTypeBufferSizeL( const RMessage2& aMessage |
1256 void CThumbnailServerSession::GetMimeTypeBufferSizeL( const RMessage2& aMessage ) |
1206 ) |
|
1207 { |
1257 { |
1208 TPckgBuf < TInt > buf; |
1258 TPckgBuf < TInt > buf; |
1209 buf() = Server()->GetMimeTypeBufferSize(); |
1259 buf() = Server()->GetMimeTypeBufferSize(); |
1210 aMessage.WriteL( 0, buf ); |
1260 aMessage.WriteL( 0, buf ); |
1211 } |
1261 } |