Revision: 201031
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 18 Aug 2010 10:05:55 +0300
changeset 36 c5df59b4ae2d
parent 30 b67379558a75
child 43 473df7bf149f
Revision: 201031 Kit: 201033
imagehandling_plat/thumbnailmanager_api/inc/thumbnailmanager.h
imagehandling_plat/thumbnailmanager_api/tsrc/conf/ThumbnailManagerTest.cfg
imagehandlinglib/Src/IHLDebugPrint.h
imagehandlingutilities/thumbnailmanager/inc/thumbnailmanagerconstants.h
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/plugins/image/src/thumbnailimageprovider.cpp
imagehandlingutilities/thumbnailmanager/thumbagdaemon/inc/thumbagprocessor.h
imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagaudioobserver.cpp
imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagcameraobserver.cpp
imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagdaemon.cpp
imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagimageobserver.cpp
imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagprocessor.cpp
imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagvideoobserver.cpp
imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnaildataimpl.cpp
imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnailrequestactive.cpp
imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnailrequestqueue.cpp
imagehandlingutilities/thumbnailmanager/thumbnailmanagerqt/tsrc/test_qtnmwrapper.cpp
imagehandlingutilities/thumbnailmanager/thumbnailserver/inc/thumbnailfetchedchecker.h
imagehandlingutilities/thumbnailmanager/thumbnailserver/inc/thumbnailserver.h
imagehandlingutilities/thumbnailmanager/thumbnailserver/inc/thumbnailsql.h
imagehandlingutilities/thumbnailmanager/thumbnailserver/inc/thumbnailstore.h
imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailcenrep.cpp
imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailfetchedchecker.cpp
imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailgeneratetask.cpp
imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailmdsquerytask.cpp
imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailscaletask.cpp
imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailserver.cpp
imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailserversession.cpp
imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailstore.cpp
imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailtaskprocessor.cpp
imagehandlingutilities/thumbnailmanager/thumbnailserver/src/tmgetimei.cpp
imagehandlingutilities/thumbnailmanager/tmiadrestart/src/tmiadrestart.cpp
--- a/imagehandling_plat/thumbnailmanager_api/inc/thumbnailmanager.h	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandling_plat/thumbnailmanager_api/inc/thumbnailmanager.h	Wed Aug 18 10:05:55 2010 +0300
@@ -44,12 +44,12 @@
 EAudioGridThumbnailSize,
 EAudioListThumbnailSize,
 EAudioFullScreenThumbnailSize,
+EGridThumbnailSize,
+EListThumbnailSize,
+EFullScreenThumbnailSize,
 EContactGridThumbnailSize,
 EContactListThumbnailSize,
 EContactFullScreenThumbnailSize,
