imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagprocessor.cpp
changeset 17 ffa62e555b02
parent 15 7197e789b953
child 19 b790c5b3d11f
--- a/imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagprocessor.cpp	Fri Apr 16 15:16:16 2010 +0300
+++ b/imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagprocessor.cpp	Mon May 03 12:48:51 2010 +0300
@@ -201,11 +201,62 @@
 // CThumbAGProcessor::HandleQueryNewResults()
 // -----------------------------------------------------------------------------
 //
-void CThumbAGProcessor::HandleQueryNewResults( CMdEQuery& /*aQuery*/,
-                                               const TInt /*aFirstNewItemIndex*/,
-                                               const TInt /*aNewItemCount*/ )
+void CThumbAGProcessor::HandleQueryNewResults( CMdEQuery& aQuery,
+                                               const TInt aFirstNewItemIndex,
+                                               const TInt aNewItemCount )
     {
-    // No implementation required
+    // PH & AllItems query results are handled here
+    if (aNewItemCount > 0)
+        {
+        if(&aQuery == iQueryPlaceholders)
+            {
+            TN_DEBUG2( "CThumbAGProcessor::HandleQueryNewResults - iQueryPlaceholders, %d new", aNewItemCount);
+            
+            for(TInt i = aFirstNewItemIndex; i < iQueryPlaceholders->Count(); i++)
+                {    
+                const CMdEObject* object = &iQueryPlaceholders->Result(i);
+              
+                if(!object)
+                    {
+                    continue;
+                    }
+              
+                if(!object->Placeholder())
+                    {
+                    TN_DEBUG2( "CThumbAGProcessor::HandleQueryNewResults %d not placeholder", object->Id());
+                    continue;
+                    }
+               
+                // ignore if fails
+                iPlaceholderQueue.InsertInOrder(object->Id(), Compare);               
+                }  
+            }
+        else if(&aQuery == iQueryAllItems)
+            {
+            TN_DEBUG2( "CThumbAGProcessor::HandleQueryNewResults - QueryAllItems, %d new", aNewItemCount);
+    
+            for(TInt i = aFirstNewItemIndex; i < iQueryAllItems->Count(); i++)
+                {    
+                const CMdEObject* object = &iQueryAllItems->Result(i);
+               
+                if(!object)
+                    {
+                    continue;
+                    }
+               
+                if (iAddQueue.FindInOrder(object->Id(), Compare) == KErrNotFound && 
+                    iModifyQueue.FindInOrder(object->Id(), Compare) == KErrNotFound )
+                    {
+                    // ignore if fails
+                    iAddQueue.InsertInOrder(object->Id(), Compare);
+                    }
+                }
+            }    
+        }
+    else
+        {
+        TN_DEBUG1( "CThumbAGProcessor::HandleQueryNewResults - error, no new items");
+        }
     }
 
 // -----------------------------------------------------------------------------
@@ -221,67 +272,28 @@
         TN_DEBUG1( "CThumbAGProcessor::HandleQueryCompleted - iQueryPlaceholders completed");
         
         iPlaceholderQueue.Reset();
