diff -r 1abfa342db42 -r 367228f82b66 harvesterplugins/media/mediautils/src/mdeobjectqueuemanager.cpp --- a/harvesterplugins/media/mediautils/src/mdeobjectqueuemanager.cpp Tue Sep 28 11:50:55 2010 +0530 +++ b/harvesterplugins/media/mediautils/src/mdeobjectqueuemanager.cpp Tue Oct 05 13:32:14 2010 +0530 @@ -75,6 +75,7 @@ { CActiveScheduler::Add(this); User::LeaveIfError(iTimer.CreateLocal()); + iHState = EStateResume; } // ----------------------------------------------------------------------------- @@ -84,32 +85,8 @@ void CMdeObjectQueueManager::AddMdeItemToQueueL( TItemId aMsgId, TCPixActionType aActionType) { - OverWriteOrAddToQueueL(aMsgId,aActionType); - // Check the size against maximum queue size - if (iJobQueue.Count() > INDEXING_QUEUE_MAX) - { - // Maximum is exceeded, force the write immediately - if (iState == EStateWaiting) - { - iTimer.Cancel(); // RunL will be called with iStatus of KErrCancelled - } - else if (iState == EStateNone) - { - SetActive(); - TRequestStatus* status = &iStatus; - User::RequestComplete(status, KErrNone); // RunL will be called with iStatus of KErrNone - } - } - else - { - // Maximum is not exceeded, keep waiting - if (iState == EStateNone) - { - iState = EStateWaiting; - iTimer.After(iStatus, INDEXING_DELAY); // Wait 5 seconds before putting this to index - SetActive(); - } - } + OverWriteOrAddToQueueL(aMsgId,aActionType); + ActivateAO(); } // ----------------------------------------------------------------------------- @@ -137,6 +114,38 @@ iJobQueue.AppendL(object); } +void CMdeObjectQueueManager::ActivateAO() + { + // Proceed only if the plugin is not in pause state + if ( iHState == EStateResume ) + { + // Check the size against maximum queue size + if (iJobQueue.Count() > INDEXING_QUEUE_MAX) + { + // Maximum is exceeded, force the write immediately + if (iState == EStateWaiting) + { + iTimer.Cancel(); // RunL will be called with iStatus of KErrCancelled + } + else if (iState == EStateNone) + { + SetActive(); + TRequestStatus* status = &iStatus; + User::RequestComplete(status, KErrNone); // RunL will be called with iStatus of KErrNone + } + } + else + { + // Maximum is not exceeded, keep waiting + if (iState == EStateNone) + { + iState = EStateWaiting; + iTimer.After(iStatus, INDEXING_DELAY); // Wait 5 seconds before putting this to index + SetActive(); + } + } + } + } // ----------------------------------------------------------------------------- // CCPixIndexerUtils::RunL() // ----------------------------------------------------------------------------- @@ -144,7 +153,14 @@ void CMdeObjectQueueManager::RunL() { CPIXLOGSTRING("START CMdeObjectQueueManager::RunL"); - while (iJobQueue.Count()>0) + + if ( iHState == EStatePause ) + { + iState = EStateNone; + CPIXLOGSTRING("END CMdeObjectQueueManager::RunL as Harvester in Pause state"); + return; + } + while (iJobQueue.Count()>0 ) { TMdeActionRecord object = iJobQueue[0]; //iJobQueue.Remove(0); @@ -194,4 +210,23 @@ { return KErrNone; } + +// ----------------------------------------------------------------------------- +// CCPixIndexerUtils::PauseL() +// ----------------------------------------------------------------------------- +// +void CMdeObjectQueueManager::PauseL() + { + iHState = EStatePause; + } +// ----------------------------------------------------------------------------- +// CCPixIndexerUtils::ResumeL() +// ----------------------------------------------------------------------------- +// +void CMdeObjectQueueManager::ResumeL() + { + iHState = EStateResume; + ActivateAO(); + } + //End of file