-EGridThumbnailSize,
-EListThumbnailSize,
-EFullScreenThumbnailSize,
 EThumbnailSizeCount //last item, don't remove
 } TThumbnailSize;
 /**
--- a/imagehandling_plat/thumbnailmanager_api/tsrc/conf/ThumbnailManagerTest.cfg	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandling_plat/thumbnailmanager_api/tsrc/conf/ThumbnailManagerTest.cfg	Wed Aug 18 10:05:55 2010 +0300
@@ -85,12 +85,12 @@
 EAudioGridThumbnailSize 8
 EAudioListThumbnailSize 9
 EAudioFullScreenThumbnailSize 10
-EContactGridThumbnailSize 11
-EContactListThumbnailSize 12
-EContactFullScreenThumbnailSize 13
-EGridThumbnailSize = 14
-EListThumbnailSize = 15
-EFullScreenThumbnailSize = 16
+EGridThumbnailSize = 11
+EListThumbnailSize = 12
+EFullScreenThumbnailSize = 13
+EContactGridThumbnailSize = 14
+EContactListThumbnailSize = 15
+EContactFullScreenThumbnailSize = 16
 
 // Custom sizes
 KCustomSizeX 111
--- a/imagehandlinglib/Src/IHLDebugPrint.h	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlinglib/Src/IHLDebugPrint.h	Wed Aug 18 10:05:55 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)
--- a/imagehandlingutilities/thumbnailmanager/inc/thumbnailmanagerconstants.h	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/inc/thumbnailmanagerconstants.h	Wed Aug 18 10:05:55 2010 +0300
@@ -178,7 +178,11 @@
 _LIT8( KFlashVideoMime, "video/x-flv" ); _LIT( KFlashVideoExt, ".flv" );
 _LIT8( KMatroskaVideoMime, "video/x-matroska" ); _LIT( KMatroskaVideoExt, ".mkv" );
 _LIT8( KContactMime, "contact/x-vcard" ); _LIT( KContactExt, ".vcf" );
+
 _LIT( KNonEmbeddedArtExt, ".alb" );
+
+_LIT8( KAlbumArtMime, "audio/albumart" ); _LIT( KAlbumArtExt, ".maa" );
+
 _LIT( KImageMime, "image/*" );
 _LIT( KVideoMime, "video/*" );
 _LIT( KAudioMime, "audio/*" );
--- a/imagehandlingutilities/thumbnailmanager/plugins/audio/src/thumbnailaudioprovider.cpp	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/plugins/audio/src/thumbnailaudioprovider.cpp	Wed Aug 18 10:05:55 2010 +0300
@@ -69,6 +69,7 @@
     {
     TN_DEBUG1( "CThumbnailAudioProvider::~CThumbnailAudioProvider()" );
     delete iImageDecoderv3;
+    iImageDecoderv3 = NULL;
     REComSession::DestroyedImplementation( iDtor_ID_Key );
     }
 
@@ -152,6 +153,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	Wed Aug 18 10:05:55 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	Wed Aug 18 10:05:55 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	Wed Aug 18 10:05:55 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/plugins/image/src/thumbnailimageprovider.cpp	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/plugins/image/src/thumbnailimageprovider.cpp	Wed Aug 18 10:05:55 2010 +0300
@@ -67,7 +67,9 @@
     {
     TN_DEBUG1( "CThumbnailImageProvider::~CThumbnailImageProvider()" );
     delete iImageDecoder;
+    iImageDecoder = NULL;
     delete iImageDecoderv2;
+    iImageDecoderv2 = NULL;
     REComSession::DestroyedImplementation( iDtor_ID_Key );
     }
 
--- a/imagehandlingutilities/thumbnailmanager/thumbagdaemon/inc/thumbagprocessor.h	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbagdaemon/inc/thumbagprocessor.h	Wed Aug 18 10:05:55 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/thumbagaudioobserver.cpp	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagaudioobserver.cpp	Wed Aug 18 10:05:55 2010 +0300
@@ -308,18 +308,20 @@
     
     // set observing conditions
     CMdELogicCondition* addCondition = CMdELogicCondition::NewLC( ELogicConditionOperatorAnd );
-    addCondition->AddObjectConditionL( audioDef );
-    CleanupStack::Pop( addCondition );  
+    CMdEObjectCondition& addObjectCondition = addCondition->AddObjectConditionL( audioDef );
+    CleanupStack::PushL( &addObjectCondition );
     
     CMdELogicCondition* modifyCondition = CMdELogicCondition::NewLC( ELogicConditionOperatorAnd );
-    modifyCondition->AddObjectConditionL( audioDef );
-    CleanupStack::Pop( modifyCondition );
+    CMdEObjectCondition& modifyObjectCondition = modifyCondition->AddObjectConditionL( audioDef );
+    CleanupStack::PushL( &modifyObjectCondition );
     
     // add observer
     iMdESession->AddObjectObserverL( *this, addCondition, ENotifyAdd ); 
 
    // modify observer
    iMdESession->AddObjectObserverL( *this, modifyCondition, ENotifyModify );
+   
+   CleanupStack::Pop( 4, addCondition );
      
     TN_DEBUG1( "CThumbAGAudioObserver::AddObserversL() - end" );
     }
--- a/imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagcameraobserver.cpp	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagcameraobserver.cpp	Wed Aug 18 10:05:55 2010 +0300
@@ -147,7 +147,10 @@
     iShutdown = ETrue;    
     
     delete iMDSShutdownObserver;
+    iMDSShutdownObserver = NULL;
+    
     delete iShutdownObserver;
+    iShutdownObserver = NULL;
     
     if(iReconnect)
         {
@@ -300,18 +303,20 @@
     
     // set observing conditions
     CMdELogicCondition* addCondition = CMdELogicCondition::NewLC( ELogicConditionOperatorAnd );
-    addCondition->AddPropertyConditionL( originPropDef, TMdEUintEqual(MdeConstants::Object::ECamera));
-    CleanupStack::Pop( addCondition );  
+    CMdEPropertyCondition& addPropertyCondition = addCondition->AddPropertyConditionL( originPropDef, TMdEUintEqual(MdeConstants::Object::ECamera));
+    CleanupStack::PushL( &addPropertyCondition );
     
     CMdELogicCondition* modifyCondition = CMdELogicCondition::NewLC( ELogicConditionOperatorAnd );
-    modifyCondition->AddPropertyConditionL( originPropDef, TMdEUintEqual(MdeConstants::Object::ECamera));
-    CleanupStack::Pop( modifyCondition );
+    CMdEPropertyCondition& modifyPropertyCondition = modifyCondition->AddPropertyConditionL( originPropDef, TMdEUintEqual(MdeConstants::Object::ECamera));
+    CleanupStack::PushL( &modifyPropertyCondition );
     
     // add observer
     iMdESession->AddObjectObserverL( *this, addCondition, ENotifyAdd ); 
 
    // modify observer
    iMdESession->AddObjectObserverL( *this, modifyCondition, ENotifyModify );
+   
+    CleanupStack::Pop( 4, addCondition );  
      
     TN_DEBUG1( "CThumbAGCameraObserver::AddObserversL() - end" );
     }
--- a/imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagdaemon.cpp	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagdaemon.cpp	Wed Aug 18 10:05:55 2010 +0300
@@ -194,7 +194,10 @@
     iAudioObserver = NULL;
     
     delete iMDSShutdownObserver;
+    iMDSShutdownObserver = NULL;
+    
     delete iShutdownObserver;
+    iShutdownObserver = NULL;
     
     if(iReconnect)
         {
@@ -267,6 +270,7 @@
        
         // comes here if server gets shut down
         delete server;
+        server = NULL;
         
         CleanupStack::PopAndDestroy( scheduler );
         }
@@ -538,6 +542,8 @@
     TInt ret = rep->Get( KEnableDaemon, val );
     
     delete rep;
+    rep = NULL;
+    
     TN_DEBUG3( "CThumbAGDaemon::DaemonEnabledL() - val == %d, ret == %d", val, ret );
     return val;
     }
@@ -579,6 +585,7 @@
         {
         TRAP( result, CThumbAGDaemon::ThreadFunctionL());
         delete cleanup;
+        cleanup = NULL;
         }
     
     if ( result != KErrNone )
--- a/imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagimageobserver.cpp	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagimageobserver.cpp	Wed Aug 18 10:05:55 2010 +0300
@@ -147,7 +147,10 @@
     iShutdown = ETrue;    
     
     delete iMDSShutdownObserver;
+    iMDSShutdownObserver = NULL;
+    
     delete iShutdownObserver;
+    iShutdownObserver = NULL;
     
     if(iReconnect)
         {
@@ -287,21 +290,28 @@
     
     // set observing conditions
     CMdELogicCondition* addCondition = CMdELogicCondition::NewLC( ELogicConditionOperatorAnd );
-    addCondition->AddObjectConditionL( imageDef );
-    addCondition->AddPropertyConditionL( originPropDef, TMdEUintNotEqual(MdeConstants::Object::ECamera));
-    CleanupStack::Pop( addCondition );  
+
+    CMdEObjectCondition& addObjectCondition = addCondition->AddObjectConditionL( imageDef );
+	CleanupStack::PushL( &addObjectCondition );
+	
+	CMdEPropertyCondition& addPropertyCondition = addCondition->AddPropertyConditionL( originPropDef, TMdEUintNotEqual(MdeConstants::Object::ECamera));
+   	CleanupStack::PushL( &addPropertyCondition );
     
     CMdELogicCondition* modifyCondition = CMdELogicCondition::NewLC( ELogicConditionOperatorAnd );
-    modifyCondition->AddObjectConditionL( imageDef );
-    addCondition->AddPropertyConditionL( originPropDef, TMdEUintNotEqual(MdeConstants::Object::ECamera));
-    CleanupStack::Pop( modifyCondition );
-   
+	CMdEObjectCondition& modifyObjectCondition = modifyCondition->AddObjectConditionL( imageDef );
+	CleanupStack::PushL( &modifyObjectCondition );
+	
+	CMdEPropertyCondition& modifyPropertyCondition = modifyCondition->AddPropertyConditionL( originPropDef, TMdEUintNotEqual(MdeConstants::Object::ECamera));
+   	CleanupStack::PushL( &modifyPropertyCondition );
+	
     // add observers
     iMdESession->AddObjectObserverL( *this, addCondition, ENotifyAdd ); 
 
     // modify observer
     iMdESession->AddObjectObserverL( *this, modifyCondition, ENotifyModify );
-     
+	
+    CleanupStack::Pop( 6, addCondition );
+
     TN_DEBUG1( "CThumbAGImageObserver::AddObserversL() - end" );
     }
 
--- a/imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagprocessor.cpp	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagprocessor.cpp	Wed Aug 18 10:05:55 2010 +0300
@@ -958,39 +958,47 @@
     
     CMdEObjectDef& objDef = iDefNamespace->GetObjectDefL( MdeConstants::Object::KBaseObject );
     iQuery = iMdESession->NewObjectQueryL( *iDefNamespace, objDef, this );
-    iQuery->SetResultMode( EQueryResultModeItem );
+	
+	if(iQuery)
+		{
+	    iQuery->SetResultMode( EQueryResultModeItem );
 
-    CMdELogicCondition& rootCondition = iQuery->Conditions();
-    rootCondition.SetOperator( ELogicConditionOperatorAnd );
+	    CMdELogicCondition& rootCondition = iQuery->Conditions();
+	    rootCondition.SetOperator( ELogicConditionOperatorAnd );
     
-    // add IDs
-    CleanupClosePushL( iQueryQueue );
-    rootCondition.AddObjectConditionL( iQueryQueue );
-    CleanupStack::Pop( &iQueryQueue );
+	    // add IDs
+	    CleanupClosePushL( iQueryQueue );
+	    rootCondition.AddObjectConditionL( iQueryQueue );
+	    CleanupStack::Pop( &iQueryQueue );
     
-    // add object type conditions 
-    if (!(iModify || iUnknown))
-        {
-        CMdELogicCondition& objDefCondition = rootCondition.AddLogicConditionL( ELogicConditionOperatorOr );
+	    // add object type conditions 
+	    if (!(iModify || iUnknown))
+	        {
+	        CMdELogicCondition& objDefCondition = rootCondition.AddLogicConditionL( ELogicConditionOperatorOr );
         
-        if (iAutoImage)
-            {
-            CMdEObjectDef& imageDef = iDefNamespace->GetObjectDefL( MdeConstants::Image::KImageObject );
-            objDefCondition.AddObjectConditionL( imageDef );
-            }
-        if (iAutoVideo)
-            {
-            CMdEObjectDef& videoDef = iDefNamespace->GetObjectDefL( MdeConstants::Video::KVideoObject );
-            objDefCondition.AddObjectConditionL( videoDef );
-            }
-        if (iAutoAudio)
-            {
-            CMdEObjectDef& audioDef = iDefNamespace->GetObjectDefL( MdeConstants::Audio::KAudioObject );
-            objDefCondition.AddObjectConditionL( audioDef );
-            }    
-        }
+	        if (iAutoImage)
+	            {
+	            CMdEObjectDef& imageDef = iDefNamespace->GetObjectDefL( MdeConstants::Image::KImageObject );
+	            objDefCondition.AddObjectConditionL( imageDef );
+	            }
+	        if (iAutoVideo)
+	            {
+	            CMdEObjectDef& videoDef = iDefNamespace->GetObjectDefL( MdeConstants::Video::KVideoObject );
+	            objDefCondition.AddObjectConditionL( videoDef );
+	            }
+	        if (iAutoAudio)
+	            {
+	            CMdEObjectDef& audioDef = iDefNamespace->GetObjectDefL( MdeConstants::Audio::KAudioObject );
+	            objDefCondition.AddObjectConditionL( audioDef );
+	            }    
+	        }
     
-    iQuery->FindL();
+	    iQuery->FindL();
+		}
+	else
+	    {
+        iQueryActive = EFalse;
+	    }
     
     TN_DEBUG1( "CThumbAGProcessor::QueryL() - end" );
     }
@@ -1036,25 +1044,33 @@
     CMdEObjectDef& objDef = iDefNamespace->GetObjectDefL( MdeConstants::Object::KBaseObject);
     iQueryPlaceholders = iMdESession->NewObjectQueryL( *iDefNamespace, objDef, this );
         
-    iQueryPlaceholders->SetResultMode( EQueryResultModeItem );
-    
-    CMdELogicCondition& rootCondition = iQueryPlaceholders->Conditions();
-    rootCondition.SetOperator( ELogicConditionOperatorOr );
-    
-    CMdEObjectCondition& imagePHObjectCondition = rootCondition.AddObjectConditionL(imageObjDef);
-    imagePHObjectCondition.SetPlaceholderOnly( ETrue );
-    imagePHObjectCondition.SetNotPresent( aPresent );
-    
-    CMdEObjectCondition& videoPHObjectCondition = rootCondition.AddObjectConditionL(videoObjDef);
-    videoPHObjectCondition.SetPlaceholderOnly( ETrue );
-    videoPHObjectCondition.SetNotPresent( aPresent );
-    
-    CMdEObjectCondition& audioPHObjectCondition = rootCondition.AddObjectConditionL(audioObjDef);
-    audioPHObjectCondition.SetPlaceholderOnly( ETrue );
-    audioPHObjectCondition.SetNotPresent( aPresent );
-    
-    iQueryPlaceholders->FindL(KMaxTInt, KMaxQueryBatchSize);   
-   
+    if(iQueryPlaceholders)
+        {
+        iQueryPlaceholders->SetResultMode( EQueryResultModeItem );
+        
+        CMdELogicCondition& rootCondition = iQueryPlaceholders->Conditions();
+        rootCondition.SetOperator( ELogicConditionOperatorOr );
+        
+        CMdEObjectCondition& imagePHObjectCondition = rootCondition.AddObjectConditionL(imageObjDef);
+        CleanupStack::PushL( &imagePHObjectCondition );
+        imagePHObjectCondition.SetPlaceholderOnly( ETrue );
+        imagePHObjectCondition.SetNotPresent( aPresent );
+        
+        CMdEObjectCondition& videoPHObjectCondition = rootCondition.AddObjectConditionL(videoObjDef);
+        CleanupStack::PushL( &videoPHObjectCondition );
+        videoPHObjectCondition.SetPlaceholderOnly( ETrue );
+        videoPHObjectCondition.SetNotPresent( aPresent );
+        
+        CMdEObjectCondition& audioPHObjectCondition = rootCondition.AddObjectConditionL(audioObjDef);
+        CleanupStack::PushL( &audioPHObjectCondition );
+        audioPHObjectCondition.SetPlaceholderOnly( ETrue );
+        audioPHObjectCondition.SetNotPresent( aPresent );
+        
+        iQueryPlaceholders->FindL(KMdEQueryDefaultMaxCount, KMaxQueryBatchSize);   
+       
+        CleanupStack::Pop(3, &imagePHObjectCondition );
+        }
+	
     TN_DEBUG1( "CThumbAGProcessor::QueryPlaceholdersL - end" );
     }
 
@@ -1183,7 +1199,7 @@
         }
 #endif
 	
-  	if( iForceRun || iForegroundRun )
+  	if( (iForceRun || iForegroundRun ) && !iMountTimer->IsActive() )
       	{
         TN_DEBUG1( "void CThumbAGProcessor::RunL() skip idle detection!");
       	CancelTimeout();
@@ -1288,6 +1304,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 +1375,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 +1701,9 @@
         }
     
     //check if forced run needs to continue
-    if ( iModifyItemCount || iUnknownItemCount > 0 )
+    if ( (iModifyItemCount > 0 || iDeleteItemCount > 0 ||  iUnknownItemCount > 0) && !iMountTimer->IsActive())
         {
+        TN_DEBUG1( "CThumbAGProcessor::ActivateAO() -  forced run");
         SetForceRun( ETrue );
         }
     else
@@ -1697,7 +1712,7 @@
         SetForceRun( EFalse );
         }
     
-    if( !IsActive() && !iShutdown && ((iActiveCount == 0 && !iQueryActive) || iForceRun ))
+    if( !IsActive() && !iShutdown && ((iActiveCount < KMaxDaemonRequests && !iQueryActive) || iForceRun ))
         {
         TN_DEBUG1( "CThumbAGProcessor::ActivateAO() - Activated");
         SetActive();
@@ -1880,12 +1895,17 @@
     rootCondition.SetOperator( ELogicConditionOperatorOr );
     
     CMdEObjectCondition& imageObjectCondition = rootCondition.AddObjectConditionL(imageObjDef);
+	CleanupStack::PushL( &imageObjectCondition );
     
     CMdEObjectCondition& videoObjectCondition = rootCondition.AddObjectConditionL(videoObjDef);
+	CleanupStack::PushL( &videoObjectCondition );
     
     CMdEObjectCondition& audioObjectCondition = rootCondition.AddObjectConditionL(audioObjDef);
+	CleanupStack::PushL( &audioObjectCondition );
     
-    iQueryAllItems->FindL(KMaxTInt, KMaxQueryBatchSize);  
+    iQueryAllItems->FindL(KMdEQueryDefaultMaxCount, KMaxQueryBatchSize);  
+	
+	CleanupStack::Pop(3, &imageObjectCondition);
     
     TN_DEBUG1( "CThumbAGProcessor::QueryAllItemsL - end" );
     }
@@ -2018,8 +2038,11 @@
     TN_DEBUG2( "CThumbAGProcessor::FormatNotification(%d)", aFormat );
     
     iFormatting = aFormat;
+    
     if(!aFormat)
         {
+        //force update
+        UpdatePSValues(EFalse, ETrue);
         ActivateAO();
         }
     }
@@ -2128,9 +2151,11 @@
                 }
             }
         
+        TN_DEBUG2( "CThumbAGProcessor::UpdatePSValues() iPreviousItemsLeft == %d", iPreviousItemsLeft);
+        
         if( itemsLeft != iPreviousItemsLeft)
             {
-            TN_DEBUG2( "CThumbAGProcessor::UpdatePSValues() update KItemsleft == %d", itemsLeft);
+            TN_DEBUG2( "CThumbAGProcessor::UpdatePSValues() Set KItemsleft == %d", itemsLeft);
             iPreviousItemsLeft = itemsLeft;
             TInt ret = RProperty::Set(KTAGDPSNotification, KItemsleft, itemsLeft );
             
--- a/imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagvideoobserver.cpp	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagvideoobserver.cpp	Wed Aug 18 10:05:55 2010 +0300
@@ -301,20 +301,27 @@
     
     // set observing conditions
     CMdELogicCondition* addCondition = CMdELogicCondition::NewLC( ELogicConditionOperatorAnd );
-    addCondition->AddObjectConditionL( videoDef );
-    addCondition->AddPropertyConditionL( originPropDef, TMdEUintNotEqual(MdeConstants::Object::ECamera));
-    CleanupStack::Pop( addCondition );  
+	
+	CMdEObjectCondition& addObjectCondition =  addCondition->AddObjectConditionL( videoDef );
+	CleanupStack::PushL( &addObjectCondition );
+	
+	CMdEPropertyCondition& addPropertyCondition  = addCondition->AddPropertyConditionL( originPropDef, TMdEUintNotEqual(MdeConstants::Object::ECamera));
+	CleanupStack::PushL( &addPropertyCondition );
     
     CMdELogicCondition* modifyCondition = CMdELogicCondition::NewLC( ELogicConditionOperatorAnd );
-    modifyCondition->AddObjectConditionL( videoDef );
-    addCondition->AddPropertyConditionL( originPropDef, TMdEUintNotEqual(MdeConstants::Object::ECamera));
-    CleanupStack::Pop( modifyCondition );
+	CMdEObjectCondition& modifyObjectCondition =  modifyCondition->AddObjectConditionL( videoDef );
+	CleanupStack::PushL( &modifyObjectCondition );
+	
+	CMdEPropertyCondition& modifyPropertyCondition =  modifyCondition->AddPropertyConditionL( originPropDef, TMdEUintNotEqual(MdeConstants::Object::ECamera));
+	CleanupStack::PushL( &modifyPropertyCondition );
     
     // add observer
     iMdESession->AddObjectObserverL( *this, addCondition, ENotifyAdd ); 
 
     // modify observer
     iMdESession->AddObjectObserverL( *this, modifyCondition, ENotifyModify );
+	
+	CleanupStack::Pop( 6, addCondition );
      
     TN_DEBUG1( "CThumbAGVideoObserver::AddObserversL() - end" );
     }
--- a/imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnaildataimpl.cpp	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnaildataimpl.cpp	Wed Aug 18 10:05:55 2010 +0300
@@ -41,6 +41,7 @@
 CThumbnailDataImpl::~CThumbnailDataImpl()
     {
     delete iBitmap;
+    iBitmap = NULL;
     iClientData = NULL;
     }
 
--- a/imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnailrequestactive.cpp	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnailrequestactive.cpp	Wed Aug 18 10:05:55 2010 +0300
@@ -47,6 +47,7 @@
         {
         iTimer->Cancel();
         }
+    
     delete iTimer;
     iTimer = NULL;
     
@@ -633,7 +634,7 @@
                     }
 	            }
 #endif
-	        TN_DEBUG2( "CThumbnaiRequestActive::HandleError() - iObserver.ThumbnailReady %d", iParams.iRequestId );
+	        TN_DEBUG3( "CThumbnaiRequestActive::HandleError() - iObserver.ThumbnailReady req=%d err=%d", iParams.iRequestId, iError );
 	        iObserver.ThumbnailReady( iError, *iCallbackThumbnail, iParams.iRequestId );
 	            
             }
--- a/imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnailrequestqueue.cpp	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbnailclient/src/thumbnailrequestqueue.cpp	Wed Aug 18 10:05:55 2010 +0300
@@ -163,6 +163,7 @@
              // delete completed task
              TN_DEBUG3( "CThumbnailRequestQueue::RemoveCompleted() - deleted id = %d (0x%08x)", request->RequestId(), request);
              delete request;
+             request = NULL;
              iRequests.Remove( i );
              }
          }
@@ -203,6 +204,7 @@
             else
                 {
                 delete request;
+                request = NULL;
                 iRequests.Remove( i );
                           
                 TN_DEBUG2( "CThumbnailRequestQueue::CancelRequest() - removed request ID: %d", aRequestId);
--- a/imagehandlingutilities/thumbnailmanager/thumbnailmanagerqt/tsrc/test_qtnmwrapper.cpp	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbnailmanagerqt/tsrc/test_qtnmwrapper.cpp	Wed Aug 18 10:05:55 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	Wed Aug 18 10:05:55 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/thumbnailserver.h	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/inc/thumbnailserver.h	Wed Aug 18 10:05:55 2010 +0300
@@ -63,7 +63,7 @@
 
     while ( item )
         {
-        delete * item;
+        delete *item;
         item = iter.NextValue();
         }
     aHashMap.Close();
--- a/imagehandlingutilities/thumbnailmanager/thumbnailserver/inc/thumbnailsql.h	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/inc/thumbnailsql.h	Wed Aug 18 10:05:55 2010 +0300
@@ -130,10 +130,6 @@
 _LIT8 ( KGetInfoRowID, "SELECT MAX (ThumbnailInfo.rowID) FROM ThumbnailInfo" );
 _LIT8 ( KGetDataRowID, "SELECT MAX (ThumbnailInfoData.rowID) FROM ThumbnailInfoData" );
 
-// counts
-_LIT8 ( KGetInfoCount, "SELECT COUNT(*) FROM ThumbnailInfo" );
-_LIT8 ( KGetInfoDataCount, "SELECT COUNT(*) FROM ThumbnailInfoData" );
-
 // flush 
 _LIT8( KThumbnailMoveFromTempInfoToMainTable, "INSERT INTO ThumbnailInfo SELECT * FROM TempThumbnailInfo;");
 _LIT8( KThumbnailMoveFromTempDataToMainTable, "INSERT INTO ThumbnailInfoData SELECT * FROM TempThumbnailInfoData;");
--- a/imagehandlingutilities/thumbnailmanager/thumbnailserver/inc/thumbnailstore.h	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/inc/thumbnailstore.h	Wed Aug 18 10:05:55 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/thumbnailcenrep.cpp	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailcenrep.cpp	Wed Aug 18 10:05:55 2010 +0300
@@ -113,7 +113,9 @@
     {
     iPersistentSizes.Close();
     delete iAutoCreate;
+    iAutoCreate = NULL;
     delete iRepository;
+    iRepository = NULL;
     }
 
 // ---------------------------------------------------------------------------
@@ -210,23 +212,52 @@
     iPersistentSizes.AppendL( TThumbnailPersistentSize( EAudioFullScreenThumbnailSize, TSize( xSize, ySize ),
                               flags, static_cast <TDisplayMode> (raw_mode), format, autoCreate, TThumbnailPersistentSize::EFullscreen ));     
 
-    User::LeaveIfError( iRepository->Get( KSizeContactGridWidth, xSize ));
-    User::LeaveIfError( iRepository->Get( KSizeContactGridHeight, ySize ));
-    User::LeaveIfError( iRepository->Get( KAutoCreateContactGrid, autoCreate ));
+// Contact TN, set default values if not found
+    if(iRepository->Get( KSizeContactGridWidth, xSize ) != KErrNone)
+        {
+        xSize = 54;
+        }
+    if( iRepository->Get( KSizeContactGridHeight, ySize ) != KErrNone)
+        {
+        ySize = 54;
+        }
+    
+    if( iRepository->Get( KAutoCreateContactGrid, autoCreate ) != KErrNone)
+    {
+        autoCreate = 1;
+    }
 
     iPersistentSizes.AppendL( TThumbnailPersistentSize( EContactGridThumbnailSize, TSize( xSize, ySize ),
             KGridAndListThumbnailCropped, static_cast <TDisplayMode> (raw_mode), format, autoCreate, TThumbnailPersistentSize::EGrid ));
     
-    User::LeaveIfError( iRepository->Get( KSizeContactListWidth, xSize ));
-    User::LeaveIfError( iRepository->Get( KSizeContactListHeight, ySize ));
-    User::LeaveIfError( iRepository->Get( KAutoCreateContactList, autoCreate ));
+    if(  iRepository->Get( KSizeContactListWidth, xSize ) != KErrNone)
+        {
+        xSize = 64;
+        }
+    if(  iRepository->Get( KSizeContactListHeight, ySize ) != KErrNone)
+        {
+        ySize = 64;
+        }
+    if(  iRepository->Get( KAutoCreateContactList, autoCreate ) != KErrNone)
+        {
+        autoCreate = 1;
+        }
 
     iPersistentSizes.AppendL( TThumbnailPersistentSize( EContactListThumbnailSize, TSize( xSize, ySize ),
             KGridAndListThumbnailCropped, static_cast <TDisplayMode> (raw_mode), format, autoCreate, TThumbnailPersistentSize::EList ));
     
-    User::LeaveIfError( iRepository->Get( KSizeContactFullscreenWidth, xSize ));
-    User::LeaveIfError( iRepository->Get( KSizeContactFullscreenHeight, ySize ));
-    User::LeaveIfError( iRepository->Get( KAutoCreateContactFullscreen, autoCreate ));
+    if( iRepository->Get( KSizeContactFullscreenWidth, xSize ) != KErrNone)
+        {
+        xSize = 250;
+        }
+    if( iRepository->Get( KSizeContactFullscreenHeight, ySize ) != KErrNone)
+        {
+        ySize = 250;
+        }
+    if( iRepository->Get( KAutoCreateContactFullscreen, autoCreate) != KErrNone)
+        {
+        autoCreate = 1;
+        }
     
     iPersistentSizes.AppendL( TThumbnailPersistentSize( EContactFullScreenThumbnailSize, TSize( xSize, ySize ),
                               flags, static_cast <TDisplayMode> (raw_mode), format, autoCreate, TThumbnailPersistentSize::EFullscreen ));     
@@ -243,9 +274,19 @@
     User::LeaveIfError( iRepository->Get( KAutoCreateAudioGrid, iAutoCreate->iAudioGrid ));
     User::LeaveIfError( iRepository->Get( KAutoCreateAudioList, iAutoCreate->iAudioList ));
     User::LeaveIfError( iRepository->Get( KAutoCreateAudioFullscreen, iAutoCreate->iAudioFullscreen ));    
-    User::LeaveIfError( iRepository->Get( KAutoCreateContactGrid, iAutoCreate->iContactGrid ));
-    User::LeaveIfError( iRepository->Get( KAutoCreateContactList, iAutoCreate->iContactList ));
-    User::LeaveIfError( iRepository->Get( KAutoCreateContactFullscreen, iAutoCreate->iContactFullscreen )); 
+    
+    if( iRepository->Get( KAutoCreateContactGrid, iAutoCreate->iContactGrid ) != KErrNone )
+        {
+        iAutoCreate->iContactGrid = 1;
+        }
+    if( iRepository->Get( KAutoCreateContactList, iAutoCreate->iContactList ) != KErrNone )
+        {
+        iAutoCreate->iContactList = 1;
+        }
+    if( iRepository->Get( KAutoCreateContactFullscreen, iAutoCreate->iContactFullscreen ) != KErrNone )
+        {
+        iAutoCreate->iContactFullscreen = 1;
+        }
     }
 
 // ---------------------------------------------------------------------------
--- a/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailfetchedchecker.cpp	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailfetchedchecker.cpp	Wed Aug 18 10:05:55 2010 +0300
@@ -16,6 +16,7 @@
 */
 
 #include "thumbnailfetchedchecker.h"
