diff -r f759b6186ab5 -r 2b4b06654caa imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagprocessor.cpp --- a/imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagprocessor.cpp Thu Jul 15 18:59:26 2010 +0300 +++ b/imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagprocessor.cpp Thu Aug 19 10:13:51 2010 +0300 @@ -958,39 +958,43 @@ CMdEObjectDef& objDef = iDefNamespace->GetObjectDefL( MdeConstants::Object::KBaseObject ); iQuery = iMdESession->NewObjectQueryL( *iDefNamespace, objDef, this ); - iQuery->SetResultMode( EQueryResultModeItem ); + + if(iQuery) + { + 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" ); } @@ -1036,25 +1040,33 @@ CMdEObjectDef& objDef = iDefNamespace->GetObjectDefL( MdeConstants::Object::KBaseObject); iQueryPlaceholders = iMdESession->NewObjectQueryL( *iDefNamespace, objDef, this ); - 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); - + if(iQueryPlaceholders) + { + iQueryPlaceholders->SetResultMode( EQueryResultModeItem ); + + CMdELogicCondition& rootCondition = iQueryPlaceholders->Conditions(); + rootCondition.SetOperator( ELogicConditionOperatorOr ); + + CMdEObjectCondition& imagePHObjectCondition = rootCondition.AddObjectConditionL(imageObjDef); + CleanupStack::PushL( &imagePHObjectCondition ); + imagePHObjectCondition.SetPlaceholderOnly( ETrue ); + imagePHObjectCondition.SetNotPresent( aPresent ); + + CMdEObjectCondition& videoPHObjectCondition = rootCondition.AddObjectConditionL(videoObjDef); + CleanupStack::PushL( &videoPHObjectCondition ); + videoPHObjectCondition.SetPlaceholderOnly( ETrue ); + videoPHObjectCondition.SetNotPresent( aPresent ); + + CMdEObjectCondition& audioPHObjectCondition = rootCondition.AddObjectConditionL(audioObjDef); + CleanupStack::PushL( &audioPHObjectCondition ); + audioPHObjectCondition.SetPlaceholderOnly( ETrue ); + audioPHObjectCondition.SetNotPresent( aPresent ); + + iQueryPlaceholders->FindL(KMaxTInt, KMaxQueryBatchSize); + + CleanupStack::Pop(3, &imagePHObjectCondition ); + } + TN_DEBUG1( "CThumbAGProcessor::QueryPlaceholdersL - end" ); } @@ -1183,7 +1195,7 @@ } #endif - if( iForceRun || iForegroundRun ) + if( (iForceRun || iForegroundRun ) && !iMountTimer->IsActive() ) { TN_DEBUG1( "void CThumbAGProcessor::RunL() skip idle detection!"); CancelTimeout(); @@ -1288,6 +1300,52 @@ 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= 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 ) @@ -1313,54 +1371,6 @@ 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= 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"); @@ -1687,8 +1697,9 @@ } //check if forced run needs to continue - if ( iModifyItemCount || iUnknownItemCount > 0 ) + if ( (iModifyItemCount > 0 || iDeleteItemCount > 0 || iUnknownItemCount > 0) && !iMountTimer->IsActive()) { + TN_DEBUG1( "CThumbAGProcessor::ActivateAO() - forced run"); SetForceRun( ETrue ); } else @@ -1697,7 +1708,7 @@ SetForceRun( EFalse ); } - if( !IsActive() && !iShutdown && ((iActiveCount == 0 && !iQueryActive) || iForceRun )) + if( !IsActive() && !iShutdown && ((iActiveCount < KMaxDaemonRequests && !iQueryActive) || iForceRun )) { TN_DEBUG1( "CThumbAGProcessor::ActivateAO() - Activated"); SetActive(); @@ -1880,12 +1891,17 @@ rootCondition.SetOperator( ELogicConditionOperatorOr ); CMdEObjectCondition& imageObjectCondition = rootCondition.AddObjectConditionL(imageObjDef); + CleanupStack::PushL( &imageObjectCondition ); CMdEObjectCondition& videoObjectCondition = rootCondition.AddObjectConditionL(videoObjDef); + CleanupStack::PushL( &videoObjectCondition ); CMdEObjectCondition& audioObjectCondition = rootCondition.AddObjectConditionL(audioObjDef); + CleanupStack::PushL( &audioObjectCondition ); iQueryAllItems->FindL(KMaxTInt, KMaxQueryBatchSize); + + CleanupStack::Pop(3, &imageObjectCondition); TN_DEBUG1( "CThumbAGProcessor::QueryAllItemsL - end" ); } @@ -2018,8 +2034,11 @@ TN_DEBUG2( "CThumbAGProcessor::FormatNotification(%d)", aFormat ); iFormatting = aFormat; + if(!aFormat) { + //force update + UpdatePSValues(EFalse, ETrue); ActivateAO(); } } @@ -2128,9 +2147,11 @@ } } + TN_DEBUG2( "CThumbAGProcessor::UpdatePSValues() iPreviousItemsLeft == %d", iPreviousItemsLeft); + if( itemsLeft != iPreviousItemsLeft) { - TN_DEBUG2( "CThumbAGProcessor::UpdatePSValues() update KItemsleft == %d", itemsLeft); + TN_DEBUG2( "CThumbAGProcessor::UpdatePSValues() Set KItemsleft == %d", itemsLeft); iPreviousItemsLeft = itemsLeft; TInt ret = RProperty::Set(KTAGDPSNotification, KItemsleft, itemsLeft );