201027
authorhgs
Thu, 08 Jul 2010 15:45:05 +0300
changeset 31 d429f823a6b7
parent 30 b67379558a75
child 33 221be23823c5
201027
imagehandling_plat/thumbnailmanager_api/tsrc/Bmarm/ThumbnailManagerTestU.DEF
imagehandling_plat/thumbnailmanager_api/tsrc/Bmarm/ThumbnailManagerTestu.def
imagehandling_plat/thumbnailmanager_api/tsrc/Bwins/ThumbnailManagerTestU.DEF
imagehandling_plat/thumbnailmanager_api/tsrc/Bwins/ThumbnailManagerTestu.def
imagehandling_plat/thumbnailmanager_api/tsrc/EABI/ThumbnailManagerTestU.def
imagehandling_plat/thumbnailmanager_api/tsrc/eabi/ThumbnailManagerTestu.def
imagehandlinglib/BWINS/IHLU.DEF
imagehandlinglib/BWINS/IHLu.def
imagehandlinglib/EABI/IHLU.DEF
imagehandlinglib/Src/IHLDebugPrint.h
imagehandlinglib/eabi/IHLu.def
imagehandlingutilities/thumbnailmanager/plugins/audio/src/thumbnailaudioprovider.cpp
imagehandlingutilities/thumbnailmanager/plugins/audio/src/thumbnailimagedecoderv3.cpp
imagehandlingutilities/thumbnailmanager/plugins/image/src/thumbnailimagedecoder.cpp
imagehandlingutilities/thumbnailmanager/plugins/image/src/thumbnailimagedecoderv2.cpp
imagehandlingutilities/thumbnailmanager/thumbagdaemon/inc/thumbagprocessor.h
imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagprocessor.cpp
imagehandlingutilities/thumbnailmanager/thumbnailmanagerqt/tsrc/test_qtnmwrapper.cpp
imagehandlingutilities/thumbnailmanager/thumbnailserver/inc/thumbnailfetchedchecker.h
imagehandlingutilities/thumbnailmanager/thumbnailserver/inc/thumbnailstore.h
imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailfetchedchecker.cpp
imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailgeneratetask.cpp
imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailserver.cpp
imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailstore.cpp
--- a/imagehandling_plat/thumbnailmanager_api/tsrc/Bmarm/ThumbnailManagerTestU.DEF	Tue Jul 06 14:37:18 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-EXPORTS
-	LibEntryL__FR13CTestModuleIf @ 1 NONAME R3UNUSED ; LibEntryL(CTestModuleIf &)
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imagehandling_plat/thumbnailmanager_api/tsrc/Bmarm/ThumbnailManagerTestu.def	Thu Jul 08 15:45:05 2010 +0300
@@ -0,0 +1,3 @@
+EXPORTS
+	LibEntryL__FR13CTestModuleIf @ 1 NONAME R3UNUSED ; LibEntryL(CTestModuleIf &)
+
--- a/imagehandling_plat/thumbnailmanager_api/tsrc/Bwins/ThumbnailManagerTestU.DEF	Tue Jul 06 14:37:18 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-EXPORTS
-	?LibEntryL@@YAPAVCScriptBase@@AAVCTestModuleIf@@@Z @ 1 NONAME ; class CScriptBase * __cdecl LibEntryL(class CTestModuleIf &)
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imagehandling_plat/thumbnailmanager_api/tsrc/Bwins/ThumbnailManagerTestu.def	Thu Jul 08 15:45:05 2010 +0300
@@ -0,0 +1,3 @@
+EXPORTS
+	?LibEntryL@@YAPAVCScriptBase@@AAVCTestModuleIf@@@Z @ 1 NONAME ; class CScriptBase * __cdecl LibEntryL(class CTestModuleIf &)
+
--- a/imagehandling_plat/thumbnailmanager_api/tsrc/EABI/ThumbnailManagerTestU.def	Tue Jul 06 14:37:18 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-EXPORTS
-	_Z9LibEntryLR13CTestModuleIf @ 1 NONAME
-	_ZTI16CThumbnailCenRep @ 2 NONAME ; #<TI>#
-	_ZTV16CThumbnailCenRep @ 3 NONAME ; #<VT>#
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imagehandling_plat/thumbnailmanager_api/tsrc/eabi/ThumbnailManagerTestu.def	Thu Jul 08 15:45:05 2010 +0300
@@ -0,0 +1,5 @@
+EXPORTS
+	_Z9LibEntryLR13CTestModuleIf @ 1 NONAME
+	_ZTI16CThumbnailCenRep @ 2 NONAME ; #<TI>#
+	_ZTV16CThumbnailCenRep @ 3 NONAME ; #<VT>#
+
--- a/imagehandlinglib/BWINS/IHLU.DEF	Tue Jul 06 14:37:18 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-EXPORTS
-	?CopyBitmapL@IHLBitmapUtil@@SAPAVCFbsBitmap@@ABV2@@Z @ 1 NONAME ; class CFbsBitmap * IHLBitmapUtil::CopyBitmapL(class CFbsBitmap const &)
-	?CopyBitmapL@IHLBitmapUtil@@SAPAVCFbsBitmap@@ABV2@ABVTRect@@@Z @ 2 NONAME ; class CFbsBitmap * IHLBitmapUtil::CopyBitmapL(class CFbsBitmap const &, class TRect const &)
-	?CopyBitmapLC@IHLBitmapUtil@@SAPAVCFbsBitmap@@ABV2@@Z @ 3 NONAME ; class CFbsBitmap * IHLBitmapUtil::CopyBitmapLC(class CFbsBitmap const &)
-	?CopyBitmapLC@IHLBitmapUtil@@SAPAVCFbsBitmap@@ABV2@ABVTRect@@@Z @ 4 NONAME ; class CFbsBitmap * IHLBitmapUtil::CopyBitmapLC(class CFbsBitmap const &, class TRect const &)
-	?CreateBitmapProcessorL@IHLProcessorFactory@@SAPAVMIHLBitmapProcessor@@K@Z @ 5 NONAME ; class MIHLBitmapProcessor * IHLProcessorFactory::CreateBitmapProcessorL(unsigned long)
-	?CreateImageViewerL@IHLViewerFactory@@SAPAVMIHLImageViewer@@ABVTSize@@AAVMIHLImage@@AAVMIHLBitmap@@AAVMIHLViewerObserver@@K@Z @ 6 NONAME ; class MIHLImageViewer * IHLViewerFactory::CreateImageViewerL(class TSize const &, class MIHLImage &, class MIHLBitmap &, class MIHLViewerObserver &, unsigned long)
-	?CreateL@IHLBitmap@@SAPAVMIHLBitmap@@XZ @ 7 NONAME ; class MIHLBitmap * IHLBitmap::CreateL(void)
-	?CreateL@IHLScaler@@SAPAVMIHLScaler@@K@Z @ 8 NONAME ; class MIHLScaler * IHLScaler::CreateL(unsigned long)
-	?DuplicateBitmapL@IHLBitmapUtil@@SAPAVCFbsBitmap@@ABV2@@Z @ 9 NONAME ; class CFbsBitmap * IHLBitmapUtil::DuplicateBitmapL(class CFbsBitmap const &)
-	?DuplicateBitmapLC@IHLBitmapUtil@@SAPAVCFbsBitmap@@ABV2@@Z @ 10 NONAME ; class CFbsBitmap * IHLBitmapUtil::DuplicateBitmapLC(class CFbsBitmap const &)
-	?OpenFileImageL@IHLImageFactory@@SAPAVMIHLFileImage@@AAVRFile@@@Z @ 11 NONAME ; class MIHLFileImage * IHLImageFactory::OpenFileImageL(class RFile &)
-	?OpenFileImageL@IHLImageFactory@@SAPAVMIHLFileImage@@AAVRFile@@H@Z @ 12 NONAME ; class MIHLFileImage * IHLImageFactory::OpenFileImageL(class RFile &, int)
-	?OpenFileImageL@IHLImageFactory@@SAPAVMIHLFileImage@@AAVRFs@@ABVTDesC16@@@Z @ 13 NONAME ; class MIHLFileImage * IHLImageFactory::OpenFileImageL(class RFs &, class TDesC16 const &)
-	?OpenFileImageL@IHLImageFactory@@SAPAVMIHLFileImage@@AAVRFs@@ABVTDesC16@@H@Z @ 14 NONAME ; class MIHLFileImage * IHLImageFactory::OpenFileImageL(class RFs &, class TDesC16 const &, int)
-	?ScaleBitmap@IHLBitmapUtil@@SAHABVCFbsBitmap@@AAV2@K@Z @ 15 NONAME ; int IHLBitmapUtil::ScaleBitmap(class CFbsBitmap const &, class CFbsBitmap &, unsigned long)
-	?ScaleBitmap@IHLBitmapUtil@@SAHABVCFbsBitmap@@ABVTRect@@AAV2@1K@Z @ 16 NONAME ; int IHLBitmapUtil::ScaleBitmap(class CFbsBitmap const &, class TRect const &, class CFbsBitmap &, class TRect const &, unsigned long)
-	?OpenFileImageL@IHLImageFactory@@SAPAVMIHLFileImage@@AAVRFile@@HK@Z @ 17 NONAME ; class MIHLFileImage * IHLImageFactory::OpenFileImageL(class RFile &, int, unsigned long)
-	?OpenFileImageL@IHLImageFactory@@SAPAVMIHLFileImage@@AAVRFs@@ABVTDesC16@@HK@Z @ 18 NONAME ; class MIHLFileImage * IHLImageFactory::OpenFileImageL(class RFs &, class TDesC16 const &, int, unsigned long)
-	?OpenBufferedFileImageL@IHLImageFactory@@SAPAVMIHLFileImage@@AAVRFs@@ABVTDesC8@@@Z @ 19 NONAME ; class MIHLFileImage * IHLImageFactory::OpenBufferedFileImageL(class RFs &, class TDesC8 const &)
-	?OpenBufferedFileImageL@IHLImageFactory@@SAPAVMIHLFileImage@@AAVRFs@@ABVTDesC8@@H@Z @ 20 NONAME ; class MIHLFileImage * IHLImageFactory::OpenBufferedFileImageL(class RFs &, class TDesC8 const &, int)
-	?OpenBufferedFileImageL@IHLImageFactory@@SAPAVMIHLFileImage@@AAVRFs@@ABVTDesC8@@HK@Z @ 21 NONAME ; class MIHLFileImage * IHLImageFactory::OpenBufferedFileImageL(class RFs &, class TDesC8 const &, int, unsigned long)
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imagehandlinglib/BWINS/IHLu.def	Thu Jul 08 15:45:05 2010 +0300
@@ -0,0 +1,23 @@
+EXPORTS
+	?CopyBitmapL@IHLBitmapUtil@@SAPAVCFbsBitmap@@ABV2@@Z @ 1 NONAME ; class CFbsBitmap * IHLBitmapUtil::CopyBitmapL(class CFbsBitmap const &)
+	?CopyBitmapL@IHLBitmapUtil@@SAPAVCFbsBitmap@@ABV2@ABVTRect@@@Z @ 2 NONAME ; class CFbsBitmap * IHLBitmapUtil::CopyBitmapL(class CFbsBitmap const &, class TRect const &)
+	?CopyBitmapLC@IHLBitmapUtil@@SAPAVCFbsBitmap@@ABV2@@Z @ 3 NONAME ; class CFbsBitmap * IHLBitmapUtil::CopyBitmapLC(class CFbsBitmap const &)
+	?CopyBitmapLC@IHLBitmapUtil@@SAPAVCFbsBitmap@@ABV2@ABVTRect@@@Z @ 4 NONAME ; class CFbsBitmap * IHLBitmapUtil::CopyBitmapLC(class CFbsBitmap const &, class TRect const &)
+	?CreateBitmapProcessorL@IHLProcessorFactory@@SAPAVMIHLBitmapProcessor@@K@Z @ 5 NONAME ; class MIHLBitmapProcessor * IHLProcessorFactory::CreateBitmapProcessorL(unsigned long)
+	?CreateImageViewerL@IHLViewerFactory@@SAPAVMIHLImageViewer@@ABVTSize@@AAVMIHLImage@@AAVMIHLBitmap@@AAVMIHLViewerObserver@@K@Z @ 6 NONAME ; class MIHLImageViewer * IHLViewerFactory::CreateImageViewerL(class TSize const &, class MIHLImage &, class MIHLBitmap &, class MIHLViewerObserver &, unsigned long)
+	?CreateL@IHLBitmap@@SAPAVMIHLBitmap@@XZ @ 7 NONAME ; class MIHLBitmap * IHLBitmap::CreateL(void)
+	?CreateL@IHLScaler@@SAPAVMIHLScaler@@K@Z @ 8 NONAME ; class MIHLScaler * IHLScaler::CreateL(unsigned long)
+	?DuplicateBitmapL@IHLBitmapUtil@@SAPAVCFbsBitmap@@ABV2@@Z @ 9 NONAME ; class CFbsBitmap * IHLBitmapUtil::DuplicateBitmapL(class CFbsBitmap const &)
+	?DuplicateBitmapLC@IHLBitmapUtil@@SAPAVCFbsBitmap@@ABV2@@Z @ 10 NONAME ; class CFbsBitmap * IHLBitmapUtil::DuplicateBitmapLC(class CFbsBitmap const &)
+	?OpenFileImageL@IHLImageFactory@@SAPAVMIHLFileImage@@AAVRFile@@@Z @ 11 NONAME ; class MIHLFileImage * IHLImageFactory::OpenFileImageL(class RFile &)
+	?OpenFileImageL@IHLImageFactory@@SAPAVMIHLFileImage@@AAVRFile@@H@Z @ 12 NONAME ; class MIHLFileImage * IHLImageFactory::OpenFileImageL(class RFile &, int)
+	?OpenFileImageL@IHLImageFactory@@SAPAVMIHLFileImage@@AAVRFs@@ABVTDesC16@@@Z @ 13 NONAME ; class MIHLFileImage * IHLImageFactory::OpenFileImageL(class RFs &, class TDesC16 const &)
+	?OpenFileImageL@IHLImageFactory@@SAPAVMIHLFileImage@@AAVRFs@@ABVTDesC16@@H@Z @ 14 NONAME ; class MIHLFileImage * IHLImageFactory::OpenFileImageL(class RFs &, class TDesC16 const &, int)
+	?ScaleBitmap@IHLBitmapUtil@@SAHABVCFbsBitmap@@AAV2@K@Z @ 15 NONAME ; int IHLBitmapUtil::ScaleBitmap(class CFbsBitmap const &, class CFbsBitmap &, unsigned long)
+	?ScaleBitmap@IHLBitmapUtil@@SAHABVCFbsBitmap@@ABVTRect@@AAV2@1K@Z @ 16 NONAME ; int IHLBitmapUtil::ScaleBitmap(class CFbsBitmap const &, class TRect const &, class CFbsBitmap &, class TRect const &, unsigned long)
+	?OpenFileImageL@IHLImageFactory@@SAPAVMIHLFileImage@@AAVRFile@@HK@Z @ 17 NONAME ; class MIHLFileImage * IHLImageFactory::OpenFileImageL(class RFile &, int, unsigned long)
+	?OpenFileImageL@IHLImageFactory@@SAPAVMIHLFileImage@@AAVRFs@@ABVTDesC16@@HK@Z @ 18 NONAME ; class MIHLFileImage * IHLImageFactory::OpenFileImageL(class RFs &, class TDesC16 const &, int, unsigned long)
+	?OpenBufferedFileImageL@IHLImageFactory@@SAPAVMIHLFileImage@@AAVRFs@@ABVTDesC8@@@Z @ 19 NONAME ; class MIHLFileImage * IHLImageFactory::OpenBufferedFileImageL(class RFs &, class TDesC8 const &)
+	?OpenBufferedFileImageL@IHLImageFactory@@SAPAVMIHLFileImage@@AAVRFs@@ABVTDesC8@@H@Z @ 20 NONAME ; class MIHLFileImage * IHLImageFactory::OpenBufferedFileImageL(class RFs &, class TDesC8 const &, int)
+	?OpenBufferedFileImageL@IHLImageFactory@@SAPAVMIHLFileImage@@AAVRFs@@ABVTDesC8@@HK@Z @ 21 NONAME ; class MIHLFileImage * IHLImageFactory::OpenBufferedFileImageL(class RFs &, class TDesC8 const &, int, unsigned long)
+
--- a/imagehandlinglib/EABI/IHLU.DEF	Tue Jul 06 14:37:18 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-EXPORTS
-	_ZN13IHLBitmapUtil11CopyBitmapLERK10CFbsBitmap @ 1 NONAME
-	_ZN13IHLBitmapUtil11CopyBitmapLERK10CFbsBitmapRK5TRect @ 2 NONAME
-	_ZN13IHLBitmapUtil11ScaleBitmapERK10CFbsBitmapRK5TRectRS0_S5_m @ 3 NONAME
-	_ZN13IHLBitmapUtil11ScaleBitmapERK10CFbsBitmapRS0_m @ 4 NONAME
-	_ZN13IHLBitmapUtil12CopyBitmapLCERK10CFbsBitmap @ 5 NONAME
-	_ZN13IHLBitmapUtil12CopyBitmapLCERK10CFbsBitmapRK5TRect @ 6 NONAME
-	_ZN13IHLBitmapUtil16DuplicateBitmapLERK10CFbsBitmap @ 7 NONAME
-	_ZN13IHLBitmapUtil17DuplicateBitmapLCERK10CFbsBitmap @ 8 NONAME
-	_ZN15IHLImageFactory14OpenFileImageLER3RFsRK7TDesC16 @ 9 NONAME
-	_ZN15IHLImageFactory14OpenFileImageLER3RFsRK7TDesC16i @ 10 NONAME
-	_ZN15IHLImageFactory14OpenFileImageLER5RFile @ 11 NONAME
-	_ZN15IHLImageFactory14OpenFileImageLER5RFilei @ 12 NONAME
-	_ZN16IHLViewerFactory18CreateImageViewerLERK5TSizeR9MIHLImageR10MIHLBitmapR18MIHLViewerObserverm @ 13 NONAME
-	_ZN19IHLProcessorFactory22CreateBitmapProcessorLEm @ 14 NONAME
-	_ZN9IHLBitmap7CreateLEv @ 15 NONAME
-	_ZN9IHLScaler7CreateLEm @ 16 NONAME
-	_ZN15IHLImageFactory14OpenFileImageLER3RFsRK7TDesC16im @ 17 NONAME
-	_ZN15IHLImageFactory14OpenFileImageLER5RFileim @ 18 NONAME
-	_ZN15IHLImageFactory22OpenBufferedFileImageLER3RFsRK6TDesC8 @ 19 NONAME
-	_ZN15IHLImageFactory22OpenBufferedFileImageLER3RFsRK6TDesC8i @ 20 NONAME
-	_ZN15IHLImageFactory22OpenBufferedFileImageLER3RFsRK6TDesC8im @ 21 NONAME
-
--- a/imagehandlinglib/Src/IHLDebugPrint.h	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlinglib/Src/IHLDebugPrint.h	Thu Jul 08 15:45:05 2010 +0300
@@ -59,7 +59,7 @@
     /**
      * Macro for defining debug-only literal strings (empty release version)
      */