+#include "thumbnaillog.h"
 
 const int KMaxStoredEntries = 100;
 
@@ -49,13 +50,27 @@
 // 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");
+            delete entry;
+            entry = NULL;
+            return iNotFetched[ ret ]->iError;
+            }
         }
+
+    delete entry;        
+    entry = NULL;
+        
     return KErrNone;
     }
 
@@ -63,31 +78,44 @@
 // 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[ i ] = NULL;
+                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,77 @@
     }
 
 // -----------------------------------------------------------------------------
+// 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[ ret ] = NULL;
+            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 +226,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 +259,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;
+        }
     }
 
 // -----------------------------------------------------------------------------
@@ -175,4 +286,5 @@
 CThumbnailFetchedChecker::CEntry::~CEntry()
     {
     delete iUri;
+    iUri = NULL;
     }
--- a/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailgeneratetask.cpp	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailgeneratetask.cpp	Wed Aug 18 10:05:55 2010 +0300
@@ -95,6 +95,7 @@
         {
         iMissingSizes->Reset();
         delete iMissingSizes;
+        iMissingSizes = NULL;
         }
 		
     if ( iBitmapHandle )
@@ -494,14 +495,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/thumbnailmdsquerytask.cpp	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailmdsquerytask.cpp	Wed Aug 18 10:05:55 2010 +0300
@@ -36,7 +36,8 @@
 //
 CThumbnailMDSQueryTask::CThumbnailMDSQueryTask(
         CThumbnailTaskProcessor& aProcessor, TInt aPriority, CMdESession* aMdESession, CThumbnailServer& aServer): 
