imagehandlingutilities/thumbnailmanager/thumbagdaemon/src/thumbagprocessor.cpp
changeset 36 c5df59b4ae2d
parent 30 b67379558a75
child 43 473df7bf149f
equal deleted inserted replaced
30:b67379558a75 36:c5df59b4ae2d
   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 		}
       
   998 	else
       
   999 	    {
       
  1000         iQueryActive = EFalse;
       
  1001 	    }
   994     
  1002     
   995     TN_DEBUG1( "CThumbAGProcessor::QueryL() - end" );
  1003     TN_DEBUG1( "CThumbAGProcessor::QueryL() - end" );
   996     }
  1004     }
   997 
  1005 
   998 
  1006 
  1034     CMdEObjectDef& audioObjDef = iDefNamespace->GetObjectDefL( MdeConstants::Audio::KAudioObject );
  1042     CMdEObjectDef& audioObjDef = iDefNamespace->GetObjectDefL( MdeConstants::Audio::KAudioObject );
  1035     
  1043     
  1036     CMdEObjectDef& objDef = iDefNamespace->GetObjectDefL( MdeConstants::Object::KBaseObject);
  1044     CMdEObjectDef& objDef = iDefNamespace->GetObjectDefL( MdeConstants::Object::KBaseObject);
  1037     iQueryPlaceholders = iMdESession->NewObjectQueryL( *iDefNamespace, objDef, this );
  1045     iQueryPlaceholders = iMdESession->NewObjectQueryL( *iDefNamespace, objDef, this );
  1038         
  1046         
  1039     iQueryPlaceholders->SetResultMode( EQueryResultModeItem );
  1047     if(iQueryPlaceholders)
  1040     
  1048         {
  1041     CMdELogicCondition& rootCondition = iQueryPlaceholders->Conditions();
  1049         iQueryPlaceholders->SetResultMode( EQueryResultModeItem );
  1042     rootCondition.SetOperator( ELogicConditionOperatorOr );
  1050         
  1043     
  1051         CMdELogicCondition& rootCondition = iQueryPlaceholders->Conditions();
  1044     CMdEObjectCondition& imagePHObjectCondition = rootCondition.AddObjectConditionL(imageObjDef);
  1052         rootCondition.SetOperator( ELogicConditionOperatorOr );
  1045     imagePHObjectCondition.SetPlaceholderOnly( ETrue );
  1053         
  1046     imagePHObjectCondition.SetNotPresent( aPresent );
  1054         CMdEObjectCondition& imagePHObjectCondition = rootCondition.AddObjectConditionL(imageObjDef);
  1047     
  1055         CleanupStack::PushL( &imagePHObjectCondition );
  1048     CMdEObjectCondition& videoPHObjectCondition = rootCondition.AddObjectConditionL(videoObjDef);
  1056         imagePHObjectCondition.SetPlaceholderOnly( ETrue );
  1049     videoPHObjectCondition.SetPlaceholderOnly( ETrue );
  1057         imagePHObjectCondition.SetNotPresent( aPresent );
  1050     videoPHObjectCondition.SetNotPresent( aPresent );
  1058         
  1051     
  1059         CMdEObjectCondition& videoPHObjectCondition = rootCondition.AddObjectConditionL(videoObjDef);
  1052     CMdEObjectCondition& audioPHObjectCondition = rootCondition.AddObjectConditionL(audioObjDef);
  1060         CleanupStack::PushL( &videoPHObjectCondition );
  1053     audioPHObjectCondition.SetPlaceholderOnly( ETrue );
  1061         videoPHObjectCondition.SetPlaceholderOnly( ETrue );
  1054     audioPHObjectCondition.SetNotPresent( aPresent );
  1062         videoPHObjectCondition.SetNotPresent( aPresent );
  1055     
  1063         
  1056     iQueryPlaceholders->FindL(KMaxTInt, KMaxQueryBatchSize);   
  1064         CMdEObjectCondition& audioPHObjectCondition = rootCondition.AddObjectConditionL(audioObjDef);
  1057    
  1065         CleanupStack::PushL( &audioPHObjectCondition );
       
  1066         audioPHObjectCondition.SetPlaceholderOnly( ETrue );
       
  1067         audioPHObjectCondition.SetNotPresent( aPresent );
       
  1068         
       
  1069         iQueryPlaceholders->FindL(KMdEQueryDefaultMaxCount, KMaxQueryBatchSize);   
       
  1070        
       
  1071         CleanupStack::Pop(3, &imagePHObjectCondition );
       
  1072         }
       
  1073 	
  1058     TN_DEBUG1( "CThumbAGProcessor::QueryPlaceholdersL - end" );
  1074     TN_DEBUG1( "CThumbAGProcessor::QueryPlaceholdersL - end" );
  1059     }
  1075     }
  1060 
  1076 
  1061 
  1077 
  1062 // ---------------------------------------------------------------------------
  1078 // ---------------------------------------------------------------------------
  1181         {
  1197         {
  1182         TN_DEBUG1( "CThumbAGProcessor::RunL() - *** FORCED RUN ***");
  1198         TN_DEBUG1( "CThumbAGProcessor::RunL() - *** FORCED RUN ***");
  1183         }
  1199         }
  1184 #endif
  1200 #endif
  1185 	
  1201 	
  1186   	if( iForceRun || iForegroundRun )
  1202   	if( (iForceRun || iForegroundRun ) && !iMountTimer->IsActive() )
  1187       	{
  1203       	{
  1188         TN_DEBUG1( "void CThumbAGProcessor::RunL() skip idle detection!");
  1204         TN_DEBUG1( "void CThumbAGProcessor::RunL() skip idle detection!");
  1189       	CancelTimeout();
  1205       	CancelTimeout();
  1190      	}
  1206      	}
  1191   	else
  1207   	else
  1286         iUnknown = ETrue;
  1302         iUnknown = ETrue;
  1287         iQueryActive = ETrue;
  1303         iQueryActive = ETrue;
  1288 
  1304 
  1289         QueryL( EGenerationItemActionResolveType );
  1305         QueryL( EGenerationItemActionResolveType );
  1290        }
  1306        }
       
  1307     else if ( iDeleteItemCount > 0 )
       
  1308        {
       
  1309        TN_DEBUG1( "void CThumbAGProcessor::RunL() delete thumbnails");
       
  1310        // delete thumbs by URI
       
  1311        __ASSERT_DEBUG((iTMSession), User::Panic(_L("CThumbAGProcessor::RunL() !iTMSession "), KErrBadHandle));
       
  1312        if(iTMSession)
       
  1313            {
       
  1314            TInt itemIndex(KErrNotFound);
       
  1315                                
       
  1316            for(TInt i=0;i<iGenerationQueue.Count() || itemIndex == KErrNotFound;i++)
       
  1317                {
       
  1318                if(iGenerationQueue[i].iItemAction == EGenerationItemActionDelete)
       
  1319                    {
       
  1320                    itemIndex = i;
       
  1321                    }
       
  1322                }
       
  1323        
       
  1324            if(itemIndex >= 0)
       
  1325                {
       
  1326                if(!iGenerationQueue[itemIndex].iUri)
       
  1327                    {
       
  1328                    //URI is invalid
       
  1329                    TN_DEBUG1( "void CThumbAGProcessor::RunL() unable to delete URI inbalid");
       
  1330                    iGenerationQueue.Remove( itemIndex );
       
  1331                    ActivateAO();
       
  1332                    return;
       
  1333                    }
       
  1334 
       
  1335                TN_DEBUG2( "void CThumbAGProcessor::RunL() delete %S",  iGenerationQueue[itemIndex].iUri);
       
  1336                CThumbnailObjectSource* source = NULL;                
       
  1337                TRAPD(err,  source = CThumbnailObjectSource::NewL( *iGenerationQueue[itemIndex].iUri, KNullDesC));
       
  1338                   
       
  1339                if(err == KErrNone)
       
  1340                    {
       
  1341                    iTMSession->DeleteThumbnails( *source );
       
  1342                    }
       
  1343                delete source;
       
  1344                
       
  1345                delete iGenerationQueue[itemIndex].iUri;
       
  1346                iGenerationQueue[itemIndex].iUri = NULL;
       
  1347                iGenerationQueue.Remove( itemIndex );
       
  1348                
       
  1349                iActiveCount++;
       
  1350                }
       
  1351            }
       
  1352        }
  1291     // no items in query queue, start new
  1353     // no items in query queue, start new
  1292     // select queue to process, priority by type
  1354     // select queue to process, priority by type
  1293     else if ( iModifyItemCount > 0 )
  1355     else if ( iModifyItemCount > 0 )
  1294         {
  1356         {
  1295         TN_DEBUG1( "void CThumbAGProcessor::RunL() update thumbnails");
  1357         TN_DEBUG1( "void CThumbAGProcessor::RunL() update thumbnails");
  1310         iUnknown = EFalse;
  1372         iUnknown = EFalse;
  1311         // query for object info
  1373         // query for object info
  1312         iQueryActive = ETrue;
  1374         iQueryActive = ETrue;
  1313         
  1375         
  1314         QueryL( EGenerationItemActionAdd );     
  1376         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         }
  1377         }
  1364     else if( i2ndAddItemCount > 0)
  1378     else if( i2ndAddItemCount > 0)
  1365         {
  1379         {
  1366         TN_DEBUG1( "void CThumbAGProcessor::RunL() update 2nd round thumbnails");
  1380         TN_DEBUG1( "void CThumbAGProcessor::RunL() update 2nd round thumbnails");
  1367             
  1381             
  1685         TN_DEBUG1( "CThumbAGProcessor::ActivateAO() - FORMATTING - DAEMON ON PAUSE");
  1699         TN_DEBUG1( "CThumbAGProcessor::ActivateAO() - FORMATTING - DAEMON ON PAUSE");
  1686         return;
  1700         return;
  1687         }
  1701         }
  1688     
  1702     
  1689     //check if forced run needs to continue
  1703     //check if forced run needs to continue
  1690     if ( iModifyItemCount || iUnknownItemCount > 0 )
  1704     if ( (iModifyItemCount > 0 || iDeleteItemCount > 0 ||  iUnknownItemCount > 0) && !iMountTimer->IsActive())
  1691         {
  1705         {
       
  1706         TN_DEBUG1( "CThumbAGProcessor::ActivateAO() -  forced run");
  1692         SetForceRun( ETrue );
  1707         SetForceRun( ETrue );
  1693         }
  1708         }
  1694     else
  1709     else
  1695         {
  1710         {
  1696         iModify = EFalse;
  1711         iModify = EFalse;
  1697         SetForceRun( EFalse );
  1712         SetForceRun( EFalse );
  1698         }
  1713         }
  1699     
  1714     
  1700     if( !IsActive() && !iShutdown && ((iActiveCount == 0 && !iQueryActive) || iForceRun ))
  1715     if( !IsActive() && !iShutdown && ((iActiveCount < KMaxDaemonRequests && !iQueryActive) || iForceRun ))
  1701         {
  1716         {
  1702         TN_DEBUG1( "CThumbAGProcessor::ActivateAO() - Activated");
  1717         TN_DEBUG1( "CThumbAGProcessor::ActivateAO() - Activated");
  1703         SetActive();
  1718         SetActive();
  1704         TRequestStatus* statusPtr = &iStatus;
  1719         TRequestStatus* statusPtr = &iStatus;
  1705         User::RequestComplete( statusPtr, KErrNone );
  1720         User::RequestComplete( statusPtr, KErrNone );
  1878     
  1893     
  1879     CMdELogicCondition& rootCondition = iQueryAllItems->Conditions();
  1894     CMdELogicCondition& rootCondition = iQueryAllItems->Conditions();
  1880     rootCondition.SetOperator( ELogicConditionOperatorOr );
  1895     rootCondition.SetOperator( ELogicConditionOperatorOr );
  1881     
  1896     
  1882     CMdEObjectCondition& imageObjectCondition = rootCondition.AddObjectConditionL(imageObjDef);
  1897     CMdEObjectCondition& imageObjectCondition = rootCondition.AddObjectConditionL(imageObjDef);
       
  1898 	CleanupStack::PushL( &imageObjectCondition );
  1883     
  1899     
  1884     CMdEObjectCondition& videoObjectCondition = rootCondition.AddObjectConditionL(videoObjDef);
  1900     CMdEObjectCondition& videoObjectCondition = rootCondition.AddObjectConditionL(videoObjDef);
       
  1901 	CleanupStack::PushL( &videoObjectCondition );
  1885     
  1902     
  1886     CMdEObjectCondition& audioObjectCondition = rootCondition.AddObjectConditionL(audioObjDef);
  1903     CMdEObjectCondition& audioObjectCondition = rootCondition.AddObjectConditionL(audioObjDef);
  1887     
  1904 	CleanupStack::PushL( &audioObjectCondition );
  1888     iQueryAllItems->FindL(KMaxTInt, KMaxQueryBatchSize);  
  1905     
       
  1906     iQueryAllItems->FindL(KMdEQueryDefaultMaxCount, KMaxQueryBatchSize);  
       
  1907 	
       
  1908 	CleanupStack::Pop(3, &imageObjectCondition);
  1889     
  1909     
  1890     TN_DEBUG1( "CThumbAGProcessor::QueryAllItemsL - end" );
  1910     TN_DEBUG1( "CThumbAGProcessor::QueryAllItemsL - end" );
  1891     }
  1911     }
  1892 
  1912 
  1893 // -----------------------------------------------------------------------------
  1913 // -----------------------------------------------------------------------------
  2016 void CThumbAGProcessor::FormatNotification( TBool aFormat )
  2036 void CThumbAGProcessor::FormatNotification( TBool aFormat )
  2017     {
  2037     {
  2018     TN_DEBUG2( "CThumbAGProcessor::FormatNotification(%d)", aFormat );
  2038     TN_DEBUG2( "CThumbAGProcessor::FormatNotification(%d)", aFormat );
  2019     
  2039     
  2020     iFormatting = aFormat;
  2040     iFormatting = aFormat;
       
  2041     
  2021     if(!aFormat)
  2042     if(!aFormat)
  2022         {
  2043         {
       
  2044         //force update
       
  2045         UpdatePSValues(EFalse, ETrue);
  2023         ActivateAO();
  2046         ActivateAO();
  2024         }
  2047         }
  2025     }
  2048     }
  2026 
  2049 
  2027 // ---------------------------------------------------------------------------
  2050 // ---------------------------------------------------------------------------
  2126                 {
  2149                 {
  2127                 TN_DEBUG3( "CThumbAGProcessor::UpdatePSValues() set KDaemonProcessing %d failed %d", daemonProcessing, ret);
  2150                 TN_DEBUG3( "CThumbAGProcessor::UpdatePSValues() set KDaemonProcessing %d failed %d", daemonProcessing, ret);
  2128                 }
  2151                 }
  2129             }
  2152             }
  2130         
  2153         
       
  2154         TN_DEBUG2( "CThumbAGProcessor::UpdatePSValues() iPreviousItemsLeft == %d", iPreviousItemsLeft);
       
  2155         
  2131         if( itemsLeft != iPreviousItemsLeft)
  2156         if( itemsLeft != iPreviousItemsLeft)
  2132             {
  2157             {
  2133             TN_DEBUG2( "CThumbAGProcessor::UpdatePSValues() update KItemsleft == %d", itemsLeft);
  2158             TN_DEBUG2( "CThumbAGProcessor::UpdatePSValues() Set KItemsleft == %d", itemsLeft);
  2134             iPreviousItemsLeft = itemsLeft;
  2159             iPreviousItemsLeft = itemsLeft;
  2135             TInt ret = RProperty::Set(KTAGDPSNotification, KItemsleft, itemsLeft );
  2160             TInt ret = RProperty::Set(KTAGDPSNotification, KItemsleft, itemsLeft );
  2136             
  2161             
  2137             if(ret != KErrNone )
  2162             if(ret != KErrNone )
  2138                 {
  2163                 {