-    #define IHL_DEBUG_STRING(name, s) const TIHLEmptyDebugString name
+    #define IHL_DEBUG_STRING(name, s) const TIHLEmptyDebugString name = {}
 
     /**
      * Output to debugger output (empty)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imagehandlinglib/eabi/IHLu.def	Thu Jul 08 15:45:05 2010 +0300
@@ -0,0 +1,23 @@
+EXPORTS
+	_ZN13IHLBitmapUtil11CopyBitmapLERK10CFbsBitmap @ 1 NONAME
+	_ZN13IHLBitmapUtil11CopyBitmapLERK10CFbsBitmapRK5TRect @ 2 NONAME
+	_ZN13IHLBitmapUtil11ScaleBitmapERK10CFbsBitmapRK5TRectRS0_S5_m @ 3 NONAME
+	_ZN13IHLBitmapUtil11ScaleBitmapERK10CFbsBitmapRS0_m @ 4 NONAME
+	_ZN13IHLBitmapUtil12CopyBitmapLCERK10CFbsBitmap @ 5 NONAME
+	_ZN13IHLBitmapUtil12CopyBitmapLCERK10CFbsBitmapRK5TRect @ 6 NONAME
+	_ZN13IHLBitmapUtil16DuplicateBitmapLERK10CFbsBitmap @ 7 NONAME
+	_ZN13IHLBitmapUtil17DuplicateBitmapLCERK10CFbsBitmap @ 8 NONAME
+	_ZN15IHLImageFactory14OpenFileImageLER3RFsRK7TDesC16 @ 9 NONAME
+	_ZN15IHLImageFactory14OpenFileImageLER3RFsRK7TDesC16i @ 10 NONAME
+	_ZN15IHLImageFactory14OpenFileImageLER5RFile @ 11 NONAME
+	_ZN15IHLImageFactory14OpenFileImageLER5RFilei @ 12 NONAME
+	_ZN16IHLViewerFactory18CreateImageViewerLERK5TSizeR9MIHLImageR10MIHLBitmapR18MIHLViewerObserverm @ 13 NONAME
+	_ZN19IHLProcessorFactory22CreateBitmapProcessorLEm @ 14 NONAME
+	_ZN9IHLBitmap7CreateLEv @ 15 NONAME
+	_ZN9IHLScaler7CreateLEm @ 16 NONAME
+	_ZN15IHLImageFactory14OpenFileImageLER3RFsRK7TDesC16im @ 17 NONAME
+	_ZN15IHLImageFactory14OpenFileImageLER5RFileim @ 18 NONAME
+	_ZN15IHLImageFactory22OpenBufferedFileImageLER3RFsRK6TDesC8 @ 19 NONAME
+	_ZN15IHLImageFactory22OpenBufferedFileImageLER3RFsRK6TDesC8i @ 20 NONAME
+	_ZN15IHLImageFactory22OpenBufferedFileImageLER3RFsRK6TDesC8im @ 21 NONAME
+
--- a/imagehandlingutilities/thumbnailmanager/plugins/audio/src/thumbnailaudioprovider.cpp	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/plugins/audio/src/thumbnailaudioprovider.cpp	Thu Jul 08 15:45:05 2010 +0300
@@ -152,6 +152,7 @@
     {
     TN_DEBUG1( "CThumbnailAudioProvider::GetThumbnailL() - buffer no mime" );
 	__ASSERT_DEBUG((EFalse), User::Panic(_L("CThumbnailAudioProvider::GetThumbnailL"), KErrNotSupported));
+	User::Leave( KErrNotSupported );
     }
 
 // ---------------------------------------------------------------------------
--- a/imagehandlingutilities/thumbnailmanager/plugins/audio/src/thumbnailimagedecoderv3.cpp	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/plugins/audio/src/thumbnailimagedecoderv3.cpp	Thu Jul 08 15:45:05 2010 +0300
@@ -216,7 +216,7 @@
     iDecoder = NULL;
 	
     CImageDecoder::TOptions options = ( CImageDecoder::TOptions )( 
-            CImageDecoder::EOptionNoDither | CImageDecoder::EPreferFastDecode | CImageDecoder::EOptionAlwaysThread );
+            CImageDecoder::EOptionNoDither );
  
     TRAPD( decErr, iDecoder = CExtJpegDecoder::DataNewL(
             CExtJpegDecoder::EHwImplementation, iFs, *iBuffer, options ));
--- a/imagehandlingutilities/thumbnailmanager/plugins/image/src/thumbnailimagedecoder.cpp	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/plugins/image/src/thumbnailimagedecoder.cpp	Thu Jul 08 15:45:05 2010 +0300
@@ -377,12 +377,12 @@
         if ( aFlags == CThumbnailManager::EOptimizeForQuality )
             {
             options = ( CImageDecoder::TOptions )( CImageDecoder
-                ::EOptionNoDither | CImageDecoder::EOptionAlwaysThread );
+                ::EOptionNoDither );
             }
         else
             {
             options  = ( CImageDecoder::TOptions )( CImageDecoder
-                ::EOptionNoDither | CImageDecoder::EPreferFastDecode | CImageDecoder::EOptionAlwaysThread );
+                ::EOptionNoDither | CImageDecoder::EPreferFastDecode );
             }
 
         if ( IsSvg())
@@ -576,12 +576,12 @@
     CImageDecoder::TOptions options;
     if ( aFlags == CThumbnailManager::EOptimizeForQuality )
         {
-        options = ( CImageDecoder::TOptions )( CImageDecoder::EOptionNoDither | CImageDecoder::EOptionAlwaysThread );
+        options = ( CImageDecoder::TOptions )( CImageDecoder::EOptionNoDither );
         }
     else
         {
         options = ( CImageDecoder::TOptions )( CImageDecoder::EOptionNoDither |
-            CImageDecoder::EPreferFastDecode | CImageDecoder::EOptionAlwaysThread );
+            CImageDecoder::EPreferFastDecode  );
         }
 
     TRAPD( err, iDecoder = CExtJpegDecoder::DataNewL( iFs, * iExifThumbImage, options ));
--- a/imagehandlingutilities/thumbnailmanager/plugins/image/src/thumbnailimagedecoderv2.cpp	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/plugins/image/src/thumbnailimagedecoderv2.cpp	Thu Jul 08 15:45:05 2010 +0300
@@ -170,7 +170,7 @@
     iDecoder = NULL;
     
     CImageDecoder::TOptions options = ( CImageDecoder::TOptions )( 
-            CImageDecoder::EOptionNoDither | CImageDecoder::EPreferFastDecode | CImageDecoder::EOptionAlwaysThread );
+            CImageDecoder::EOptionNoDither );
 
     TRAPD( decErr, iDecoder = CExtJpegDecoder::DataNewL( 
             CExtJpegDecoder::EHwImplementation, iFs, *iBuffer, options ));
--- a/imagehandlingutilities/thumbnailmanager/thumbagdaemon/inc/thumbagprocessor.h	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbagdaemon/inc/thumbagprocessor.h	Thu Jul 08 15:45:05 2010 +0300
@@ -62,7 +62,8 @@
 
   struct TThumbnailGenerationItem
       {
-      inline TThumbnailGenerationItem(): iItemId( KErrNotFound ), iItemType(EGenerationItemTypeUnknown), iItemAction(EGenerationItemActionAdd), iPlaceholder(EFalse), iUri(NULL){}
+      inline TThumbnailGenerationItem(): iItemId( KErrNotFound ), iItemType(EGenerationItemTypeUnknown), 
+              iItemAction(EGenerationItemActionAdd), iPlaceholder(EFalse), iUri(NULL){}
       inline ~TThumbnailGenerationItem(){delete iUri; iUri = NULL;}
       
       TItemId iItemId;
@@ -166,7 +167,9 @@
      * @param aIDArray IDs for thumbnail creation
      * @param aForce pass ETrue if processor is forced to run without waiting harvesting complete
      */