-        CThumbnailTask( aProcessor, aPriority ), iMdESession( aMdESession ), iServer(aServer), iUpdateToDb(ETrue)
+        CThumbnailTask( aProcessor, aPriority ), iMdESession( aMdESession ), iQuery(NULL), 
+		iServer(aServer), iUpdateToDb(ETrue)
     {
     TN_DEBUG2( "CThumbnailMDSQueryTask(0x%08x)::CThumbnailMDSQueryTask()", this );
     }
@@ -55,6 +56,7 @@
         {
         iQuery->Cancel();
         delete iQuery;
+        iQuery = NULL;
         }
     }
 
@@ -182,14 +184,21 @@
     CMdENamespaceDef* defNamespace = &iMdESession->GetDefaultNamespaceDefL();
     CMdEObjectDef& objDef = defNamespace->GetObjectDefL( MdeConstants::Object::KBaseObject );
     
+    delete iQuery;
+    iQuery = NULL;
+    
     iQuery = iMdESession->NewObjectQueryL( *defNamespace, objDef, this );
-    iQuery->SetResultMode( EQueryResultModeItem );
+	
+	if(iQuery)
+		{
+	    iQuery->SetResultMode( EQueryResultModeItem );
 
-    CMdELogicCondition& rootCondition = iQuery->Conditions();
-    rootCondition.SetOperator( ELogicConditionOperatorOr );
+    	CMdELogicCondition& rootCondition = iQuery->Conditions();
+	    rootCondition.SetOperator( ELogicConditionOperatorOr );
     
-    // add ID condition
-    rootCondition.AddObjectConditionL( aId );
+	    // add ID condition
+    	rootCondition.AddObjectConditionL( aId );
+		}
     }
 
 // ---------------------------------------------------------------------------
