imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagprocessor.cpp
branchRCL_3
changeset 58 9e8b0cc88842
parent 50 60bb012f1157
--- a/imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagprocessor.cpp	Wed Sep 15 12:32:44 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagprocessor.cpp	Wed Oct 13 14:53:56 2010 +0300
@@ -105,6 +105,9 @@
 	//start foreground generation observer
     iForegroundGenerationObserver = CTMRPropertyObserver::NewL( *this, KTAGDPSNotification, KForceBackgroundGeneration, ETrue );  
     
+    //itemsLeft observer
+    iItemsLeftObserver = CTMRPropertyObserver::NewL( *this, KTAGDPSNotification, KItemsleft, EFalse ); 
+    
     TN_DEBUG1( "CThumbAGProcessor::ConstructL() - end" );
     }
 
@@ -182,6 +185,12 @@
         iForegroundGenerationObserver = NULL;
         }
     
+    if(iItemsLeftObserver)
+        {
+        delete iItemsLeftObserver;
+        iItemsLeftObserver = NULL;
+        }
+    
     if(iFormatObserver)
         {
         delete iFormatObserver;
@@ -958,43 +967,39 @@
     
     CMdEObjectDef& objDef = iDefNamespace->GetObjectDefL( MdeConstants::Object::KBaseObject );
     iQuery = iMdESession->NewObjectQueryL( *iDefNamespace, objDef, this );
-	
-	if(iQuery)
-		{
-	    iQuery->SetResultMode( EQueryResultModeItem );
+    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();
     
     TN_DEBUG1( "CThumbAGProcessor::QueryL() - end" );
     }
@@ -1040,28 +1045,25 @@
     CMdEObjectDef& objDef = iDefNamespace->GetObjectDefL( MdeConstants::Object::KBaseObject);
     iQueryPlaceholders = iMdESession->NewObjectQueryL( *iDefNamespace, objDef, this );
         
-    if(iQueryPlaceholders)
-        {
-        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);   
-        }
-	
+    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);   
+   
     TN_DEBUG1( "CThumbAGProcessor::QueryPlaceholdersL - end" );
     }
 
@@ -1295,52 +1297,6 @@
 
         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 )
@@ -1366,6 +1322,54 @@
         
         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");
@@ -1692,7 +1696,7 @@
         }
     
     //check if forced run needs to continue
-    if ( (iModifyItemCount > 0 || iDeleteItemCount > 0 ||  iUnknownItemCount > 0) && !iMountTimer->IsActive())
+    if ( ( iModifyItemCount || iUnknownItemCount > 0 )  && !iMountTimer->IsActive())
         {
         TN_DEBUG1( "CThumbAGProcessor::ActivateAO() -  forced run");
         SetForceRun( ETrue );
@@ -1885,9 +1889,11 @@
     CMdELogicCondition& rootCondition = iQueryAllItems->Conditions();
     rootCondition.SetOperator( ELogicConditionOperatorOr );
     
-    rootCondition.AddObjectConditionL(imageObjDef);   
-    rootCondition.AddObjectConditionL(videoObjDef);   
-    rootCondition.AddObjectConditionL(audioObjDef);
+    CMdEObjectCondition& imageObjectCondition = rootCondition.AddObjectConditionL(imageObjDef);
+    
+    CMdEObjectCondition& videoObjectCondition = rootCondition.AddObjectConditionL(videoObjDef);
+    
+    CMdEObjectCondition& audioObjectCondition = rootCondition.AddObjectConditionL(audioObjDef);
     
     iQueryAllItems->FindL(KMaxTInt, KMaxQueryBatchSize);  
     
@@ -2052,6 +2058,15 @@
             iForegroundRun = EFalse;
             }
         }
+    else if(aPropertyKey == KItemsleft && aKeyCategory == KTAGDPSNotification )
+        {
+        if( aError == KErrNone && aValue != iPreviousItemsLeft)
+            {
+            TN_DEBUG1( "CThumbAGProcessor::RPropertyNotification() - itemsLeft changed outside Daemon" );
+            iPreviousItemsLeft = aValue;
+            ActivateAO();
+            }
+        }
     }
 
 // ---------------------------------------------------------------------------