diff -r dea39715fc05 -r ee674526fac5 imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagprocessor.cpp --- a/imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagprocessor.cpp Wed Mar 31 22:04:49 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagprocessor.cpp Wed Apr 14 16:16: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 iQueryQueueDelta; + RArray 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 @@ -359,7 +374,7 @@ //cleanup current queue while(iQueryQueue.Count()) { - itemIndex = iLastQueue->Find(iQueryQueue[0]); + itemIndex = iLastQueue->FindInOrder(iQueryQueue[0], Compare); if(itemIndex >= 0) { iLastQueue->Remove( itemIndex ); @@ -479,9 +494,10 @@ for (int i=0; i= 0) { @@ -503,10 +518,11 @@ iPlaceholderQueue.Remove( itemIndex ); } - if(iAddQueue.Find( aIDArray[i]) == KErrNotFound && i2ndRoundGenerateQueue.Find( aIDArray[i]) == KErrNotFound ) + 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 +534,7 @@ for (int i=0; i= 0) { @@ -528,7 +544,7 @@ else { TN_DEBUG1( "CThumbAGProcessor::AddToQueueL() - real modify"); - itemIndex = iAddQueue.Find( aIDArray[i] ); + itemIndex = iAddQueue.FindInOrder(aIDArray[i], Compare); if (itemIndex >= 0) { @@ -536,9 +552,8 @@ iAddQueue.Remove( itemIndex ); } else - { - - itemIndex = i2ndRoundGenerateQueue.Find( aIDArray[i] ); + { + itemIndex = i2ndRoundGenerateQueue.FindInOrder(aIDArray[i], Compare); if (itemIndex >= 0) { @@ -548,7 +563,7 @@ } TN_DEBUG1( "CThumbAGProcessor::AddToQueueL() - append to modify queue"); - iModifyQueue.AppendL(aIDArray[i]); + User::LeaveIfError(iModifyQueue.InsertInOrder(aIDArray[i], Compare)); SetForceRun( ETrue ); } @@ -562,14 +577,14 @@ for (int i=0; i= 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,9 +672,10 @@ 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); } } @@ -730,11 +746,11 @@ TInt maxCount = aIDArray.Count(); TN_DEBUG3( "CThumbAGProcessor::QueryL() - fill begin aIDArray == %d, iQueryQueue == %d", aIDArray.Count(), iQueryQueue.Count() ); - + for(TInt i=0;i < KMaxQueryItems && i < maxCount; i++) { TN_DEBUG2( "CThumbAGProcessor::QueryL() - fill %d", aIDArray[i] ); - iQueryQueue.Append( aIDArray[i] ); + iQueryQueue.InsertInOrder(aIDArray[i], Compare); } TN_DEBUG3( "CThumbAGProcessor::QueryL() - fill end aIDArray == %d, iQueryQueue == %d", aIDArray.Count(), iQueryQueue.Count() ); @@ -836,7 +852,7 @@ audioPHObjectCondition.SetPlaceholderOnly( ETrue ); audioPHObjectCondition.SetNotPresent( ETrue ); - iQueryPlaceholders->FindL(); + iQueryPlaceholders->FindL(KMaxTInt, KMaxQueryItems2); TN_DEBUG1( "CThumbAGProcessor::QueryPlaceholdersL - end" ); } @@ -1009,7 +1025,7 @@ const CMdEObject* object = &iQuery->Result( iProcessingCount-1 ); iProcessingCount--; - TInt itemIndex = iLastQueue->Find( object->Id()); + TInt itemIndex = iLastQueue->FindInOrder(object->Id(), Compare); if(itemIndex >= 0) { iLastQueue->Remove(itemIndex); @@ -1019,7 +1035,7 @@ if ( object ) { //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); @@ -1044,9 +1060,10 @@ { if(iLastQueue) { - if(iLastQueue->Find( iQueryQueue[0]) == KErrNotFound) + if(iLastQueue->FindInOrder(iQueryQueue[0], Compare) == KErrNotFound) { - iLastQueue->Append(iQueryQueue[0]); + //ignore if fails + iLastQueue->InsertInOrder(iQueryQueue[0], Compare); } } iQueryQueue.Remove(0); @@ -1087,9 +1104,10 @@ { if(iLastQueue) { - if(iLastQueue->Find( iQueryQueue[0]) == KErrNotFound) + if(iLastQueue->FindInOrder(iQueryQueue[0], Compare) == KErrNotFound) { - iLastQueue->Append(iQueryQueue[0]); + //ignore if fails + iLastQueue->InsertInOrder(iQueryQueue[0], Compare); } } iQueryQueue.Remove(0); @@ -1349,13 +1367,6 @@ return; } - if( !IsActive() ) - { - SetActive(); - TRequestStatus* statusPtr = &iStatus; - User::RequestComplete( statusPtr, KErrNone ); - } - //check if forced run needs to continue if (iModifyQueue.Count()) { @@ -1366,6 +1377,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 +1481,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 +1514,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 +1593,7 @@ CMdEObjectCondition& audioPHObjectCondition = rootCondition.AddObjectConditionL(audioObjDef); - iQueryAllItems->FindL(); + iQueryAllItems->FindL(KMaxTInt, KMaxQueryItems2); TN_DEBUG1( "CThumbAGProcessor::QueryAllItemsL - end" ); } @@ -1811,4 +1811,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