--- a/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailscaletask.cpp	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailscaletask.cpp	Wed Aug 18 10:05:55 2010 +0300
@@ -121,6 +121,7 @@
 
     // Scaled bitmap is owned by us, delete now
     delete iScaledBitmap;
+    iScaledBitmap = NULL;
     }
 
 
--- a/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailserver.cpp	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailserver.cpp	Wed Aug 18 10:05:55 2010 +0300
@@ -416,6 +416,7 @@
             "CThumbnailServer::ThreadFunctionL() -- CActiveScheduler::Start() out" );
         // Comes here if server gets shut down
         delete server;
+        server = NULL;
         CleanupStack::PopAndDestroy( scheduler );
         }
     }
@@ -443,7 +444,10 @@
         iSessionCount );
     iSessionCount--;
     
-    iProcessor->RemoveTasks(aSession);
+    if(iProcessor)
+        {
+        iProcessor->RemoveTasks(aSession);
+        }
     
     TN_DEBUG2( "CThumbnailServer::DropSession() aSession = 0x%08x", aSession );        
     
@@ -459,7 +463,7 @@
             {
             TN_DEBUG2( "CThumbnailServer::DropSession() - ref->iSession = 0x%08x", ref->iSession );
         
-            delete ref->iBitmap;            
+            delete ref->iBitmap;
             bpiter.RemoveCurrent();
                         
             TN_DEBUG2( "CThumbnailServer::DropSession() - deleted bitmap, left=%d", iBitmapPool.Count());
@@ -570,7 +574,7 @@
     
     if( iFetchedChecker )    
         {
-        iFetchedChecker->SetFetchResult( aPath, KErrNone );
+        iFetchedChecker->SetFetchResult( aPath, aThumbnailSize, KErrNone );
         }
     }
 