-    void AddToQueueL( TObserverNotificationType aType, TThumbnailGenerationItemType aItemType, const RArray<TItemId>& aIDArray, const RPointerArray<HBufC>& aObjectUriArray, TBool aPresent );
+    void AddToQueueL( TObserverNotificationType aType, TThumbnailGenerationItemType aItemType, 
+            const RArray<TItemId>& aIDArray, const RPointerArray<HBufC>& aObjectUriArray, 
+            TBool aPresent );
     
     /**
      * Calls Thumbnail Manager to create thumbnails
--- a/imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagprocessor.cpp	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagprocessor.cpp	Thu Jul 08 15:45:05 2010 +0300
@@ -1288,6 +1288,52 @@
 
         QueryL( EGenerationItemActionResolveType );
        }
+    else if ( iDeleteItemCount > 0 )
+       {
+       TN_DEBUG1( "void CThumbAGProcessor::RunL() delete thumbnails");
+       // delete thumbs by URI
+       __ASSERT_DEBUG((iTMSession), User::Panic(_L("CThumbAGProcessor::RunL() !iTMSession "), KErrBadHandle));
+       if(iTMSession)
+           {
+           TInt itemIndex(KErrNotFound);
+                               
+           for(TInt i=0;i<iGenerationQueue.Count() || itemIndex == KErrNotFound;i++)
+               {
+               if(iGenerationQueue[i].iItemAction == EGenerationItemActionDelete)
+                   {
+                   itemIndex = i;
+                   }
+               }
+       
+           if(itemIndex >= 0)
+               {
+               if(!iGenerationQueue[itemIndex].iUri)
+                   {
+                   //URI is invalid
+                   TN_DEBUG1( "void CThumbAGProcessor::RunL() unable to delete URI inbalid");
+                   iGenerationQueue.Remove( itemIndex );
+                   ActivateAO();
+                   return;
+                   }
+
+               TN_DEBUG2( "void CThumbAGProcessor::RunL() delete %S",  iGenerationQueue[itemIndex].iUri);
+               CThumbnailObjectSource* source = NULL;                
+               TRAPD(err,  source = CThumbnailObjectSource::NewL( *iGenerationQueue[itemIndex].iUri, KNullDesC));
+                  
+               if(err == KErrNone)
+                   {
+                   iTMSession->DeleteThumbnails( *source );
+                   }
+               delete source;
+               
+               delete iGenerationQueue[itemIndex].iUri;
+               iGenerationQueue[itemIndex].iUri = NULL;
+               iGenerationQueue.Remove( itemIndex );
+               
+               iActiveCount++;
+               }
+           }
+       }
     // no items in query queue, start new
     // select queue to process, priority by type
     else if ( iModifyItemCount > 0 )
@@ -1313,54 +1359,6 @@
         
         QueryL( EGenerationItemActionAdd );     
         }
-    else if ( iDeleteItemCount > 0 )
-        {
-        TN_DEBUG1( "void CThumbAGProcessor::RunL() delete thumbnails");
-        i2ndRound = EFalse;
-        iUnknown = EFalse;
-        // delete thumbs by URI
-        __ASSERT_DEBUG((iTMSession), User::Panic(_L("CThumbAGProcessor::RunL() !iTMSession "), KErrBadHandle));
-        if(iTMSession)
-            {
-            TInt itemIndex(KErrNotFound);
-                                
-            for(TInt i=0;i<iGenerationQueue.Count() || itemIndex == KErrNotFound;i++)
-                {
-                if(iGenerationQueue[i].iItemAction == EGenerationItemActionDelete)
-                    {
-                    itemIndex = i;
-                    }
-                }
-        
-            if(itemIndex >= 0)
-                {
-                if(!iGenerationQueue[itemIndex].iUri)
-                    {
-                    //URI is invalid
-                    TN_DEBUG1( "void CThumbAGProcessor::RunL() unable to delete URI inbalid");
-                    iGenerationQueue.Remove( itemIndex );
-                    ActivateAO();
-                    return;
-                    }
-
-                TN_DEBUG2( "void CThumbAGProcessor::RunL() delete %S",  iGenerationQueue[itemIndex].iUri);
-                CThumbnailObjectSource* source = NULL;                
-                TRAPD(err,  source = CThumbnailObjectSource::NewL( *iGenerationQueue[itemIndex].iUri, KNullDesC));
-                   
-                if(err == KErrNone)
-                    {
-                    iTMSession->DeleteThumbnails( *source );
-                    }
-                delete source;
-                
-                delete iGenerationQueue[itemIndex].iUri;
-                iGenerationQueue[itemIndex].iUri = NULL;
-                iGenerationQueue.Remove( itemIndex );
-                
-                iActiveCount++;
-                }
-            }
-        }
     else if( i2ndAddItemCount > 0)
         {
         TN_DEBUG1( "void CThumbAGProcessor::RunL() update 2nd round thumbnails");
@@ -1687,8 +1685,9 @@
         }
     
     //check if forced run needs to continue
-    if ( iModifyItemCount || iUnknownItemCount > 0 )
+    if ( iModifyItemCount > 0 || iUnknownItemCount > 0 || iDeleteItemCount > 0 )
         {
+        TN_DEBUG1( "CThumbAGProcessor::ActivateAO() -  iModifyItemCount > 0 || iUnknownItemCount > 0 || iDeleteItemCount > 0");
         SetForceRun( ETrue );
         }
     else
--- a/imagehandlingutilities/thumbnailmanager/thumbnailmanagerqt/tsrc/test_qtnmwrapper.cpp	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbnailmanagerqt/tsrc/test_qtnmwrapper.cpp	Thu Jul 08 15:45:05 2010 +0300
@@ -470,7 +470,25 @@
         return QTest::qExec(&tc, c, v);
     }
 #else
-    QTEST_MAIN(TestThumbnailManager)
+    int main (int argc, char* argv[]) 
+    {
+        for ( int i=0;i<argc; i++){
+            if (strcmp(argv[i], "-o")==0 && i+1 <argc ){
+                //let's make sure that folder specified after -o exists
+                QDir file( QString::fromLatin1( argv[i+1] ));
+                QString s = file.absolutePath ();
+                s = s.left( s.lastIndexOf(file.dirName()) );
+                if ( !file.exists(s) ){
+                    file.mkpath(s);
+                }
+            }
+        }
+        
+        QApplication app(argc, argv);
+        QTEST_DISABLE_KEYPAD_NAVIGATION
+        TestThumbnailManager tc;
+        return QTest::qExec(&tc, argc, argv);
+    }
 #endif
 	
 #include "test_qtnmwrapper.moc"
--- a/imagehandlingutilities/thumbnailmanager/thumbnailserver/inc/thumbnailfetchedchecker.h	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/inc/thumbnailfetchedchecker.h	Thu Jul 08 15:45:05 2010 +0300
@@ -18,6 +18,7 @@
 #define THUMBNAILFETCHEDCHECKER_H
 
 #include <e32base.h>
+#include <thumbnailmanager.h>
 
 NONSHARABLE_CLASS( CThumbnailFetchedChecker ): public CBase
     {
@@ -25,8 +26,10 @@
     static CThumbnailFetchedChecker* NewL();
     virtual ~CThumbnailFetchedChecker();
 public:
-    TInt LastFetchResult( const TDesC& aUri );
-    void SetFetchResult( const TDesC& aUri, TInt aError );
+    TInt LastFetchResult( const TDesC& aUri, const TThumbnailSize aThumbnailSize );
+    void SetFetchResult( const TDesC& aUri, const TThumbnailSize aThumbnailSize, TInt aError );
+    void DeleteFetchResult( const TDesC& aUri );
+    void RenameFetchResultL( const TDesC& aNewUri, const TDesC& aOldUri );
     void Reset();
 private:
     CThumbnailFetchedChecker();
@@ -34,13 +37,15 @@
     NONSHARABLE_CLASS( CEntry ) : public CBase
         {
     public:
-        static CEntry* NewL( const TDesC& aUri, TInt aError );
-        static TInt FindCB( const TDesC* aUri, const CEntry& aEntry );
+        static CEntry* NewL( const TDesC& aUri, const TThumbnailSize aThumbnailSize, TInt aError );
+        static TInt FindCB( const CEntry& aEntry1, const CEntry& aEntry );
+        static TInt FindCBUri( const TDesC* aUri, const CEntry& aEntry );
         static TInt InsertCB( const CEntry& aEntry1, const CEntry& aEntry2 );
         CEntry();
         virtual ~CEntry();
     public:
         HBufC* iUri;
+        TInt32 iSize;
         TInt iError;
         };
 
--- a/imagehandlingutilities/thumbnailmanager/thumbnailserver/inc/thumbnailstore.h	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/inc/thumbnailstore.h	Thu Jul 08 15:45:05 2010 +0300
@@ -208,9 +208,10 @@
      * @param aFs File server.
      * @param aDrive Drive the store used for
      * @param aCenter Pointer to cenrep data handler
+	 * @param aReadOnly flag is store write protected
      * @return New CThumbnailStore instance.
      */