-        // if no errors in query
-        if (aError == KErrNone )
+        
+        //free query
+        delete iQueryPlaceholders;
+        iQueryPlaceholders = NULL;
+       
+        if(iDoQueryAllItems)
             {
-            for(TInt i = 0; i < iQueryPlaceholders->Count(); i++)
-               {    
-               const CMdEObject* object = &iQueryPlaceholders->Result(i);
-              
-               if(!object)
-                   {
-                   continue;
-                   }
-              
-               if(!object->Placeholder())
-                   {
-                   TN_DEBUG2( "CThumbAGProcessor::HandleQueryCompleted %d not placeholder", object->Id());
-                   continue;
-                   }
-              
-               /*if (iPlaceholderQueue.Find( object->Id() ) == KErrNotFound)
-                   {
-                   TN_DEBUG2( "CThumbAGProcessor::HandleQueryCompleted %d added to placeholder queue", object->Id());*/
-                   TRAP_IGNORE( iPlaceholderQueue.AppendL( object->Id() )); 
-                 //}
-               }
-           }
-           delete iQueryPlaceholders;
-           iQueryPlaceholders = NULL;
-           
-           if(iDoQueryAllItems)
-               {
-               iDoQueryAllItems = EFalse;
-               TRAP_IGNORE(QueryAllItemsL());
-               }
+            iDoQueryAllItems = EFalse;
+            TRAP_IGNORE(QueryAllItemsL());
+            }
         }
     else if(&aQuery == iQueryAllItems)
         {
         TN_DEBUG1( "CThumbAGProcessor::HandleQueryCompleted - QueryAllItems completed");
-        // if no errors in query
-        if (aError == KErrNone )
-            {
-            for(TInt i = 0; i < iQueryAllItems->Count(); i++)
-                {    
-                const CMdEObject* object = &iQueryAllItems->Result(i);
-               
-                if(!object)
-                    {
-                    continue;
-                    }
-               
-                if (iAddQueue.Find( object->Id() ) == KErrNotFound && iModifyQueue.Find( object->Id()) == KErrNotFound  )
-                    {
-                    TRAP_IGNORE( iAddQueue.AppendL( object->Id() ));
-                    }
-                }
+
 #ifdef _DEBUG
 TN_DEBUG2( "CThumbAGProcessor::HandleQueryCompleted IN-COUNTERS---------- Amount: %d, Add",iQueryAllItems->Count());
 #endif
-            }
-            //free query
-            delete iQueryAllItems;
-            iQueryAllItems = NULL;
+       
+        //free query
+        delete iQueryAllItems;
+        iQueryAllItems = NULL;
         }
     else if(&aQuery == iQuery )
         {
@@ -302,7 +314,7 @@
                 {
                 TN_DEBUG1( "CThumbAGProcessor::HandleQueryCompleted() some result items missing");
                 
-                RArray<TItemId> iQueryQueueDelta;
+                RArray<TItemId> queryQueueDelta;
                 
                 TInt itemIndex(KErrNotFound);
                 
@@ -324,23 +336,26 @@
                      if(!found)
                          {
                          TN_DEBUG2( "CThumbAGProcessor::HandleQueryCompleted() missing from results item %d", iQueryQueue[queryItem] );
-                         iQueryQueueDelta.Append( iQueryQueue[queryItem] );
+                         
+                         // ignore if fails
+                         queryQueueDelta.InsertInOrder(iQueryQueue[queryItem], Compare);
                          }
                      }
                  
-                 TN_DEBUG2( "CThumbAGProcessor::HandleQueryCompleted() missing items total count %d", iQueryQueueDelta.Count()); 
+                 TN_DEBUG2( "CThumbAGProcessor::HandleQueryCompleted() missing items total count %d", queryQueueDelta.Count()); 
                  //cleanup from previous queue it item is not found from MDS
-                 while(iQueryQueueDelta.Count())
+                 while(queryQueueDelta.Count())
                      {
-                     itemIndex = iLastQueue->Find(iQueryQueueDelta[0]);
+                     itemIndex = iLastQueue->FindInOrder(queryQueueDelta[0], Compare);
+                     
                      if(itemIndex >= 0)
                          {
                          TN_DEBUG2( "CThumbAGProcessor::HandleQueryCompleted() remove items %d", iQueryQueue[0]);
                          iLastQueue->Remove( itemIndex );
                          }
-                     iQueryQueueDelta.Remove(0);
+                     queryQueueDelta.Remove(0);
                      }
-                 iQueryQueueDelta.Close();
+                 queryQueueDelta.Close();
                 }
             
             // no results, reset query
@@ -354,23 +369,8 @@
             }
         else
             {
-            TInt itemIndex(KErrNotFound);
-            
-            //cleanup current queue
-            while(iQueryQueue.Count())
-                {
-                itemIndex = iLastQueue->Find(iQueryQueue[0]);
-                if(itemIndex >= 0)
-                    {
-                    iLastQueue->Remove( itemIndex );
-                    }
-                iQueryQueue.Remove(0);
-                }
-        
-            delete iQuery;
-            iQuery = NULL;
-            iProcessingCount = 0;
-            TN_DEBUG1( "CThumbAGProcessor::HandleQueryCompleted() Query FAILED!");   
+            DeleteAndCancelQuery();
+            TN_DEBUG1( "CThumbAGProcessor::HandleQueryCompleted() Query FAILED!"); 
             }
         }
     else