@@ -585,7 +589,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 +601,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 +670,7 @@
     
     if( iFetchedChecker ) 
         {
-        iFetchedChecker->SetFetchResult( aPath, KErrNone );
+        iFetchedChecker->DeleteFetchResult( aPath );
         }
     }
 
@@ -852,7 +856,7 @@
         if ( ref->iSession == aRequestId.iSession && 
              ref->iRequestId == aRequestId.iRequestId )
             {            
-            delete ref->iBitmap;            
+            delete ref->iBitmap;
             bpiter.RemoveCurrent();                        
                         
             TN_DEBUG2( "CThumbnailServer::DequeTask() - deleted bitmap, left=%d", 
@@ -944,7 +948,7 @@
         }
     else
         {
-        if(iFormatting)
+        if( iFormatting )
            {
            TN_DEBUG1( "CThumbnailServer::StoreForDriveL() - FORMATTING! - ABORT");
            User::Leave( KErrNotSupported );
@@ -953,17 +957,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);
@@ -1057,6 +1075,7 @@
     if (store)
         {
         delete *store;
+        *store = NULL;
         iStores.Remove( aDrive );
         }
     }
@@ -1145,7 +1164,7 @@
           // If drive-list entry is zero, drive is not available
             continue;
            }
-            
+
         TInt err = iFs.Volume(volumeInfo, drive);
         TInt err_drive = iFs.Drive(driveInfo, drive);    
         
