imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagprocessor.cpp
branchRCL_3
changeset 20 2b4b06654caa
parent 19 f759b6186ab5
child 21 6257223ede8a
equal deleted inserted replaced
19:f759b6186ab5 20:2b4b06654caa
   956     
   956     
   957     TN_DEBUG3( "CThumbAGProcessor::QueryL() - fill end iGenerationQueue == %d, iQueryQueue == %d", iGenerationQueue.Count(), iQueryQueue.Count() );
   957     TN_DEBUG3( "CThumbAGProcessor::QueryL() - fill end iGenerationQueue == %d, iQueryQueue == %d", iGenerationQueue.Count(), iQueryQueue.Count() );
   958     
   958     
   959     CMdEObjectDef& objDef = iDefNamespace->GetObjectDefL( MdeConstants::Object::KBaseObject );
   959     CMdEObjectDef& objDef = iDefNamespace->GetObjectDefL( MdeConstants::Object::KBaseObject );
   960     iQuery = iMdESession->NewObjectQueryL( *iDefNamespace, objDef, this );
   960     iQuery = iMdESession->NewObjectQueryL( *iDefNamespace, objDef, this );
   961     iQuery->SetResultMode( EQueryResultModeItem );
   961 	
   962 
   962 	if(iQuery)
   963     CMdELogicCondition& rootCondition = iQuery->Conditions();
   963 		{
   964     rootCondition.SetOperator( ELogicConditionOperatorAnd );
   964 	    iQuery->SetResultMode( EQueryResultModeItem );
   965     
   965 
   966     // add IDs
   966 	    CMdELogicCondition& rootCondition = iQuery->Conditions();
   967     CleanupClosePushL( iQueryQueue );
   967 	    rootCondition.SetOperator( ELogicConditionOperatorAnd );
   968     rootCondition.AddObjectConditionL( iQueryQueue );
   968     
   969     CleanupStack::Pop( &iQueryQueue );
   969 	    // add IDs
   970     
   970 	    CleanupClosePushL( iQueryQueue );
   971     // add object type conditions 
   971 	    rootCondition.AddObjectConditionL( iQueryQueue );
   972     if (!(iModify || iUnknown))
   972 	    CleanupStack::Pop( &iQueryQueue );
   973         {
   973     
   974         CMdELogicCondition& objDefCondition = rootCondition.AddLogicConditionL( ELogicConditionOperatorOr );
   974 	    // add object type conditions 
   975         
   975 	    if (!(iModify || iUnknown))
   976         if (iAutoImage)
   976 	        {
   977             {
   977 	        CMdELogicCondition& objDefCondition = rootCondition.AddLogicConditionL( ELogicConditionOperatorOr );
   978             CMdEObjectDef& imageDef = iDefNamespace->GetObjectDefL( MdeConstants::Image::KImageObject );
   978         
   979             objDefCondition.AddObjectConditionL( imageDef );
   979 	        if (iAutoImage)
   980             }
   980 	            {
   981         if (iAutoVideo)
   981 	            CMdEObjectDef& imageDef = iDefNamespace->GetObjectDefL( MdeConstants::Image::KImageObject );
   982             {
   982 	            objDefCondition.AddObjectConditionL( imageDef );
   983             CMdEObjectDef& videoDef = iDefNamespace->GetObjectDefL( MdeConstants::Video::KVideoObject );
   983 	            }
   984             objDefCondition.AddObjectConditionL( videoDef );
   984 	        if (iAutoVideo)
   985             }
   985 	            {
   986         if (iAutoAudio)
   986 	            CMdEObjectDef& videoDef = iDefNamespace->GetObjectDefL( MdeConstants::Video::KVideoObject );
   987             {
   987 	            objDefCondition.AddObjectConditionL( videoDef );
   988             CMdEObjectDef& audioDef = iDefNamespace->GetObjectDefL( MdeConstants::Audio::KAudioObject );
   988 	            }
   989             objDefCondition.AddObjectConditionL( audioDef );
   989 	        if (iAutoAudio)
   990             }    
   990 	            {
   991         }
   991 	            CMdEObjectDef& audioDef = iDefNamespace->GetObjectDefL( MdeConstants::Audio::KAudioObject );
   992     
   992 	            objDefCondition.AddObjectConditionL( audioDef );
   993     iQuery->FindL();
   993 	            }    
       
   994 	        }
       
   995     
       
   996 	    iQuery->FindL();
       
   997 		}
   994     
   998     
   995     TN_DEBUG1( "CThumbAGProcessor::QueryL() - end" );
   999     TN_DEBUG1( "CThumbAGProcessor::QueryL() - end" );
   996     }
  1000     }
   997 
  1001 
   998 
  1002 
  1034     CMdEObjectDef& audioObjDef = iDefNamespace->GetObjectDefL( MdeConstants::Audio::KAudioObject );
  1038     CMdEObjectDef& audioObjDef = iDefNamespace->GetObjectDefL( MdeConstants::Audio::KAudioObject );
  1035     
  1039     
  1036     CMdEObjectDef& objDef = iDefNamespace->GetObjectDefL( MdeConstants::Object::KBaseObject);
  1040     CMdEObjectDef& objDef = iDefNamespace->GetObjectDefL( MdeConstants::Object::KBaseObject);
  1037     iQueryPlaceholders = iMdESession->NewObjectQueryL( *iDefNamespace, objDef, this );
  1041     iQueryPlaceholders = iMdESession->NewObjectQueryL( *iDefNamespace, objDef, this );
  1038         
  1042         
  1039     iQueryPlaceholders->SetResultMode( EQueryResultModeItem );
  1043     if(iQueryPlaceholders)
  1040     
  1044         {
  1041     CMdELogicCondition& rootCondition = iQueryPlaceholders->Conditions();
  1045         iQueryPlaceholders->SetResultMode( EQueryResultModeItem );
  1042     rootCondition.SetOperator( ELogicConditionOperatorOr );
  1046         
  1043     
  1047         CMdELogicCondition& rootCondition = iQueryPlaceholders->Conditions();
  1044     CMdEObjectCondition& imagePHObjectCondition = rootCondition.AddObjectConditionL(imageObjDef);
  1048         rootCondition.SetOperator( ELogicConditionOperatorOr );
  1045     imagePHObjectCondition.SetPlaceholderOnly( ETrue );
  1049         
  1046     imagePHObjectCondition.SetNotPresent( aPresent );
  1050         CMdEObjectCondition& imagePHObjectCondition = rootCondition.AddObjectConditionL(imageObjDef);
  1047     
  1051         CleanupStack::PushL( &imagePHObjectCondition );
  1048     CMdEObjectCondition& videoPHObjectCondition = rootCondition.AddObjectConditionL(videoObjDef);
  1052         imagePHObjectCondition.SetPlaceholderOnly( ETrue );
  1049     videoPHObjectCondition.SetPlaceholderOnly( ETrue );
  1053         imagePHObjectCondition.SetNotPresent( aPresent );
  1050     videoPHObjectCondition.SetNotPresent( aPresent );
  1054         
  1051     
  1055         CMdEObjectCondition& videoPHObjectCondition = rootCondition.AddObjectConditionL(videoObjDef);
  1052     CMdEObjectCondition& audioPHObjectCondition = rootCondition.AddObjectConditionL(audioObjDef);
  1056         CleanupStack::PushL( &videoPHObjectCondition );
  1053     audioPHObjectCondition.SetPlaceholderOnly( ETrue );
  1057         videoPHObjectCondition.SetPlaceholderOnly( ETrue );
  1054     audioPHObjectCondition.SetNotPresent( aPresent );
  1058         videoPHObjectCondition.SetNotPresent( aPresent );
  1055     
  1059         
  1056     iQueryPlaceholders->FindL(KMaxTInt, KMaxQueryBatchSize);   
  1060         CMdEObjectCondition& audioPHObjectCondition = rootCondition.AddObjectConditionL(audioObjDef);
  1057    
  1061         CleanupStack::PushL( &audioPHObjectCondition );
       
  1062         audioPHObjectCondition.SetPlaceholderOnly( ETrue );
       
  1063         audioPHObjectCondition.SetNotPresent( aPresent );
       
  1064         
       
  1065         iQueryPlaceholders->FindL(KMaxTInt, KMaxQueryBatchSize);   
       
  1066        
       
  1067         CleanupStack::Pop(3, &imagePHObjectCondition );
       
  1068         }
       
  1069 	
  1058     TN_DEBUG1( "CThumbAGProcessor::QueryPlaceholdersL - end" );
  1070     TN_DEBUG1( "CThumbAGProcessor::QueryPlaceholdersL - end" );
  1059     }
  1071     }
  1060 
  1072 
  1061 
  1073 
  1062 // ---------------------------------------------------------------------------
  1074 // ---------------------------------------------------------------------------
  1181         {
  1193         {
  1182         TN_DEBUG1( "CThumbAGProcessor::RunL() - *** FORCED RUN ***");
  1194         TN_DEBUG1( "CThumbAGProcessor::RunL() - *** FORCED RUN ***");
  1183         }
  1195         }
  1184 #endif
  1196 #endif
  1185 	
  1197 	
  1186   	if( iForceRun || iForegroundRun )
  1198   	if( (iForceRun || iForegroundRun ) && !iMountTimer->IsActive() )
  1187       	{
  1199       	{
  1188         TN_DEBUG1( "void CThumbAGProcessor::RunL() skip idle detection!");
  1200         TN_DEBUG1( "void CThumbAGProcessor::RunL() skip idle detection!");
  1189       	CancelTimeout();
  1201       	CancelTimeout();
  1190      	}
  1202      	}
  1191   	else
  1203   	else
  1286         iUnknown = ETrue;
  1298         iUnknown = ETrue;
  1287         iQueryActive = ETrue;
  1299         iQueryActive = ETrue;
  1288 
  1300 
  1289         QueryL( EGenerationItemActionResolveType );
  1301         QueryL( EGenerationItemActionResolveType );
  1290        }
  1302        }
       
  1303     else if ( iDeleteItemCount > 0 )
       
  1304        {
       
  1305        TN_DEBUG1( "void CThumbAGProcessor::RunL() delete thumbnails");
       
  1306        // delete thumbs by URI
       
  1307        __ASSERT_DEBUG((iTMSession), User::Panic(_L("CThumbAGProcessor::RunL() !iTMSession "), KErrBadHandle));
       
  1308        if(iTMSession)
       
  1309            {
       
  1310            TInt itemIndex(KErrNotFound);
       
  1311                                
       
  1312            for(TInt i=0;i<iGenerationQueue.Count() || itemIndex == KErrNotFound;i++)
       
  1313                {
       
  1314                if(iGenerationQueue[i].iItemAction == EGenerationItemActionDelete)
       
  1315                    {
       
  1316                    itemIndex = i;
       
  1317                    }
       
  1318                }
       
  1319        
       
  1320            if(itemIndex >= 0)
       
  1321                {
       
  1322                if(!iGenerationQueue[itemIndex].iUri)
       
  1323                    {
       
  1324                    //URI is invalid
       
  1325                    TN_DEBUG1( "void CThumbAGProcessor::RunL() unable to delete URI inbalid");
       
  1326                    iGenerationQueue.Remove( itemIndex );
       
  1327                    ActivateAO();
       
  1328                    return;
       
  1329                    }
       
  1330 
       
  1331                TN_DEBUG2( "void CThumbAGProcessor::RunL() delete %S",  iGenerationQueue[itemIndex].iUri);
       
  1332                CThumbnailObjectSource* source = NULL;                
       
  1333                TRAPD(err,  source = CThumbnailObjectSource::NewL( *iGenerationQueue[itemIndex].iUri, KNullDesC));
       
  1334                   
       
  1335                if(err == KErrNone)
       
  1336                    {
       
  1337                    iTMSession->DeleteThumbnails( *source );
       
  1338                    }
       
  1339                delete source;
       
  1340                
       
  1341                delete iGenerationQueue[itemIndex].iUri;
       
  1342                iGenerationQueue[itemIndex].iUri = NULL;
       
  1343                iGenerationQueue.Remove( itemIndex );
       
  1344                
       
  1345                iActiveCount++;
       
  1346                }
       
  1347            }
       
  1348        }
  1291     // no items in query queue, start new
  1349     // no items in query queue, start new
  1292     // select queue to process, priority by type
  1350     // select queue to process, priority by type
  1293     else if ( iModifyItemCount > 0 )
  1351     else if ( iModifyItemCount > 0 )
  1294         {
  1352         {
  1295         TN_DEBUG1( "void CThumbAGProcessor::RunL() update thumbnails");
  1353         TN_DEBUG1( "void CThumbAGProcessor::RunL() update thumbnails");
  1310         iUnknown = EFalse;
  1368         iUnknown = EFalse;
  1311         // query for object info
  1369         // query for object info
  1312         iQueryActive = ETrue;
  1370         iQueryActive = ETrue;
  1313         
  1371         
  1314         QueryL( EGenerationItemActionAdd );     
  1372         QueryL( EGenerationItemActionAdd );     
  1315         }
       
  1316     else if ( iDeleteItemCount > 0 )
       
  1317         {
       
  1318         TN_DEBUG1( "void CThumbAGProcessor::RunL() delete thumbnails");
       
  1319         i2ndRound = EFalse;
       
  1320         iUnknown = EFalse;
       
  1321         // delete thumbs by URI
       
  1322         __ASSERT_DEBUG((iTMSession), User::Panic(_L("CThumbAGProcessor::RunL() !iTMSession "), KErrBadHandle));
       
  1323         if(iTMSession)
       
  1324             {
       
  1325             TInt itemIndex(KErrNotFound);
       
  1326                                 
       
  1327             for(TInt i=0;i<iGenerationQueue.Count() || itemIndex == KErrNotFound;i++)
       
  1328                 {
       
  1329                 if(iGenerationQueue[i].iItemAction == EGenerationItemActionDelete)
       
  1330                     {
       
  1331                     itemIndex = i;
       
  1332                     }
       
  1333                 }
       
  1334         
       
  1335             if(itemIndex >= 0)
       
  1336                 {
       
  1337                 if(!iGenerationQueue[itemIndex].iUri)
       
  1338                     {
       
  1339                     //URI is invalid
       
  1340                     TN_DEBUG1( "void CThumbAGProcessor::RunL() unable to delete URI inbalid");
       
  1341                     iGenerationQueue.Remove( itemIndex );
       
  1342                     ActivateAO();
       
  1343                     return;
       
  1344                     }
       
  1345 
       
  1346                 TN_DEBUG2( "void CThumbAGProcessor::RunL() delete %S",  iGenerationQueue[itemIndex].iUri);
       
  1347                 CThumbnailObjectSource* source = NULL;                
       
  1348                 TRAPD(err,  source = CThumbnailObjectSource::NewL( *iGenerationQueue[itemIndex].iUri, KNullDesC));
       
  1349                    
       
  1350                 if(err == KErrNone)
       
  1351                     {
       
  1352                     iTMSession->DeleteThumbnails( *source );
       
  1353                     }
       
  1354                 delete source;
       
  1355                 
       
  1356                 delete iGenerationQueue[itemIndex].iUri;
       
  1357                 iGenerationQueue[itemIndex].iUri = NULL;
       
  1358                 iGenerationQueue.Remove( itemIndex );
       
  1359                 
       
  1360                 iActiveCount++;
       
  1361                 }
       
  1362             }
       
  1363         }
  1373         }
  1364     else if( i2ndAddItemCount > 0)
  1374     else if( i2ndAddItemCount > 0)
  1365         {
  1375         {
  1366         TN_DEBUG1( "void CThumbAGProcessor::RunL() update 2nd round thumbnails");
  1376         TN_DEBUG1( "void CThumbAGProcessor::RunL() update 2nd round thumbnails");
  1367             
  1377             
  1685         TN_DEBUG1( "CThumbAGProcessor::ActivateAO() - FORMATTING - DAEMON ON PAUSE");
  1695         TN_DEBUG1( "CThumbAGProcessor::ActivateAO() - FORMATTING - DAEMON ON PAUSE");
  1686         return;
  1696         return;
  1687         }
  1697         }
  1688     
  1698     
  1689     //check if forced run needs to continue
  1699     //check if forced run needs to continue
  1690     if ( iModifyItemCount || iUnknownItemCount > 0 )
  1700     if ( (iModifyItemCount > 0 || iDeleteItemCount > 0 ||  iUnknownItemCount > 0) && !iMountTimer->IsActive())
  1691         {
  1701         {
       
  1702         TN_DEBUG1( "CThumbAGProcessor::ActivateAO() -  forced run");
  1692         SetForceRun( ETrue );
  1703         SetForceRun( ETrue );
  1693         }
  1704         }
  1694     else
  1705     else
  1695         {
  1706         {
  1696         iModify = EFalse;
  1707         iModify = EFalse;
  1697         SetForceRun( EFalse );
  1708         SetForceRun( EFalse );
  1698         }
  1709         }
  1699     
  1710     
  1700     if( !IsActive() && !iShutdown && ((iActiveCount == 0 && !iQueryActive) || iForceRun ))
  1711     if( !IsActive() && !iShutdown && ((iActiveCount < KMaxDaemonRequests && !iQueryActive) || iForceRun ))
  1701         {
  1712         {
  1702         TN_DEBUG1( "CThumbAGProcessor::ActivateAO() - Activated");
  1713         TN_DEBUG1( "CThumbAGProcessor::ActivateAO() - Activated");
  1703         SetActive();
  1714         SetActive();
  1704         TRequestStatus* statusPtr = &iStatus;
  1715         TRequestStatus* statusPtr = &iStatus;
  1705         User::RequestComplete( statusPtr, KErrNone );
  1716         User::RequestComplete( statusPtr, KErrNone );
  1878     
  1889     
  1879     CMdELogicCondition& rootCondition = iQueryAllItems->Conditions();
  1890     CMdELogicCondition& rootCondition = iQueryAllItems->Conditions();
  1880     rootCondition.SetOperator( ELogicConditionOperatorOr );
  1891     rootCondition.SetOperator( ELogicConditionOperatorOr );
  1881     
  1892     
  1882     CMdEObjectCondition& imageObjectCondition = rootCondition.AddObjectConditionL(imageObjDef);
  1893     CMdEObjectCondition& imageObjectCondition = rootCondition.AddObjectConditionL(imageObjDef);
       
  1894 	CleanupStack::PushL( &imageObjectCondition );
  1883     
  1895     
  1884     CMdEObjectCondition& videoObjectCondition = rootCondition.AddObjectConditionL(videoObjDef);
  1896     CMdEObjectCondition& videoObjectCondition = rootCondition.AddObjectConditionL(videoObjDef);
       
  1897 	CleanupStack::PushL( &videoObjectCondition );
  1885     
  1898     
  1886     CMdEObjectCondition& audioObjectCondition = rootCondition.AddObjectConditionL(audioObjDef);
  1899     CMdEObjectCondition& audioObjectCondition = rootCondition.AddObjectConditionL(audioObjDef);
       
  1900 	CleanupStack::PushL( &audioObjectCondition );
  1887     
  1901     
  1888     iQueryAllItems->FindL(KMaxTInt, KMaxQueryBatchSize);  
  1902     iQueryAllItems->FindL(KMaxTInt, KMaxQueryBatchSize);  
       
  1903 	
       
  1904 	CleanupStack::Pop(3, &imageObjectCondition);
  1889     
  1905     
  1890     TN_DEBUG1( "CThumbAGProcessor::QueryAllItemsL - end" );
  1906     TN_DEBUG1( "CThumbAGProcessor::QueryAllItemsL - end" );
  1891     }
  1907     }
  1892 
  1908 
  1893 // -----------------------------------------------------------------------------
  1909 // -----------------------------------------------------------------------------
  2016 void CThumbAGProcessor::FormatNotification( TBool aFormat )
  2032 void CThumbAGProcessor::FormatNotification( TBool aFormat )
  2017     {
  2033     {
  2018     TN_DEBUG2( "CThumbAGProcessor::FormatNotification(%d)", aFormat );
  2034     TN_DEBUG2( "CThumbAGProcessor::FormatNotification(%d)", aFormat );
  2019     
  2035     
  2020     iFormatting = aFormat;
  2036     iFormatting = aFormat;
       
  2037     
  2021     if(!aFormat)
  2038     if(!aFormat)
  2022         {
  2039         {
       
  2040         //force update
       
  2041         UpdatePSValues(EFalse, ETrue);
  2023         ActivateAO();
  2042         ActivateAO();
  2024         }
  2043         }
  2025     }
  2044     }
  2026 
  2045 
  2027 // ---------------------------------------------------------------------------
  2046 // ---------------------------------------------------------------------------
  2126                 {
  2145                 {
  2127                 TN_DEBUG3( "CThumbAGProcessor::UpdatePSValues() set KDaemonProcessing %d failed %d", daemonProcessing, ret);
  2146                 TN_DEBUG3( "CThumbAGProcessor::UpdatePSValues() set KDaemonProcessing %d failed %d", daemonProcessing, ret);
  2128                 }
  2147                 }
  2129             }
  2148             }
  2130         
  2149         
       
  2150         TN_DEBUG2( "CThumbAGProcessor::UpdatePSValues() iPreviousItemsLeft == %d", iPreviousItemsLeft);
       
  2151         
  2131         if( itemsLeft != iPreviousItemsLeft)
  2152         if( itemsLeft != iPreviousItemsLeft)
  2132             {
  2153             {
  2133             TN_DEBUG2( "CThumbAGProcessor::UpdatePSValues() update KItemsleft == %d", itemsLeft);
  2154             TN_DEBUG2( "CThumbAGProcessor::UpdatePSValues() Set KItemsleft == %d", itemsLeft);
  2134             iPreviousItemsLeft = itemsLeft;
  2155             iPreviousItemsLeft = itemsLeft;
  2135             TInt ret = RProperty::Set(KTAGDPSNotification, KItemsleft, itemsLeft );
  2156             TInt ret = RProperty::Set(KTAGDPSNotification, KItemsleft, itemsLeft );
  2136             
  2157             
  2137             if(ret != KErrNone )
  2158             if(ret != KErrNone )
  2138                 {
  2159                 {