-    static CThumbnailStore* NewL( RFs& aFs, TInt aDrive, TDesC& aImei, CThumbnailServer* aServer );
+    static CThumbnailStore* NewL( RFs& aFs, TInt aDrive, TDesC& aImei, CThumbnailServer* aServer, const TBool aReadOnly );
 
     /**
      * Destructor
@@ -358,6 +359,11 @@
      * @contains indication whether file modified
      */
     TBool CheckModifiedByPathL( const TDesC& aPath, const TInt64 aModified, TBool& modifiedChanged);
+    
+    /**
+     *  @return TBool is store write protected
+     */
+    TBool IsReadOnly();
 
 private:
     /**
@@ -366,9 +372,10 @@
      * @since S60 v5.0
      * @param aFs File server.
      * @param aDrive Drive the store used for
+	 * @param aReadOnly set flag if store is write protected
      * @return New CThumbnailStore instance.
      */
-    CThumbnailStore( RFs& aFs, TInt aDrive, TDesC& aImei, CThumbnailServer* aServer);
+    CThumbnailStore( RFs& aFs, TInt aDrive, TDesC& aImei, CThumbnailServer* aServer, const TBool aReadOnly);
 
     /**
      * Symbian 2nd phase constructor can leave.
@@ -648,6 +655,11 @@
      * How long previous flush took ms
      */
     TInt iPreviousFlushDelay;