@@ -1295,7 +1314,7 @@
             
             if( iFetchedChecker ) 
                 {
-                iFetchedChecker->SetFetchResult( aPath, KErrNone );
+                iFetchedChecker->DeleteFetchResult( aPath );
                 }
             
             // need to create new thumbs
@@ -1327,8 +1346,7 @@
     
     if( iFetchedChecker ) 
         {
-        iFetchedChecker->SetFetchResult( aNewPath, iFetchedChecker->LastFetchResult(aCurrentPath) );
-        iFetchedChecker->SetFetchResult( aCurrentPath, KErrNone );
+        iFetchedChecker->RenameFetchResultL( aNewPath, aCurrentPath );
         }
     }
 
@@ -1453,6 +1471,10 @@
         {
         aMimeType = TDataType( KContactMime );
         } 
+    else if ( ext.CompareF( KAlbumArtExt ) == 0 )
+        {
+        aMimeType = TDataType( KAlbumArtMime );
+        }
     else
         {
         aMimeType = TDataType( KNullDesC8 );
@@ -1569,7 +1591,8 @@
          mimeType.CompareF( KRealVideoMime ) == 0 ||
          mimeType.CompareF( KFlashVideoMime ) == 0 ||
          mimeType.CompareF( KMatroskaVideoMime ) == 0 ||
-         mimeType.CompareF( KContactMime ) == 0 )
+         mimeType.CompareF( KContactMime ) == 0 ||
+         mimeType.CompareF( KAlbumArtMime ) == 0 )
         {
         return ETrue;
         }
@@ -1603,6 +1626,7 @@
             "CThumbnailServer::E32Main() -- thread function out, result=%d",
             result );
         delete cleanup;
+        cleanup = NULL;
         }
     if ( result != KErrNone )
         {
--- a/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailserversession.cpp	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailserversession.cpp	Wed Aug 18 10:05:55 2010 +0300
@@ -907,6 +907,8 @@
             // all thumbs already exist
             CleanupStack::PopAndDestroy( missingSizes );
             delete missingSizes;
+            missingSizes = NULL;
+            
             if( aFile )
                {
                aFile->Close();
@@ -1038,6 +1040,8 @@
             // all thumbs already exist
             CleanupStack::PopAndDestroy( missingSizes );
             delete missingSizes;
+            missingSizes = NULL;
+            
             if ( aBuffer)
                {
                delete aBuffer;
--- a/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailstore.cpp	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailstore.cpp	Wed Aug 18 10:05:55 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;
+        }
     }
 
 // ---------------------------------------------------------------------------
@@ -547,9 +555,7 @@
     TInt column = 0;   
     TInt rowStatus = 0;
     TInt64 inforows = -1;
-    TInt64 infocount = -1;
     TInt64 datarows = -1;
-    TInt64 datacount = -1;
     
     TInt ret = stmt.Prepare( iDatabase, KGetInfoRowID );
     if(ret < 0)
@@ -575,32 +581,7 @@
 #endif
         return KErrNotSupported;
         }
-    
-    ret = stmt.Prepare( iDatabase, KGetInfoCount );
-    if(ret < 0)
-        {
-        stmt.Close();
-        TN_DEBUG1( "CThumbnailStore::CheckRowIDs() KGetInfoCount failed %d");
-        return KErrNotSupported;
-        }
-    rowStatus = stmt.Next();
-                
-    if ( rowStatus == KSqlAtRow)    
-        {        
-        infocount = stmt.ColumnInt64( column );  
-        }
-                
-    stmt.Close();
-    
-    if(rowStatus < 0)
-        {
-#ifdef _DEBUG
-        TPtrC errorMsg2 = iDatabase.LastErrorMessage();
-        TN_DEBUG2( "RThumbnailTransaction::ResetThumbnailIDs() lastError %S, ret = %d" , &errorMsg2);
-#endif
-        return KErrNotSupported;
-        }
-            
+              
     ret = stmt.Prepare( iDatabase, KGetDataRowID );
     if(ret < 0)
         {
@@ -626,37 +607,10 @@
         return KErrNotSupported;
         }
     
-    ret = stmt.Prepare( iDatabase, KGetInfoDataCount );
-    if(ret < 0)
-        {
-        stmt.Close();
-        TN_DEBUG1( "CThumbnailStore::CheckRowIDs() KGetInfoDataCount failed %d");
-        return KErrNotSupported;
-        }
-    rowStatus = stmt.Next();
-                
-    if ( rowStatus == KSqlAtRow)    
-        {        
-        datacount = stmt.ColumnInt64( column );  
-        }
-                
-    stmt.Close();
-    
-    if(rowStatus < 0)
-        {
-#ifdef _DEBUG
-        TPtrC errorMsg2 = iDatabase.LastErrorMessage();
-        TN_DEBUG2( "RThumbnailTransaction::ResetThumbnailIDs() lastError %S, ret = %d" , &errorMsg2);
-#endif
-        return KErrNotSupported;
-        }
-    
     TN_DEBUG2( "CThumbnailStore::CheckRowIDsL() - inforows %Ld", inforows );