@@ -479,9 +479,10 @@
         for (int i=0; i<aIDArray.Count(); i++)
             {
             // do not to append to Add queue if exist already in Add or 2nd Add queue (just processed)     
-            if (iAddQueue.Find( aIDArray[i] ) == KErrNotFound && i2ndRoundGenerateQueue.Find( aIDArray[i] ) == KErrNotFound)
+            if (iAddQueue.FindInOrder(aIDArray[i], Compare) == KErrNotFound && 
+                i2ndRoundGenerateQueue.FindInOrder(aIDArray[i], Compare) == KErrNotFound)
                 {
-                iAddQueue.AppendL(aIDArray[i]);
+                User::LeaveIfError(iAddQueue.InsertInOrder(aIDArray[i], Compare));    
                 }
             }
         }
@@ -490,12 +491,11 @@
         TN_DEBUG1( "CThumbAGProcessor::AddToQueueL() - ENotifyModify" );
         
         if(iPHHarvesting)
-            {
-        
+            {        
             TN_DEBUG1( "CThumbAGProcessor::AddToQueueL() - PH  harvesting active, treat like add" );
             for (int i=0; i<aIDArray.Count(); i++)
                 {
-                TInt itemIndex = iPlaceholderQueue.Find( aIDArray[i] );
+                TInt itemIndex = iPlaceholderQueue.FindInOrder(aIDArray[i], Compare);
                                 
                 if (itemIndex >= 0)
                     {
@@ -503,10 +503,11 @@
                     iPlaceholderQueue.Remove( itemIndex );
                     }
                 
-                if(iAddQueue.Find( aIDArray[i]) == KErrNotFound && i2ndRoundGenerateQueue.Find( aIDArray[i]))
+                if(iAddQueue.FindInOrder(aIDArray[i], Compare) == KErrNotFound && 
+                   i2ndRoundGenerateQueue.FindInOrder(aIDArray[i], Compare) == KErrNotFound)
                     {
                     TN_DEBUG1( "CThumbAGProcessor::AddToQueueL() - append to add queue");
-                    iAddQueue.Append( aIDArray[i]);
+                    User::LeaveIfError(iAddQueue.InsertInOrder(aIDArray[i], Compare));
                     }
                 }
             }
@@ -518,7 +519,7 @@
             
             for (int i=0; i<aIDArray.Count(); i++)
                 {
-                itemIndex = iPlaceholderQueue.Find( aIDArray[i] );
+                itemIndex = iPlaceholderQueue.FindInOrder(aIDArray[i], Compare);
                 
                 if (itemIndex >= 0)
                     {
@@ -528,7 +529,7 @@
                 else
                     {
                     TN_DEBUG1( "CThumbAGProcessor::AddToQueueL() - real modify");
-                    itemIndex = iAddQueue.Find( aIDArray[i] );
+                    itemIndex = iAddQueue.FindInOrder(aIDArray[i], Compare);
                                     
                     if (itemIndex >= 0)
                         {
@@ -536,9 +537,8 @@
                         iAddQueue.Remove( itemIndex );
                         }
 					else
-						{
-						
-						itemIndex = i2ndRoundGenerateQueue.Find( aIDArray[i] );
+						{						
+						itemIndex = i2ndRoundGenerateQueue.FindInOrder(aIDArray[i], Compare);
                                     
 	                    if (itemIndex >= 0)
 	                        {
@@ -548,7 +548,7 @@
 					}
                     
                     TN_DEBUG1( "CThumbAGProcessor::AddToQueueL() - append to modify queue");
-                    iModifyQueue.AppendL(aIDArray[i]);
+                    User::LeaveIfError(iModifyQueue.InsertInOrder(aIDArray[i], Compare));
                     
                     SetForceRun( ETrue );
                     } 
@@ -562,14 +562,14 @@
             for (int i=0; i<aIDArray.Count(); i++)
                 {
                 // can be removed from Add queue
-                TInt itemIndex = iAddQueue.Find( aIDArray[i] );
+                TInt itemIndex = iAddQueue.FindInOrder(aIDArray[i], Compare);
                 if(itemIndex >= 0)
                     {
                     iAddQueue.Remove(itemIndex);
                     }
     
                 // ..and Modify Queue
-                itemIndex = iModifyQueue.Find( aIDArray[i] );
+                itemIndex = iModifyQueue.FindInOrder(aIDArray[i], Compare);
                 if(itemIndex >= 0)
                     {
                     iModifyQueue.Remove(itemIndex);
@@ -657,15 +657,16 @@
             if(iLastQueue == &iAddQueue || iLastQueue == &iModifyQueue)
                 {
                 TN_DEBUG2( "CThumbAGProcessor::CreateThumbnailsL() - 1st round add/modify, append to 2nd round queue", aObject->Id() );
-                if(i2ndRoundGenerateQueue.Find(aObject->Id()) == KErrNotFound)
+                if(i2ndRoundGenerateQueue.FindInOrder(aObject->Id(), Compare) == KErrNotFound)
                     {
-                    i2ndRoundGenerateQueue.Append( aObject->Id() );
+                    // ignore if fails
+                    i2ndRoundGenerateQueue.InsertInOrder(aObject->Id(), Compare);
                     }
                 }
             
-           if( !(imageObjectDef.Id() == aObject->Def().Id() || videoObjectDef.Id() == aObject->Def().Id()) )
+           if( imageObjectDef.Id() != aObject->Def().Id()  )
                 {
-                TN_DEBUG1( "CThumbAGProcessor::CreateThumbnailsL() 1st round and not image or video, skip");
+                TN_DEBUG1( "CThumbAGProcessor::CreateThumbnailsL() 1st round not image");
                 ActivateAO();
                 return;
                 }
@@ -731,10 +732,11 @@
         
     TN_DEBUG3( "CThumbAGProcessor::QueryL() - fill begin aIDArray == %d, iQueryQueue == %d", aIDArray.Count(), iQueryQueue.Count() );
     
-    for(TInt i=0;i < KMaxQueryItems && i < maxCount; i++)
+    for(TInt i=0; i < KMaxQueryItems && i < maxCount; i++)
         {
-        TN_DEBUG2( "CThumbAGProcessor::QueryL() - fill %d", aIDArray[i] );
-        iQueryQueue.Append( aIDArray[i] );
+        TN_DEBUG2( "CThumbAGProcessor::QueryL() - fill %d", aIDArray[0] );
+        iQueryQueue.InsertInOrder(aIDArray[0], Compare);
+        aIDArray.Remove(0);
         }
     
     TN_DEBUG3( "CThumbAGProcessor::QueryL() - fill end aIDArray == %d, iQueryQueue == %d", aIDArray.Count(), iQueryQueue.Count() );
@@ -836,7 +838,7 @@
     audioPHObjectCondition.SetPlaceholderOnly( ETrue );
     audioPHObjectCondition.SetNotPresent( ETrue );
     
-    iQueryPlaceholders->FindL();  
+    iQueryPlaceholders->FindL(KMaxTInt, KMaxQueryItems2);   
    
     TN_DEBUG1( "CThumbAGProcessor::QueryPlaceholdersL - end" );
     }
@@ -895,7 +897,7 @@
         if(  err == KErrNone )
             {
             TN_DEBUG1( "CThumbAGProcessor::RunL() add iHarvesterClient observer");
-            err = iHarvesterClient.AddHarvesterEventObserver( *this, EHEObserverTypeOverall | EHEObserverTypePlaceholder, KMaxTInt );
+            err = iHarvesterClient.AddHarvesterEventObserver( *this, EHEObserverTypeOverall | EHEObserverTypeMMC | EHEObserverTypePlaceholder, KMaxTInt );
             TN_DEBUG2( "CThumbAGProcessor::RunL() iHarvesterClient observer err = %d", err);
             __ASSERT_DEBUG((err==KErrNone), User::Panic(_L("CThumbAGProcessor::RunL(), !iHarvesterClient "), err));
             }
@@ -967,14 +969,9 @@
       	{
         TN_DEBUG1( "void CThumbAGProcessor::RunL() skip idle detection!");
       	CancelTimeout();
-     	 }
+     	}
   	else
 	    {
-        if(iActivityManager)
-            {
-            iIdle = iActivityManager->IsInactive();
-            }
-	    
         if( !iIdle || iHarvesting || iMPXHarvesting || iPeriodicTimer->IsActive() )
             {
             TN_DEBUG1( "void CThumbAGProcessor::RunL() device not idle");
@@ -1009,17 +1006,17 @@
             const CMdEObject* object = &iQuery->Result( iProcessingCount-1 );
             iProcessingCount--;
             
-            TInt itemIndex = iLastQueue->Find( object->Id());
-            if(itemIndex >= 0)
-                {
-                iLastQueue->Remove(itemIndex);
-                }
-				
-            // process one item at once
             if ( object )
                 {
+                TInt itemIndex = iLastQueue->FindInOrder(object->Id(), Compare);
+                if(itemIndex >= 0)
+                    {
+                    iLastQueue->Remove(itemIndex);
+                    }
+				
+                //process one item at once
                 //remove item from queryQueue when request is issued 
-                itemIndex = iQueryQueue.Find( object->Id());
+                itemIndex = iQueryQueue.FindInOrder(object->Id(), Compare);
                 if(itemIndex >= 0)
                     {
                     iQueryQueue.Remove(itemIndex);
@@ -1033,27 +1030,9 @@
         //force is coming, but executing non-forced query complete-> cancel old
         else
             {
-            TN_DEBUG1( "CThumbAGProcessor::RunL() - deleting query 1" );
-            delete iQuery;
-            iQuery = NULL;
-            iQueryReady = EFalse;
-            iProcessingCount = 0;
-            
-            //move remainig IDs in query queue back to original queue
-            while(iQueryQueue.Count())
-                {
-                if(iLastQueue)
-                    {
-                    if(iLastQueue->Find( iQueryQueue[0]) == KErrNotFound)
-                        {
-                        iLastQueue->Append(iQueryQueue[0]);
-                        }
-                    }
-                iQueryQueue.Remove(0);
-                }
-            iLastQueue = NULL;
-            ActivateAO();
-            return;    
+            DeleteAndCancelQuery();
+	        ActivateAO();
+            return;  
             }
         
         //is last query item
@@ -1071,31 +1050,7 @@
         {
         if(iForceRun && !iModify)
             {
-            if(iQuery)
-                {
-                TN_DEBUG1( "CThumbAGProcessor::RunL() - deleting query 2" );
-                iQuery->Cancel();
-                delete iQuery;
-                iQuery = NULL;
-                }
-
-            iQueryReady = EFalse;
-            iQueryActive = EFalse;
-            
-            //move remainig IDs in query queue back to original queue
-            while(iQueryQueue.Count())
-                {
-                if(iLastQueue)
-                    {
-                    if(iLastQueue->Find( iQueryQueue[0]) == KErrNotFound)
-                        {
-                        iLastQueue->Append(iQueryQueue[0]);
-                        }
-                    }
-                iQueryQueue.Remove(0);
-                }
-            iLastQueue = NULL;
-            
+            DeleteAndCancelQuery();
             ActivateAO();
             }
         else  
@@ -1168,6 +1123,44 @@
     }
 
 // ---------------------------------------------------------------------------
+// CThumbAGProcessor::DeleteAndCancelQuery()
+// ---------------------------------------------------------------------------
+//
+void CThumbAGProcessor::DeleteAndCancelQuery()
+    {
+    TN_DEBUG1( "CThumbAGProcessor::DeleteAndCancelQuery() in" );
+    
+    if(iQuery)
+        {
+        TN_DEBUG1( "CThumbAGProcessor::DeleteAndCancelQuery() - deleting query" );
+        iQuery->Cancel();
+        delete iQuery;
+        iQuery = NULL;
+        }
+    
+    iQueryReady = EFalse;
+    iQueryActive = EFalse;
+    iProcessingCount = 0;
+    
+    //move remainig IDs in query queue back to original queue
+    while(iQueryQueue.Count())
+        {
+        if(iLastQueue)
+            {
+            if(iLastQueue->FindInOrder(iQueryQueue[0], Compare) == KErrNotFound)
+                {
+                //ignore if fails
+                iLastQueue->InsertInOrder(iQueryQueue[0], Compare);
+                }
+            }
+        iQueryQueue.Remove(0);
+        }
+    iLastQueue = NULL;
+    
+    TN_DEBUG1( "CThumbAGProcessor::DeleteAndCancelQuery() out" );
+    }
+
+// ---------------------------------------------------------------------------
 // CThumbAGProcessor::DoCancel()
 // ---------------------------------------------------------------------------
 //
@@ -1268,8 +1261,48 @@
                 }
             }
         }
+    //MMC harvesting
+    else if( aHEObserverType == EHEObserverTypeMMC)
+        {
+        switch(aHarvesterEventState)
+            {
+            case EHEStateStarted:
+            case EHEStateHarvesting:
+            case EHEStatePaused:
+            case EHEStateResumed:
+                {
+                iMMCHarvestingTemp = ETrue;
+                break;
+                }
+            case EHEStateFinished:
+            case EHEStateUninitialized:
+                {
+                iMMCHarvestingTemp = EFalse;
+                break;
+                }
+            };
+        
+        if(iMMCHarvestingTemp != iMMCHarvesting)
+            {
+            iMMCHarvesting = iMMCHarvestingTemp;
+            
+            if( iMMCHarvesting )
+                {
+                TN_DEBUG1( "CThumbAGProcessor::HarvestingUpdated -- MDS MMC harvesterin started");
+                if(iPreviousItemsLeft != KErrNotReady)
+                    {
+                    iPreviousItemsLeft = KErrNotReady;
+                    RProperty::Set(KTAGDPSNotification, KDaemonProcessing, iPreviousItemsLeft);
+                    }
+                }
+            else
+                {
+                TN_DEBUG1( "CThumbAGProcessor::HarvestingUpdated -- MDS MMC harvesting finished ");
+                }
+            }
+        }
    
-    TN_DEBUG3( "CThumbAGProcessor::HarvestingUpdated -- end() iHarvesting == %d, iPHHarvesting == %d ", iHarvesting, iPHHarvesting);
+    TN_DEBUG4( "CThumbAGProcessor::HarvestingUpdated -- end() iHarvesting == %d, iPHHarvesting == %d iMMCHarvesting == %d ", iHarvesting, iPHHarvesting, iMMCHarvesting);
     }
 
 // ---------------------------------------------------------------------------
@@ -1349,13 +1382,6 @@
         return;
         }
         
-    if( !IsActive() )
-        {
-        SetActive();
-        TRequestStatus* statusPtr = &iStatus;
-        User::RequestComplete( statusPtr, KErrNone );
-        }
-    
     //check if forced run needs to continue
     if (iModifyQueue.Count())
         {
@@ -1366,6 +1392,14 @@
         iModify = EFalse;
         SetForceRun( EFalse );
         }
+    
+    if( !IsActive() && ((!iActive && !iQueryActive) || iForceRun ))
+        {
+        TN_DEBUG1( "CThumbAGProcessor::ActivateAO() - Activated");
+        SetActive();
+        TRequestStatus* statusPtr = &iStatus;
+        User::RequestComplete( statusPtr, KErrNone );
+        }
 
     UpdatePSValues();
     }
@@ -1462,32 +1496,28 @@
         {
         TN_DEBUG2( "CThumbAGProcessor::RemoveFromQueues() - %d", aIDArray[i]);
 
-        itemIndex = iPlaceholderQueue.Find( aIDArray[i] );
-                         
+        itemIndex = iPlaceholderQueue.FindInOrder(aIDArray[i], Compare);                        
         if(itemIndex >= 0)
             {
             iPlaceholderQueue.Remove(itemIndex);
             TN_DEBUG1( "CThumbAGProcessor::RemoveFromQueues() - iPlaceholderQueue" );
             }
                 
-        itemIndex = iAddQueue.Find( aIDArray[i] );
-        
+        itemIndex = iAddQueue.FindInOrder(aIDArray[i], Compare);       
         if(itemIndex >= 0)
             {
             iAddQueue.Remove(itemIndex);
             TN_DEBUG1( "CThumbAGProcessor::RemoveFromQueues() - iAddQueue" );
             }
 
-        itemIndex = i2ndRoundGenerateQueue.Find( aIDArray[i] );
-                
+        itemIndex = i2ndRoundGenerateQueue.FindInOrder(aIDArray[i], Compare);               
         if(itemIndex >= 0)
             {
             i2ndRoundGenerateQueue.Remove(itemIndex);
             TN_DEBUG1( "CThumbAGProcessor::RemoveFromQueues() - i2ndRoundGenerateQueue" );
             }
         
-        itemIndex = iModifyQueue.Find( aIDArray[i] );
-         
+        itemIndex = iModifyQueue.FindInOrder(aIDArray[i], Compare);       
         if(itemIndex >= 0)
             {
             iModifyQueue.Remove(itemIndex);
@@ -1499,34 +1529,19 @@
 		        }
             }
             
-        itemIndex = iQueryQueue.Find( aIDArray[i] );
-                     
+        itemIndex = iQueryQueue.FindInOrder(aIDArray[i], Compare);                    
         if(itemIndex >= 0)
             {
             iQueryQueue.Remove(itemIndex);
             TN_DEBUG1( "CThumbAGProcessor::RemoveFromQueues() - iQueryQueue" );
             }
-        
-        itemIndex = iPlaceholderQueue.Find( aIDArray[i] );
-                      
+         
+        itemIndex = iPlaceholderQueue.FindInOrder(aIDArray[i], Compare); 
         if(itemIndex >= 0)
         	{
             iPlaceholderQueue.Remove(itemIndex);
             TN_DEBUG1( "CThumbAGProcessor::RemoveFromQueues() - iPlaceholderQueue" );
             }
-        
-        /*
-        if( aRemoveFromDelete )
-            {
-            itemIndex = iRemoveQueue.Find( aIDArray[i] );
-             
-            if(itemIndex >= 0)
-                {
-                iRemoveQueue.Remove(itemIndex);
-                TN_DEBUG1( "CThumbAGProcessor::RemoveFromQueues() - iRemoveQueue" );
-                continue;
-                }
-            }*/
         }
     
     TN_DEBUG1( "CThumbAGProcessor::RemoveFromQueues() - end" );
@@ -1593,7 +1608,7 @@
     
     CMdEObjectCondition& audioPHObjectCondition = rootCondition.AddObjectConditionL(audioObjDef);
     
-    iQueryAllItems->FindL();  
+    iQueryAllItems->FindL(KMaxTInt, KMaxQueryItems2);  
     
     TN_DEBUG1( "CThumbAGProcessor::QueryAllItemsL - end" );
     }
@@ -1770,12 +1785,20 @@
         daemonProcessing = ETrue;
         }
     
-    //disable 2nd round generarion when there is items in 1st round queues
-    //or 2nd queue is empty 
-    if( !i2ndRoundGenerateQueue.Count() || itemsLeft )
+    //adjust items left to containing also items not yet processed but removed from queue under processing
+    if((iLastQueue == &iModifyQueue || iLastQueue == &iAddQueue) && !i2ndRound)
         {
+        itemsLeft +=iQueryQueue.Count();
+        }
+    
+    //cancel 2nd round generarion when there is items in 1st round queues
+    if(itemsLeft && i2ndRound)
+        {
+        DeleteAndCancelQuery();
         i2ndRound = EFalse;
         }
+        
+    TN_DEBUG2( "CThumbAGProcessor::UpdatePSValues() KItemsleft == %d", itemsLeft);
     
     if(aDefine)
         {
@@ -1803,4 +1826,15 @@
         }
     }
 
+// ---------------------------------------------------------------------------
+// CThumbAGProcessor::Compare
+// Comparison function for logaritmic use of queue arrays
+// ---------------------------------------------------------------------------
+//
+TInt CThumbAGProcessor::Compare(const TItemId& aLeft, const TItemId& aRight)
+    {  
+    return (aLeft - aRight);
+    }
+
+
 // End of file