+    
+    /**
+     * is store write protected
+     */
+    TBool iReadOnly;
 
 };
 // End of File
--- a/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailfetchedchecker.cpp	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailfetchedchecker.cpp	Thu Jul 08 15:45:05 2010 +0300
@@ -16,6 +16,7 @@
 */
 
 #include "thumbnailfetchedchecker.h"
+#include "thumbnaillog.h"
 
 const int KMaxStoredEntries = 100;
 
@@ -49,13 +50,28 @@
 // CThumbnailFetchedChecker::LastFetchResult()
 // -----------------------------------------------------------------------------
 //
-TInt CThumbnailFetchedChecker::LastFetchResult( const TDesC& aUri )
+TInt CThumbnailFetchedChecker::LastFetchResult( const TDesC& aUri, const TThumbnailSize aThumbnailSize )
     {
-    TInt i = iNotFetched.FindInOrder( aUri, CEntry::FindCB );
-    if ( i >= 0 && i < iNotFetched.Count() )
+    TN_DEBUG3( "CThumbnailFetchedChecker::LastFetchResult(aUri=%S aThumbnailSize=%d)", &aUri, aThumbnailSize);
+
+    CEntry* entry = NULL;
+    TRAPD( err, entry = CEntry::NewL( aUri, aThumbnailSize, KErrNone ) );
+    if ( !err && entry )
         {
-        return iNotFetched[ i ]->iError;
+        TInt ret = iNotFetched.FindInOrder( entry, CEntry::FindCB );
+        if ( ret != KErrNotFound )
+            {
+            TN_DEBUG1( "CThumbnailFetchedChecker::LastFetchResult() -> error found");
+            entry = NULL;
+            delete entry;
+
+            return iNotFetched[ ret ]->iError;
+            }
         }
+
+    delete entry;        
+    entry = NULL;
+        
     return KErrNone;
     }
 
@@ -63,31 +79,43 @@
 // CThumbnailFetchedChecker::SetFetchResult()
 // -----------------------------------------------------------------------------
 //