-    TN_DEBUG2( "CThumbnailStore::CheckRowIDsL() - infocount %Ld", infocount );
     TN_DEBUG2( "CThumbnailStore::CheckRowIDsL() - datarows %Ld", datarows );
-    TN_DEBUG2( "CThumbnailStore::CheckRowIDsL() - datacount %Ld", datacount );
             
-    if( inforows != datarows || datacount != infocount)
+    if( inforows != datarows )
         {
         TN_DEBUG1( "CThumbnailStore::CheckRowIDsL() - tables out of sync" );
         return KErrNotSupported;
@@ -1121,6 +1075,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 +1232,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 +1285,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 +1331,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 +1401,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 +1503,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 +1618,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 +1748,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 +1953,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 +2048,12 @@
     
     StopAutoFlush();
     
+    if(iReadOnly)
+        {
+        TN_DEBUG1( "CThumbnailStore::FlushCacheTable() read only, skip..." );
+        return;
+        }
+    
     if(iBatchItemCount <= 0 || CheckDbState() != KErrNone)
         {
         // cache empty or db unusable
@@ -2190,6 +2195,12 @@
     {
     TN_DEBUG1( "CThumbnailStore::StartAutoFlush()" );
     
+    if(iReadOnly)
+        {
+        TN_DEBUG1( "CThumbnailStore::StartAutoFlush() read only, skip..." );
+        return;
+        }
+    
     TInt err = KErrNone;
     
     if( iAutoFlushTimer )
@@ -2371,6 +2382,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 +2468,16 @@
     return ret;
 }
 	
+
+// -----------------------------------------------------------------------------
+// IsReadOnly()
+// -----------------------------------------------------------------------------
+//
+TBool CThumbnailStore::IsReadOnly()
+    {
+    return iReadOnly;
+    }
+
 // -----------------------------------------------------------------------------
 // PrepareBlacklistedItemsForRetryL()
 // -----------------------------------------------------------------------------
@@ -2480,6 +2508,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 +2605,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 +2733,7 @@
 //
 TInt CThumbnailStore::CheckDbState()
     {
-    if (iUnrecoverable)
+    if (iUnrecoverable && !iReadOnly)
         {
         TN_DEBUG1( "CThumbnailStore::CheckDbState() - database in unrecoverable state" );
         __ASSERT_DEBUG( !iUnrecoverable, ThumbnailPanic( EThumbnailDatabaseUnrecoverable ));
@@ -2723,6 +2763,11 @@
 
 TBool CThumbnailStore::IsDiskFull()
     {
+    if(iReadOnly)
+        {
+        TN_DEBUG1( "CThumbnailStore::IsDiskFull() read only, skip..." );
+        return EFalse;
+        }
     return iDiskFull;
     }
 
@@ -2734,6 +2779,12 @@
     {
     TN_DEBUG2( "CThumbnailStore::ActivityChanged() aActive == %d", aActive);
     
+    if( iReadOnly )
+        {
+        TN_DEBUG1( "CThumbnailStore::ActivityChanged() read only, skip..." );
+        return;
+        }
+    
     if( aActive )
         {
         iIdle = EFalse;
--- a/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailtaskprocessor.cpp	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/thumbnailtaskprocessor.cpp	Wed Aug 18 10:05:55 2010 +0300
@@ -105,7 +105,7 @@
        iPeriodicTimer->Cancel();
        }
     delete iPeriodicTimer;
-    
+    iPeriodicTimer = NULL;
     }
 
 
@@ -155,6 +155,7 @@
                 {
                 // Remove task from queue
                 delete task;
+                task = NULL;
                 iTasks.Remove( i );
                 
                 TN_DEBUG2( "CThumbnailTaskProcessor::RemoveTask() - removed request ID: %d", aRequestId.iRequestId);
@@ -164,6 +165,7 @@
                 // Task is already running, canceled first
                 task->Cancel();
                 delete task;
+                task = NULL;
                 iTasks.Remove( i );
                 cancel = ETrue;
                 
@@ -207,6 +209,7 @@
     for ( TInt i = iTasks.Count(); --i >= 0; )
         {
         CThumbnailTask* task = iTasks[i];
+        
         if ( task->RequestId().iSession == aSession)
             {
             if ( task->State() != CThumbnailTask::ERunning )
@@ -215,6 +218,7 @@
                 
                 // Remove task from queue
                 delete task;
+                task = NULL;
                 iTasks.Remove( i );
                 
                 TN_DEBUG2( "CThumbnailTaskProcessor::RemoveTasks() - removed request ID: %d", id);
@@ -228,6 +232,7 @@
                 // Task is already running, canceled first
                 task->Cancel();
                 delete task;
+                task = NULL;
                 iTasks.Remove( i );
                 cancel = ETrue;
                 
@@ -266,6 +271,7 @@
             
             // Remove task from queue
             delete task;
+            task = NULL;
             iTasks.Remove( i );
             
             TN_DEBUG2( "CThumbnailTaskProcessor::RemoveTasks() - removed request ID: %d", id);
@@ -279,6 +285,7 @@
             // Task is already running, canceled first
             task->Cancel();
             delete task;
+            task = NULL;
             iTasks.Remove( i );
             cancel = ETrue;
             
@@ -342,6 +349,7 @@
             {
             // Delete completed task
             delete task;
+            task = NULL;
             iTasks.Remove( i );
             }
         else
--- a/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/tmgetimei.cpp	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbnailserver/src/tmgetimei.cpp	Wed Aug 18 10:05:55 2010 +0300
@@ -45,6 +45,7 @@
     Cancel();
 
     delete iTelephony;
+    iTelephony = NULL;
     }
 
 TBuf<KImeiBufferSize> CTMGetImei::GetIMEI()
--- a/imagehandlingutilities/thumbnailmanager/tmiadrestart/src/tmiadrestart.cpp	Tue Jul 06 14:37:18 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/tmiadrestart/src/tmiadrestart.cpp	Wed Aug 18 10:05:55 2010 +0300
@@ -150,6 +150,7 @@
     TRAP(err, MainL());
 
     delete cleanup;
+    cleanup = NULL;
     __UHEAP_MARKEND;
     return err;
     }