diff -r 4bdfb6b5c9b4 -r b67379558a75 imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagprocessor.cpp --- a/imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagprocessor.cpp Wed Jun 23 18:33:48 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagprocessor.cpp Tue Jul 06 14:37:18 2010 +0300 @@ -83,7 +83,7 @@ // set auto create values from cenrep CheckAutoCreateValuesL(); - iPeriodicTimer = CPeriodic::NewL(CActive::EPriorityIdle); + iPeriodicTimer = CPeriodic::NewL(CActive::EPriorityStandard); iMountTimer = CPeriodic::NewL(CActive::EPriorityUserInput); @@ -608,7 +608,7 @@ item.iItemId = aIDArray[i]; item.iItemType = aItemType; - SetGenerationItemType(item, aItemType); + SetGenerationItemAction(item, aItemType); if(iPHHarvesting) { @@ -629,6 +629,7 @@ { TThumbnailGenerationItem item; item.iItemId = aIDArray[i]; + item.iItemType = aItemType; TInt itemIndex = iGenerationQueue.FindInOrder(item, Compare); @@ -642,7 +643,7 @@ TN_DEBUG1( "CThumbAGProcessor::AddToQueueL() - append"); item.iPlaceholder = EFalse; - SetGenerationItemType( item, 0 ); + SetGenerationItemAction( item, aItemType ); AppendProcessingQueue( item ); } } @@ -657,6 +658,7 @@ { TThumbnailGenerationItem item; item.iItemId = aIDArray[i]; + item.iItemType = aItemType; itemIndex = iGenerationQueue.FindInOrder(item, Compare); @@ -677,7 +679,7 @@ else { TN_DEBUG1( "CThumbAGProcessor::AddToQueueL() - append"); - SetGenerationItemType( item, 0 ); + SetGenerationItemAction( item, aItemType); item.iPlaceholder = EFalse; AppendProcessingQueue( item ); } @@ -692,6 +694,7 @@ { TThumbnailGenerationItem item; item.iItemId = aIDArray[i]; + item.iItemType = aItemType; TInt itemIndex = iGenerationQueue.FindInOrder(item, Compare); @@ -998,7 +1001,7 @@ // --------------------------------------------------------------------------- // -void CThumbAGProcessor::QueryPlaceholdersL() +void CThumbAGProcessor::QueryPlaceholdersL(TBool aPresent) { TN_DEBUG1( "CThumbAGProcessor::QueryPlaceholdersL" ); @@ -1040,15 +1043,15 @@ CMdEObjectCondition& imagePHObjectCondition = rootCondition.AddObjectConditionL(imageObjDef); imagePHObjectCondition.SetPlaceholderOnly( ETrue ); - imagePHObjectCondition.SetNotPresent( ETrue ); + imagePHObjectCondition.SetNotPresent( aPresent ); CMdEObjectCondition& videoPHObjectCondition = rootCondition.AddObjectConditionL(videoObjDef); videoPHObjectCondition.SetPlaceholderOnly( ETrue ); - videoPHObjectCondition.SetNotPresent( ETrue ); + videoPHObjectCondition.SetNotPresent( aPresent ); CMdEObjectCondition& audioPHObjectCondition = rootCondition.AddObjectConditionL(audioObjDef); audioPHObjectCondition.SetPlaceholderOnly( ETrue ); - audioPHObjectCondition.SetNotPresent( ETrue ); + audioPHObjectCondition.SetNotPresent( aPresent ); iQueryPlaceholders->FindL(KMaxTInt, KMaxQueryBatchSize); @@ -1087,7 +1090,8 @@ iGenerationQueue.Reset(); iQueryQueue.Reset(); - TRAP_IGNORE(QueryPlaceholdersL()); + //query all not present placeholders + TRAP_IGNORE(QueryPlaceholdersL( ETrue )); //query all items after PH query iDoQueryAllItems = ETrue; TN_DEBUG1( "CThumbAGProcessor::RunL() - Initialisation 1 done" ); @@ -1112,7 +1116,7 @@ if( err == KErrNone ) { TN_DEBUG1( "CThumbAGProcessor::RunL() add iHarvesterClient observer"); - err = iHarvesterClient.AddHarvesterEventObserver( *this, EHEObserverTypeOverall | EHEObserverTypeMMC | EHEObserverTypePlaceholder, 10 ); + err = iHarvesterClient.AddHarvesterEventObserver( *this, EHEObserverTypeOverall | EHEObserverTypeMMC | EHEObserverTypePlaceholder, 20 ); TN_DEBUG2( "CThumbAGProcessor::RunL() iHarvesterClient observer err = %d", err); if( !err ) @@ -1213,7 +1217,9 @@ { TInt err(KErrNone); //if force or non forced - if((iForceRun && iModify ) || (!iForceRun && !iModify )) + //if unknown items or mount timer is active, abort processing + + if(((iForceRun && iModify ) || (!iForceRun && !iModify )) && !iUnknownItemCount && !iMountTimer->IsActive()) { TN_DEBUG1( "CThumbAGProcessor::RunL() - iQueryReady START" ); @@ -1239,7 +1245,8 @@ //force is coming, but executing non-forced query complete-> cancel old else { - //cancel query and move items back to original processing queue + //cancel query + TN_DEBUG1( "CThumbAGProcessor::RunL() - cancel processing query" ); DeleteAndCancelQuery( ETrue ); ActivateAO(); return; @@ -1483,7 +1490,9 @@ else { TN_DEBUG1( "CThumbAGProcessor::HarvestingUpdated -- MDS placeholder harvesting finished"); - TRAP_IGNORE(QueryPlaceholdersL()); + //query present placeholders + TRAP_IGNORE(QueryPlaceholdersL( EFalse )); + iDoQueryAllItems = EFalse; iPHHarvestingItemsLeftTemp = 0; } } @@ -1584,6 +1593,11 @@ } else { + //activate timeout if overall harvesting is not active + if(!iHarvesting) + { + StartTimeout(); + } TN_DEBUG1( "CThumbAGProcessor::HarvestingUpdated -- MDS MMC harvesting finished "); } } @@ -1629,6 +1643,7 @@ // void CThumbAGProcessor::CancelTimeout() { + TN_DEBUG1( "CThumbAGProcessor::CancelTimeout()"); if(iPeriodicTimer->IsActive()) { iPeriodicTimer->Cancel(); @@ -1671,7 +1686,6 @@ return; } - //check if forced run needs to continue if ( iModifyItemCount || iUnknownItemCount > 0 ) { @@ -2097,6 +2111,10 @@ { daemonProcessing = ETrue; } + else + { + daemonProcessing = EFalse; + } if( daemonProcessing != iPreviousDaemonProcessing) { @@ -2156,7 +2174,7 @@ for(TInt i=0; i < iGenerationQueue.Count(); i++) { - TThumbnailGenerationItem& item = iGenerationQueue[i]; + TThumbnailGenerationItem& item = iGenerationQueue[i]; if(item.iItemAction == EGenerationItemActionModify) { @@ -2204,6 +2222,8 @@ TN_DEBUG2( "CThumbAGProcessor::UpdateItemCounts() iActiveCount = %d", iActiveCount); + TN_DEBUG2( "CThumbAGProcessor::UpdateItemCounts() iPreviousItemsLeft = %d", + iPreviousItemsLeft); TN_DEBUG5( "CThumbAGProcessor::UpdateItemCounts() iHarvesting == %d, iMMCHarvesting == %d, iPHHarvesting == %d, iMPXHarvesting == %d", iHarvesting, iMMCHarvesting, iPHHarvesting, iMPXHarvesting); TN_DEBUG5( "CThumbAGProcessor::UpdateItemCounts() iIdle = %d, iForegroundRun = %d, timer = %d, iForceRun = %d", @@ -2211,7 +2231,7 @@ TN_DEBUG4( "CThumbAGProcessor::UpdateItemCounts() iModify = %d, iQueryReady = %d, iProcessingCount = %d", iModify, iQueryReady, iProcessingCount); TN_DEBUG2( "CThumbAGProcessor::UpdateItemCounts() iMountTimer = %d", iMountTimer->IsActive()); - TN_DEBUG3( "CThumbAGProcessor::UpdateItemCounts() ProcessingQueue = %d, iQueryQueue = %d", + TN_DEBUG3( "CThumbAGProcessor::UpdateItemCounts() iGenerationQueue = %d, iQueryQueue = %d", iGenerationQueue.Count(), iQueryQueue.Count()); TN_DEBUG5( "CThumbAGProcessor::UpdateItemCounts() iAddItemCount=%d, i2ndAddItemCount=%d, iModifyItemCount=%d, iDeleteItemCount=%d", iAddItemCount, i2ndAddItemCount, iModifyItemCount, iDeleteItemCount ); @@ -2220,6 +2240,17 @@ TN_DEBUG4( "CThumbAGProcessor::UpdateItemCounts() iAudioItemCount=%d, iVideoItemCount=%d, iImageItemCount=%d", iAudioItemCount, iVideoItemCount, iImageItemCount); TN_DEBUG2( "CThumbAGProcessor::UpdateItemCounts() iCameraItemCount=%d", iCameraItemCount); + + //compress queues when empty + if(!iGenerationQueue.Count()) + { + iGenerationQueue.Compress(); + } + + if(!iQueryQueue.Count()) + { + iQueryQueue.Compress(); + } } @@ -2233,6 +2264,12 @@ CThumbAGProcessor* self = static_cast( aAny ); self->iMountTimer->Cancel(); + + //activate timeout if overall or mmc harvestig is not active + if(!self->iHarvesting && !self->iMMCHarvesting ) + { + self->ActivateAO(); + } return KErrNone; // Return value ignored by CPeriodic }