-void CThumbnailFetchedChecker::SetFetchResult( const TDesC& aUri, TInt aError )
+void CThumbnailFetchedChecker::SetFetchResult( const TDesC& aUri, const TThumbnailSize aThumbnailSize, TInt aError )
     {
+    TN_DEBUG4( "CThumbnailFetchedChecker::SetFetchResult(aUri=%S aThumbnailSize=%d aError=%d)", &aUri, aThumbnailSize, aError);
     if ( aError == KErrNone )
         {
-        // Do not store successful results
-        TInt i = iNotFetched.FindInOrder( aUri, CEntry::FindCB );
-        if ( i >= 0 && i < iNotFetched.Count() )
+        // Remove successful results from store
+        CEntry* entry = NULL;
+        TRAPD( err, entry = CEntry::NewL( aUri, aThumbnailSize, aError ) );
+        if ( !err && entry )
             {
-            delete iNotFetched[ i ];
-            iNotFetched.Remove( i );
+            TInt i = iNotFetched.FindInOrder( entry, CEntry::FindCB );
+            if ( i >= 0 )
+                {
+                TN_DEBUG2( "CThumbnailFetchedChecker::LastFetchResult() -> Remove successful results from store %d",  iNotFetched.Count() );
+                delete iNotFetched[ i ];
+                iNotFetched.Remove( i );
+                }
             }
+        entry = NULL;
+        delete entry;
         }
     else
         {
+
         // Add or update
         CEntry* entry = NULL;
-        TRAPD( err, entry = CEntry::NewL( aUri, aError ) );
+        TRAPD( err, entry = CEntry::NewL( aUri, aThumbnailSize, aError ) );
         if ( !err && entry )
             {
             err = iNotFetched.Find( entry );
             if ( err != KErrNotFound )
                 {
-                TInt i = iNotFetched.FindInOrder( aUri, CEntry::FindCB );
-                if ( i >= 0 && i < iNotFetched.Count() )
+                // update existing fetch result
+                TInt i = iNotFetched.FindInOrder( entry, CEntry::FindCB );
+                if ( i >= 0 )
                     {
+                    TN_DEBUG1( "CThumbnailFetchedChecker::LastFetchResult() -> Update fetched tn error" );
                     iNotFetched[ i ]->iError = aError;
                     }
                 }
@@ -95,9 +123,11 @@
                 {
                 if( iNotFetched.Count() < KMaxStoredEntries )
                     {
+                    // insert new fetch result
                     TInt err = iNotFetched.InsertInOrder( entry, CEntry::InsertCB );
                     if ( err == KErrNone )
                         {
+                        TN_DEBUG2( "CThumbnailFetchedChecker::LastFetchResult() -> Inserted new fetched tn error %d", iNotFetched.Count());	
                         entry = NULL; // owned by array now
                         }
                     }
@@ -110,25 +140,76 @@
     }
 
 // -----------------------------------------------------------------------------
+// CThumbnailFetchedChecker::DeleteFetchResult()
+// -----------------------------------------------------------------------------
+//
+void CThumbnailFetchedChecker::DeleteFetchResult( const TDesC& aUri )
+    {
+    TN_DEBUG2( "CThumbnailFetchedChecker::DeleteFetchResult(%S)", &aUri);
+    // delete all entries of passed uri
+    TInt ret;
+    do
+        {
+        ret = iNotFetched.FindInOrder( aUri, CEntry::FindCBUri );
+        if ( ret >= 0 )
+            {
+            TN_DEBUG1( "CThumbnailFetchedChecker::DeleteFetchResult() -> Deteled URI from fetched list" );	
+            delete iNotFetched[ ret ];
+            iNotFetched.Remove( ret );
+            }
+        }
+    while(ret != KErrNotFound );
+    
+    }
+
+// -----------------------------------------------------------------------------
+// CThumbnailFetchedChecker::LastFetchResult()
+// -----------------------------------------------------------------------------
+//
+void CThumbnailFetchedChecker::RenameFetchResultL( const TDesC& aNewUri, const TDesC& aOldUri )
+    {
+    TN_DEBUG3( "CThumbnailFetchedChecker::RenameFetchResult(aNewUri=%S aOldUri=%S)", &aNewUri, &aOldUri);
+    // change every occurence of passed uri
+    TInt ret;
+    do
+        {
+        ret = iNotFetched.FindInOrder( aOldUri, CEntry::FindCBUri );
+        if ( ret >= 0 )
+            {
+            delete iNotFetched[ ret ]->iUri;
+            iNotFetched[ ret ]->iUri = NULL;
+
+            iNotFetched[ ret ]->iUri = aNewUri.AllocL();
+            TN_DEBUG1( "CThumbnailFetchedChecker::RenameeFetchResult() -> Renamed URI in fetched list" );	
+            }
+        }
+    while(ret != KErrNotFound );
+    
+    }
+
+// -----------------------------------------------------------------------------
 // CThumbnailFetchedChecker::Reset()
 // -----------------------------------------------------------------------------
 //
 void CThumbnailFetchedChecker::Reset()
     {
+    TN_DEBUG1( "CThumbnailFetchedChecker::Reset()");
     iNotFetched.ResetAndDestroy();
     }
 
 // -----------------------------------------------------------------------------
-// CThumbnailFetchedChecker::CEntry::New()
+// CThumbnailFetchedChecker::CEntry::NewL()
 // -----------------------------------------------------------------------------
 //
 CThumbnailFetchedChecker::CEntry* CThumbnailFetchedChecker::CEntry::NewL(
-        const TDesC& aUri, TInt aError )
+        const TDesC& aUri, const TThumbnailSize aThumbnailSize, TInt aError )
     {
+    TN_DEBUG4( "CThumbnailFetchedChecker::CEntry::NewL(aUri=%S aThumbnailSize=%d aError=%d)", &aUri, aThumbnailSize, aError);
     CEntry* self  = new (ELeave) CEntry();
     if ( self )
         {
-        self->iUri = aUri.Alloc();
+        self->iUri = aUri.AllocL();
+        self->iSize = aThumbnailSize;
         self->iError = aError;
         if ( !self->iUri )
             {
@@ -144,8 +225,28 @@
 // -----------------------------------------------------------------------------
 //
 TInt CThumbnailFetchedChecker::CEntry::FindCB(
-    const TDesC* aUri, const CThumbnailFetchedChecker::CEntry& aEntry )
+        const CThumbnailFetchedChecker::CEntry& aEntry, const CThumbnailFetchedChecker::CEntry& aEntry1 )
     {
+    TN_DEBUG1( "CThumbnailFetchedChecker::CEntry::FindCB");
+    if( aEntry1.iSize == aEntry.iSize)
+        {
+        // return index if size and uri matches
+        return aEntry.iUri->CompareF( *( aEntry1.iUri ) );
+        }
+    else 
+        {
+        return KErrNotFound;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CThumbnailFetchedChecker::CEntry::FindCBUri()
+// -----------------------------------------------------------------------------
+//
+TInt CThumbnailFetchedChecker::CEntry::FindCBUri(
+        const TDesC* aUri, const CThumbnailFetchedChecker::CEntry& aEntry )
+    {
+    TN_DEBUG2( "CThumbnailFetchedChecker::CEntry::FindCBUri(aUri=%S", &aUri);
     return aUri->CompareF( *( aEntry.iUri ) );
     }
 
@@ -157,7 +258,16 @@
         const CThumbnailFetchedChecker::CEntry& aEntry1,
         const CThumbnailFetchedChecker::CEntry& aEntry2 )
     {
-    return aEntry1.iUri->CompareF( *( aEntry2.iUri ) );
+    TN_DEBUG1( "CThumbnailFetchedChecker::CEntry::InsertCB");
+    if( aEntry1.iSize == aEntry2.iSize)
+        {
+        // return index if size and uri matches
+        return aEntry1.iUri->CompareF( *( aEntry2.iUri ) );
+        }
+    else 
+        {
+        return KErrNotFound;
+        }
     }
 
 // -----------------------------------------------------------------------------
--- a/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailgeneratetask.cpp	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailgeneratetask.cpp	Thu Jul 08 15:45:05 2010 +0300
@@ -494,14 +494,14 @@
         iServer.StoreForPathL( iFilename )->StoreThumbnailL( 
             iFilename, tempBitmap, aOriginalSize, EFalse, iThumbnailSize, iModified, !iVirtualUri, ETrue );
 		//remove result from fetched checker
-        iServer.FetchedChecker().SetFetchResult( iFilename, KErrNone );
+        iServer.FetchedChecker().SetFetchResult( iFilename,  iThumbnailSize, KErrNone );
         }
     else if(iTargetUri != KNullDesC)
         {
         iServer.StoreForPathL( iTargetUri )->StoreThumbnailL( 
             iTargetUri, tempBitmap, aOriginalSize, EFalse, iThumbnailSize, iModified, !iVirtualUri, ETrue );
 		//remove result from fetched checker
-        iServer.FetchedChecker().SetFetchResult( iTargetUri, KErrNone );
+        iServer.FetchedChecker().SetFetchResult( iTargetUri, iThumbnailSize, KErrNone );
         }
 
     CleanupStack::PopAndDestroy( tempBitmap );
--- a/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailserver.cpp	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailserver.cpp	Thu Jul 08 15:45:05 2010 +0300
@@ -570,7 +570,7 @@
     
     if( iFetchedChecker )    
         {
-        iFetchedChecker->SetFetchResult( aPath, KErrNone );
+        iFetchedChecker->SetFetchResult( aPath, aThumbnailSize, KErrNone );
         }
     }
 
@@ -585,7 +585,7 @@
     TN_DEBUG3( "CThumbnailServer::FetchThumbnailL(aPath=%S aThumbnailSize=%d)", &aPath, aThumbnailSize );
     if( iFetchedChecker )
         {
-        TInt err( iFetchedChecker->LastFetchResult( aPath ) );
+        TInt err( iFetchedChecker->LastFetchResult( aPath, aThumbnailSize ) );
         if ( err == KErrNone ) // To avoid useless sql gets that fails for sure
             {
             // custom sizes are not stored to db, skip fetching
@@ -597,7 +597,7 @@
             TRAP( err, StoreForPathL( aPath )->FetchThumbnailL( aPath, aThumbnail, aData, aThumbnailSize, aOriginalSize) );
             if ( err != KErrNone )
                 {
-                iFetchedChecker->SetFetchResult( aPath, err );
+                iFetchedChecker->SetFetchResult( aPath, aThumbnailSize, err );
                 }
             }
         User::LeaveIfError( err );
@@ -666,7 +666,7 @@
     
     if( iFetchedChecker ) 
         {
-        iFetchedChecker->SetFetchResult( aPath, KErrNone );
+        iFetchedChecker->DeleteFetchResult( aPath );
         }
     }
 
@@ -944,7 +944,7 @@
         }
     else
         {
-        if(iFormatting)
+        if( iFormatting )
            {
            TN_DEBUG1( "CThumbnailServer::StoreForDriveL() - FORMATTING! - ABORT");
            User::Leave( KErrNotSupported );
@@ -953,17 +953,31 @@
         TVolumeInfo volumeInfo;
         TInt err = iFs.Volume( volumeInfo, aDrive );
         
-        if ( err || volumeInfo.iDrive.iDriveAtt& KDriveAttRom ||
-            volumeInfo.iDrive.iDriveAtt& KDriveAttRemote ||
-            volumeInfo.iDrive.iMediaAtt& KMediaAttWriteProtected ||
-            volumeInfo.iDrive.iMediaAtt& KMediaAttLocked )
+        if ( err )
+            {
+            // Locked
+            TN_DEBUG2( "CThumbnailServer::StoreForDriveL() - err %d", err);
+            User::Leave( err);
+            }
+        else if( volumeInfo.iDrive.iMediaAtt& KMediaAttLocked )
             {
-            // We don't support ROM disks or remote mounts. Media
-            // must be read-write and not locked.
-            User::Leave( KErrAccessDenied);
+            TN_DEBUG1( "CThumbnailServer::StoreForDriveL() - locked");
+            User::Leave( KErrAccessDenied );
             }
-        
-        res = CThumbnailStore::NewL( iFs, aDrive, iImei, this );
+		else if ( volumeInfo.iDrive.iDriveAtt& KDriveAttRom ||
+            volumeInfo.iDrive.iDriveAtt& KDriveAttRemote ||
+            volumeInfo.iDrive.iMediaAtt& KMediaAttWriteProtected )
+            {
+            // We support ROM disks and remote disks in read only mode.
+            TN_DEBUG1( "CThumbnailServer::StoreForDriveL() - rom/remote/write protected");
+            res = CThumbnailStore::NewL( iFs, aDrive, iImei, this, ETrue );
+            }
+        else
+            {
+            TN_DEBUG1( "CThumbnailServer::StoreForDriveL() - normal");
+            res = CThumbnailStore::NewL( iFs, aDrive, iImei, this, EFalse );
+            }
+			
         CleanupStack::PushL( res );
         iStores.InsertL( aDrive, res );
         res->SetPersistentSizes(iPersistentSizes);
@@ -1295,7 +1309,7 @@
             
             if( iFetchedChecker ) 
                 {
-                iFetchedChecker->SetFetchResult( aPath, KErrNone );
+                iFetchedChecker->DeleteFetchResult( aPath );
                 }
             
             // need to create new thumbs
@@ -1327,8 +1341,7 @@
     
     if( iFetchedChecker ) 
         {
-        iFetchedChecker->SetFetchResult( aNewPath, iFetchedChecker->LastFetchResult(aCurrentPath) );
-        iFetchedChecker->SetFetchResult( aCurrentPath, KErrNone );
+        iFetchedChecker->RenameFetchResultL( aNewPath, aCurrentPath );
         }
     }
 
--- a/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailstore.cpp	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailstore.cpp	Thu Jul 08 15:45:05 2010 +0300
@@ -166,9 +166,9 @@
 // Two-phased constructor.
 // ---------------------------------------------------------------------------
 //
-CThumbnailStore* CThumbnailStore::NewL( RFs& aFs, TInt aDrive, TDesC& aImei, CThumbnailServer* aServer )
+CThumbnailStore* CThumbnailStore::NewL( RFs& aFs, TInt aDrive, TDesC& aImei, CThumbnailServer* aServer, const TBool aReadOnly )
     {
-    CThumbnailStore* self = new( ELeave )CThumbnailStore( aFs, aDrive, aImei, aServer );
+    CThumbnailStore* self = new( ELeave )CThumbnailStore( aFs, aDrive, aImei, aServer, aReadOnly );
     CleanupStack::PushL( self );
     self->ConstructL();
     CleanupStack::Pop( self );
@@ -222,9 +222,9 @@
 // C++ default constructor can NOT contain any code, that might leave.
 // ---------------------------------------------------------------------------
 //
-CThumbnailStore::CThumbnailStore( RFs& aFs, TInt aDrive, TDesC& aImei, CThumbnailServer* aServer ): 
-    iFs( aFs ), iDrive( aDrive ), iDriveChar( 0 ), iBatchItemCount(0), iImei(aImei), 
-    iServer(aServer), iDiskFull(EFalse), iUnrecoverable(ETrue), iBatchFlushItemCount(KMInBatchItems)
+CThumbnailStore::CThumbnailStore( RFs& aFs, TInt aDrive, TDesC& aImei, CThumbnailServer* aServer, const TBool aReadOnly ): 
+    iFs( aFs ), iDrive( aDrive ), iDriveChar( 0 ), iBatchItemCount(0), iImei(aImei), iServer(aServer), iDiskFullNotifier(NULL), 
+    iDiskFull(EFalse), iActivityManager(NULL), iUnrecoverable(ETrue), iBatchFlushItemCount(KMInBatchItems), iReadOnly(aReadOnly)
     {
     // no implementation required
     }
@@ -241,31 +241,39 @@
 #ifdef _DEBUG
     iThumbCounter = 0;
 #endif
-    
-    HBufC* databasePath = HBufC::NewLC( KMaxFileName );
-    TPtr pathPtr = databasePath->Des();
-    User::LeaveIfError( RFs::DriveToChar( iDrive, iDriveChar ));
-    pathPtr.Append( iDriveChar );
-    pathPtr.Append( KThumbnailDatabaseName );
-    
-	//start disk space monitor
-    iDiskFullNotifier = CThumbnailStoreDiskSpaceNotifierAO::NewL( *this, 
-                                            KDiskFullThreshold,
-                                            pathPtr );
+    if(!iReadOnly)
+        {
+        HBufC* databasePath = HBufC::NewLC( KMaxFileName );
+        TPtr pathPtr = databasePath->Des();
+        User::LeaveIfError( RFs::DriveToChar( iDrive, iDriveChar ));
+        pathPtr.Append( iDriveChar );
+        pathPtr.Append( KThumbnailDatabaseName );
+        
+        //start disk space monitor
+        iDiskFullNotifier = CThumbnailStoreDiskSpaceNotifierAO::NewL( *this, 
+                                                KDiskFullThreshold,
+                                                pathPtr );
 
-    CleanupStack::PopAndDestroy( databasePath );
+        CleanupStack::PopAndDestroy( databasePath );
+    
+        TN_DEBUG2( "CThumbnailStore::ConstructL() drive: %d", iDrive );
     
-    TN_DEBUG2( "CThumbnailStore::ConstructL() drive: %d", iDrive );
+        OpenDatabaseL();
     
-    OpenDatabaseL();
+        // to monitor device activity
+        iActivityManager = CTMActivityManager::NewL( this, KStoreMaintenanceIdle);
+        iActivityManager->Start();
     
-    // to monitor device activity
-    iActivityManager = CTMActivityManager::NewL( this, KStoreMaintenanceIdle);
-    iActivityManager->Start();
-    
-    iDeleteThumbs = ETrue;
-    iCheckFilesExist = ETrue;
-    iLastCheckedRowID = -1;
+        iDeleteThumbs = ETrue;
+        iCheckFilesExist = ETrue;
+        }
+    else
+        {
+	    TN_DEBUG1( "CThumbnailStore::ConstructL() - read only, dymmy mode..." );
+        iDeleteThumbs = EFalse;
+        iCheckFilesExist = EFalse;
+        iLastCheckedRowID = -1;
+        }
     }
 
 // ---------------------------------------------------------------------------
@@ -1121,6 +1129,12 @@
 	const TThumbnailSize& aThumbnailSize, const TInt64 aModified, const TBool aThumbFromPath )
     {
     TN_DEBUG1( "CThumbnailStore::StoreThumbnailL( private ) in" );
+    
+    if(iReadOnly)
+        {
+        TN_DEBUG1( "CThumbnailStore::StoreThumbnailL() read only, skip..." );
+        return;
+        }
 
 #ifdef _DEBUG
     TTime aStart, aStop;
@@ -1272,6 +1286,12 @@
     {
     TSize thumbSize = aThumbnail->SizeInPixels();
     TN_DEBUG4( "CThumbnailStore::StoreThumbnailL( public ) aThumbnailSize = %d, aThumbnailSize(%d,%d) IN", aThumbnailSize, thumbSize.iWidth, thumbSize.iHeight );
+    
+    if(iReadOnly)
+        {
+        TN_DEBUG1( "CThumbnailStore::StoreThumbnailL() read only, skip..." );
+        return;
+        }
 
     __ASSERT_DEBUG(( aThumbnail ), ThumbnailPanic( EThumbnailNullPointer ));
     
@@ -1319,17 +1339,20 @@
                 CleanupStack::PushL( data );
                 
                 CImageEncoder* encoder = NULL;
-                TRAPD( decErr, encoder = CExtJpegEncoder::DataNewL( CExtJpegEncoder::EHwImplementation, data, CImageEncoder::EOptionAlwaysThread ) );
+				
+				CImageEncoder::TOptions options = ( CImageEncoder::TOptions )( CImageEncoder::EOptionAlwaysThread );
+				
+                TRAPD( decErr, encoder = CExtJpegEncoder::DataNewL( CExtJpegEncoder::EHwImplementation, data, options ) );
                 if ( decErr != KErrNone )
                     {
                     TN_DEBUG2( "CThumbnailStore::StoreThumbnailL( public ) - HW CExtJpegEncoder failed %d", decErr);
                 
-                    TRAPD( decErr, encoder = CExtJpegEncoder::DataNewL( CExtJpegEncoder::ESwImplementation, data, CImageEncoder::EOptionAlwaysThread ) );
+                    TRAPD( decErr, encoder = CExtJpegEncoder::DataNewL( CExtJpegEncoder::ESwImplementation, data, options ) );
                     if ( decErr != KErrNone )
                         {
                         TN_DEBUG2( "CThumbnailStore::StoreThumbnailL( public ) - SW CExtJpegEncoder failed %d", decErr);
                     
-                        TRAPD( decErr, encoder = CImageEncoder::DataNewL( data,  KJpegMime(), CImageEncoder::EOptionAlwaysThread ) );
+                        TRAPD( decErr, encoder = CImageEncoder::DataNewL( data,  KJpegMime(), options ) );
                         if ( decErr != KErrNone )
                             {
                             TN_DEBUG2( "CThumbnailStore::StoreThumbnailL( public ) - CImageEncoder failed %d", decErr);
@@ -1362,7 +1385,7 @@
                 
                 // Set some format specific data
                 imageData->iSampleScheme = TJpegImageData::EColor444;
-                imageData->iQualityFactor = 75;
+                imageData->iQualityFactor = 80;
                 
                 // imageData - ownership passed to frameImageData after AppendImageData
                 User::LeaveIfError(frameImageData->AppendImageData(imageData));
@@ -1432,6 +1455,12 @@
 TBool CThumbnailStore::FindDuplicateL( const TDesC& aPath, const TThumbnailSize& aThumbnailSize )
     {
     TN_DEBUG1( "CThumbnailStore::FindDuplicateL()" );
+	
+	if(iReadOnly)
+		{
+		TN_DEBUG1( "CThumbnailStore::FindDuplicateL() read only, skip..." );
+		return EFalse;
+		}
     
     User::LeaveIfError( CheckDbState() );
     
@@ -1528,6 +1557,12 @@
     {
     TN_DEBUG2( "CThumbnailStore::GetMissingSizesL() aSourceType == %d", aSourceType );
     
+    if(iReadOnly)
+        {
+        TN_DEBUG1( "CThumbnailStore::GetMissingSizesL() read only, skip..." );
+		return;
+        }
+    
     User::LeaveIfError( CheckDbState() );
     
     HBufC* path = aPath.AllocLC();
@@ -1637,6 +1672,12 @@
     {
     TN_DEBUG3( "CThumbnailStore::FetchThumbnailL(%S) aThumbnailSize==%d", &aPath, aThumbnailSize );
     
+    if(iReadOnly)
+        {
+        TN_DEBUG1( "CThumbnailStore::FetchThumbnailL() read only, skip..." );
+        User::Leave( KErrNotFound );
+        }
+    
     User::LeaveIfError( CheckDbState() );
     
     HBufC* path = aPath.AllocLC();
@@ -1761,6 +1802,12 @@
     {
     TN_DEBUG2( "CThumbnailStore::DeleteThumbnailsL(%S)", &aPath );
 
+    if(iReadOnly)
+        {
+        TN_DEBUG1( "CThumbnailStore::DeleteThumbnailsL() read only, skip..." );
+        return;
+        }
+    
 #ifdef _DEBUG
     TTime aStart, aStop;
     aStart.UniversalTime();
@@ -1960,6 +2007,12 @@
     {
     TN_DEBUG2( "CThumbnailStore::RenameThumbnailsL(%S)", &aCurrentPath );
     
+    if(iReadOnly)
+        {
+        TN_DEBUG1( "CThumbnailStore::RenameThumbnailsL() read only, skip..." );
+        return;
+        }
+    
 #ifdef _DEBUG
     TTime aStart, aStop;
     aStart.UniversalTime();
@@ -2049,6 +2102,12 @@
     
     StopAutoFlush();
     
+    if(iReadOnly)
+        {
+        TN_DEBUG1( "CThumbnailStore::FlushCacheTable() read only, skip..." );
+        return;
+        }
+    
     if(iBatchItemCount <= 0 || CheckDbState() != KErrNone)
         {
         // cache empty or db unusable
@@ -2190,6 +2249,12 @@
     {
     TN_DEBUG1( "CThumbnailStore::StartAutoFlush()" );
     
+    if(iReadOnly)
+        {
+        TN_DEBUG1( "CThumbnailStore::StartAutoFlush() read only, skip..." );
+        return;
+        }
+    
     TInt err = KErrNone;
     
     if( iAutoFlushTimer )
@@ -2371,6 +2436,13 @@
     {
     TN_DEBUG2( "CThumbnailStore::CheckModifiedByPathL() %S", &aPath);
     
+    if(iReadOnly)
+    	{
+    	TN_DEBUG1( "CThumbnailStore::CheckModifiedByPathL() read only, skip..." );
+		modifiedChanged = EFalse;
+    	return ETrue;
+    	}
+	
     User::LeaveIfError( CheckDbState() );
     
     HBufC* path = aPath.AllocLC();
@@ -2450,6 +2522,16 @@
     return ret;
 }
 	
+
+// -----------------------------------------------------------------------------
+// IsReadOnly()
+// -----------------------------------------------------------------------------
+//
+TBool CThumbnailStore::IsReadOnly()
+    {
+    return iReadOnly;
+    }
+
 // -----------------------------------------------------------------------------
 // PrepareBlacklistedItemsForRetryL()
 // -----------------------------------------------------------------------------
@@ -2480,6 +2562,12 @@
 TInt CThumbnailStore::DeleteMarkedL()
     {
     TN_DEBUG1( "CThumbnailStore::DeleteMarkedL()" );
+    
+    if(iReadOnly)
+        {
+        TN_DEBUG1( "CThumbnailStore::DeleteMarkedL() read only, skip..." );
+        return KErrAccessDenied;
+        }
    
 #ifdef _DEBUG
     TTime aStart, aStop;
@@ -2571,6 +2659,12 @@
 TInt CThumbnailStore::FileExistenceCheckL()
     {
     TN_DEBUG1( "CThumbnailStore::FileExistenceCheckL()" );
+	
+    if(iReadOnly)
+		{
+		TN_DEBUG1( "CThumbnailStore::FileExistenceCheckL() read only, skip..." );
+		return ETrue;
+		}
     
 #ifdef _DEBUG
     TTime aStart, aStop;
@@ -2693,7 +2787,7 @@
 //
 TInt CThumbnailStore::CheckDbState()
     {
-    if (iUnrecoverable)
+    if (iUnrecoverable && !iReadOnly)
         {
         TN_DEBUG1( "CThumbnailStore::CheckDbState() - database in unrecoverable state" );
         __ASSERT_DEBUG( !iUnrecoverable, ThumbnailPanic( EThumbnailDatabaseUnrecoverable ));
@@ -2723,6 +2817,11 @@
 
 TBool CThumbnailStore::IsDiskFull()
     {
+    if(iReadOnly)
+        {
+        TN_DEBUG1( "CThumbnailStore::IsDiskFull() read only, skip..." );
+        return EFalse;
+        }
     return iDiskFull;
     }
 
@@ -2734,6 +2833,12 @@
     {
     TN_DEBUG2( "CThumbnailStore::ActivityChanged() aActive == %d", aActive);
     
+    if( iReadOnly )
+        {
+        TN_DEBUG1( "CThumbnailStore::ActivityChanged() read only, skip..." );
+        return;
+        }
+    
     if( aActive )
         {
         iIdle = EFalse;