engine/collectionframework/datasource/plugins/glxdatasourcemde/src/glxdatasourcetaskmde.cpp
changeset 71 27f2d7aec52a
parent 69 45459746d5e8
child 72 0a8e959402e5
equal deleted inserted replaced
69:45459746d5e8 71:27f2d7aec52a
     1 /*
       
     2 * Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:   
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 /**
       
    21  * @internal reviewed 11/07/2007 by M Byrne
       
    22  * @internal reviewed 24/07/2007 by K Hoikka, SCO 403-8472 removal of all view
       
    23  */
       
    24 
       
    25 
       
    26 #include "glxdatasourcetaskmde.h"
       
    27 
       
    28 #include <glxcollectionpluginCamera.hrh>
       
    29 #include <glxcollectionpluginDownloads.hrh>
       
    30 #include <glxcollectionpluginMonths.hrh>
       
    31 #include <glxcollectionpluginalbums.hrh>
       
    32 #include <glxcollectionpluginall.hrh>
       
    33 #include <glxcollectionplugintags.hrh>
       
    34 #include <glxerrors.h>
       
    35 #include <glxfilterfactory.h>
       
    36 #include <glxgetrequest.h>
       
    37 #include <glxidlistrequest.h>
       
    38 #include <glxlog.h>
       
    39 #include <glxmediacollectioninternaldefs.h>
       
    40 #include <glxmediageneraldefs.h>
       
    41 #include <glxrequest.h>
       
    42 #include <glxthumbnailattributeinfo.h>
       
    43 #include <glxthumbnailrequest.h>
       
    44 #include <glxtndatabase.h>
       
    45 #include <glxtnfileinfo.h>
       
    46 #include <glxtnthumbnailcreator.h>
       
    47 #include <lbsposition.h>
       
    48 #include <mdeconstants.h>
       
    49 #include <mdelogiccondition.h>
       
    50 #include <mdeobject.h>
       
    51 #include <mdeobjectdef.h>
       
    52 #include <mdeobjectquery.h>
       
    53 #include <mdepropertydef.h>
       
    54 #include <mderelationdef.h>
       
    55 #include <mdesession.h>
       
    56 #include <mdetextproperty.h>
       
    57 #include <mpxmedia.h>
       
    58 #include <mpxmediaarray.h> 
       
    59 #include <mpxmediacollectiondetaildefs.h>
       
    60 #include <mpxmediacontainerdefs.h>
       
    61 #include <mpxmediadrmdefs.h>
       
    62 #include <mpxmediageneraldefs.h>
       
    63 
       
    64 #include "glxdatasourcemde.h"
       
    65 #include "glxdatasourcemde.hrh"
       
    66 
       
    67 // CONSTANTS
       
    68 _LIT(KPropertyDefNameCreationDate, "CreationDate");
       
    69 _LIT(KPropertyDefNameLastModifiedDate, "LastModifiedDate");
       
    70 _LIT(KPropertyDefNameTitle, "Title");
       
    71 _LIT(KPropertyDefNameDRM, "DRM");
       
    72 _LIT(KPropertyDefNameUsageCount, "UsageCount");
       
    73 _LIT(KPropertyDefNameFrameCount, "FrameCount");
       
    74 _LIT(KPropertyDefNameOrigin, "Origin");
       
    75 
       
    76 // ----------------------------------------------------------------------------
       
    77 //  Constructor
       
    78 // ----------------------------------------------------------------------------
       
    79 //  
       
    80 CGlxDataSourceTaskMde:: CGlxDataSourceTaskMde(CGlxRequest* aRequest, 
       
    81         MGlxDataSourceRequestObserver& aObserver, CGlxDataSource* aDataSource)
       
    82     : CGlxDataSourceTask(aRequest, aObserver, aDataSource)
       
    83     {
       
    84     GLX_LOG_ENTRY_EXIT("CGlxDataSourceTaskMde::CGlxDataSourceTaskMde()");
       
    85     // No implementation required
       
    86     }
       
    87 
       
    88 // ----------------------------------------------------------------------------
       
    89 //  Destructor
       
    90 // ----------------------------------------------------------------------------
       
    91 //  
       
    92 CGlxDataSourceTaskMde::~CGlxDataSourceTaskMde()
       
    93     {
       
    94     GLX_LOG_ENTRY_EXIT("CGlxDataSourceTaskMde::~CGlxDataSourceTaskMde()");
       
    95     DestroyQueries();
       
    96     }
       
    97 
       
    98 // ----------------------------------------------------------------------------
       
    99 //  Second stage constructor
       
   100 // ----------------------------------------------------------------------------
       
   101 //  	
       
   102 void CGlxDataSourceTaskMde::ConstructL()
       
   103     {
       
   104     GLX_LOG_ENTRY_EXIT("void CGlxDataSourceTaskMde::ConstructL()");
       
   105     CreateResponseL();
       
   106     DataSource()->ThumbnailCreator().CancelRequest( TGlxMediaId(0) );
       
   107     }
       
   108 
       
   109 // ----------------------------------------------------------------------------
       
   110 //  CGlxDataSourceTaskMde::CancelRequest
       
   111 // ----------------------------------------------------------------------------
       
   112 //  
       
   113 void CGlxDataSourceTaskMde::CancelRequest()
       
   114     {
       
   115     GLX_LOG_ENTRY_EXIT("void CGlxDataSourceTaskMde::CancelRequest()");
       
   116     DestroyQueries();
       
   117     iCancelled = ETrue;
       
   118     }
       
   119 
       
   120 // ----------------------------------------------------------------------------
       
   121 //  CGlxDataSourceTaskMde::HandleQueryNewResults
       
   122 // ----------------------------------------------------------------------------
       
   123 //      
       
   124 void CGlxDataSourceTaskMde::HandleQueryNewResults( CMdEQuery& /*aQuery*/,
       
   125                                                      TInt /*aFirstNewItemIndex*/,
       
   126                                                      TInt /*aNewItemCount*/ )
       
   127     {
       
   128     GLX_LOG_ENTRY_EXIT("void CGlxDataSourceTaskMde::HandleQueryNewResults()");
       
   129     // Not used.
       
   130     }
       
   131 
       
   132 
       
   133 // ----------------------------------------------------------------------------
       
   134 //  CGlxDataSourceTaskMde::HandleQueryNewResults
       
   135 // ----------------------------------------------------------------------------
       
   136 //    
       
   137 void CGlxDataSourceTaskMde::HandleQueryNewResults( CMdEQuery& /*aQuery*/,
       
   138                                 TInt /*aNewObjectItemCount*/,
       
   139                                 TInt /*aNewRelationItemCount*/,
       
   140                                 TInt /*aNewEventItemCount*/)
       
   141     {
       
   142     GLX_LOG_ENTRY_EXIT("void CGlxDataSourceTaskMde::HandleQueryNewResults()");
       
   143     // Not used.
       
   144     }
       
   145 
       
   146 
       
   147 // ----------------------------------------------------------------------------
       
   148 // CGlxDataSourceTaskMde::HandleQueryCompleted
       
   149 // ----------------------------------------------------------------------------
       
   150 //
       
   151 void CGlxDataSourceTaskMde::HandleQueryCompleted(CMdEQuery& aQuery, TInt aError)
       
   152     {
       
   153     GLX_LOG_ENTRY_EXIT("void CGlxDataSourceTaskMde::HandleQueryCompleted()");
       
   154     __ASSERT_ALWAYS(&aQuery == iQueries[0], Panic(EGlxPanicQueryLogicError));
       
   155 
       
   156     TInt err = aError;
       
   157     if (err == KErrNone)
       
   158         {
       
   159         TRAP(err, HandleQueryCompletedL(aQuery));
       
   160         }
       
   161 
       
   162     if (err != KErrNone)
       
   163         {
       
   164         HandleRequestComplete(err);
       
   165         }
       
   166     }
       
   167 
       
   168 // ----------------------------------------------------------------------------
       
   169 //  CGlxDataSourceTaskMde::DataSource
       
   170 // ----------------------------------------------------------------------------
       
   171 //   
       
   172 CGlxDataSourceMde* CGlxDataSourceTaskMde::DataSource()
       
   173     {
       
   174     GLX_LOG_ENTRY_EXIT("CGlxDataSourceMde* CGlxDataSourceTaskMde::DataSource()");
       
   175     return static_cast<CGlxDataSourceMde*>(iDataSource);
       
   176     }
       
   177 
       
   178 // ----------------------------------------------------------------------------
       
   179 //  CGlxDataSourceTaskMde::AddMonthFilterL
       
   180 // ----------------------------------------------------------------------------
       
   181 //     
       
   182 void CGlxDataSourceTaskMde::AddMonthFilterL(const TGlxMediaId& aContainerId, TGlxFilterProperties& aFilterProperties)
       
   183     {
       
   184     GLX_LOG_ENTRY_EXIT("void CGlxDataSourceTaskMde::AddMonthFilterL()");
       
   185     CMdEObject* month = DataSource()->Session().GetObjectL(aContainerId.Value());
       
   186     if( !month )
       
   187         {
       
   188         User::Leave(KErrNotFound);
       
   189         }
       
   190     CleanupStack::PushL(month);
       
   191     
       
   192     AddMonthFilterL(month, aFilterProperties);
       
   193         
       
   194     CleanupStack::PopAndDestroy(month);
       
   195     }
       
   196 
       
   197 
       
   198 // ----------------------------------------------------------------------------
       
   199 //  CGlxDataSourceTaskMde::AddMonthFilterL
       
   200 // ----------------------------------------------------------------------------
       
   201 //   
       
   202 void CGlxDataSourceTaskMde::AddMonthFilterL(CMdEObject* aMonth, TGlxFilterProperties& aFilterProperties)
       
   203     {
       
   204     GLX_LOG_ENTRY_EXIT("void CGlxDataSourceTaskMde::AddMonthFilterL()");
       
   205     CMdEPropertyDef* creationDateDef = DataSource()->ObjectDef().GetPropertyDefL(KPropertyDefNameCreationDate);
       
   206     if (!creationDateDef  || creationDateDef->PropertyType() != EPropertyTime)
       
   207         {
       
   208         User::Leave(KErrCorrupt);
       
   209         }
       
   210 
       
   211     CMdEPropertyDef* lmDateDef = DataSource()->ObjectDef().GetPropertyDefL(KPropertyDefNameLastModifiedDate);
       
   212     if (!lmDateDef  || lmDateDef->PropertyType() != EPropertyTime)
       
   213         {
       
   214         User::Leave(KErrCorrupt);
       
   215         }
       
   216         
       
   217     CMdEProperty* startDate;
       
   218     TInt startDateIndex = aMonth->Property(*creationDateDef, startDate);
       
   219     if( KErrNotFound == startDateIndex) 
       
   220         {
       
   221         User::Leave(KErrCorrupt);
       
   222         }
       
   223     aFilterProperties.iStartDate = static_cast<CMdETimeProperty*>(startDate)->Value();
       
   224      
       
   225     CMdEProperty* endDate;
       
   226     TInt endDateIndex = aMonth->Property(*lmDateDef, endDate);
       
   227     if( KErrNotFound == endDateIndex) 
       
   228         {
       
   229         User::Leave(KErrCorrupt);
       
   230         }
       
   231     aFilterProperties.iEndDate = static_cast<CMdETimeProperty*>(endDate)->Value();
       
   232     }
       
   233 
       
   234 // ----------------------------------------------------------------------------
       
   235 //  CGlxDataSourceTaskMde::SetQueryConditionsL
       
   236 // ----------------------------------------------------------------------------
       
   237 //    
       
   238 void CGlxDataSourceTaskMde::SetQueryConditionsL(CMdEQuery& aQuery, const TGlxFilterProperties& aFilterProperties, const TGlxMediaId aContainerId, CMdEObjectDef& aObjectDef)
       
   239     {
       
   240     GLX_LOG_ENTRY_EXIT("void CGlxDataSourceTaskMde::SetQueryConditionsL()");
       
   241     CMdELogicCondition& rootCondition = aQuery.Conditions();
       
   242     CMdEObjectDef* objectDef = &aObjectDef;
       
   243 
       
   244     SetQueryFilterConditionsL(rootCondition, *objectDef, aFilterProperties);
       
   245     SetSortOrderL(aQuery, aObjectDef, aFilterProperties);
       
   246     
       
   247     if( KGlxCollectionRootId != aContainerId.Value() )
       
   248         {
       
   249         CMdELogicCondition* containerCondition = NULL;
       
   250         CMdERelationCondition* relationCondition = NULL;
       
   251         objectDef = &DataSource()->ObjectDef();
       
   252         if( DataSource()->ContainerIsLeft(aObjectDef) )
       
   253             {
       
   254             relationCondition = &rootCondition.AddRelationConditionL(DataSource()->ContainsDef(), ERelationConditionSideRight);
       
   255             containerCondition = &relationCondition->LeftL();
       
   256             }
       
   257         else
       
   258             {
       
   259             relationCondition = &rootCondition.AddRelationConditionL(DataSource()->ContainsDef(), ERelationConditionSideLeft);
       
   260             containerCondition = &relationCondition->RightL();
       
   261             }
       
   262         containerCondition->AddObjectConditionL(aContainerId.Value());
       
   263         }
       
   264 
       
   265     }
       
   266 
       
   267 // ----------------------------------------------------------------------------
       
   268 //  CGlxDataSourceTaskMde::SetQueryFilterConditionsL
       
   269 // ----------------------------------------------------------------------------
       
   270 //  
       
   271 void CGlxDataSourceTaskMde::SetQueryFilterConditionsL(CMdELogicCondition& 
       
   272                                    aLogicCondition, CMdEObjectDef& aObjectDef,
       
   273                                  const TGlxFilterProperties& aFilterProperties)
       
   274     {
       
   275     GLX_LOG_ENTRY_EXIT("void CGlxDataSourceTaskMde::SetQueryFilterConditionsL()");
       
   276     
       
   277     if( aFilterProperties.iUri )
       
   278         {
       
   279         aLogicCondition.AddObjectConditionL(EObjectConditionCompareUri, 
       
   280                                                      *aFilterProperties.iUri);
       
   281         }
       
   282 
       
   283     if( 0 == aObjectDef.Compare(DataSource()->ObjectDef()) ) 
       
   284         {
       
   285         // Filter on content type
       
   286         if ( EGlxFilterVideoAndImages == aFilterProperties.iItemType )
       
   287             {
       
   288             CMdELogicCondition& logicCondition = 
       
   289                 aLogicCondition.AddLogicConditionL(ELogicConditionOperatorOr);
       
   290             logicCondition.AddObjectConditionL( DataSource()->ImageDef() ); 
       
   291             logicCondition.AddObjectConditionL( DataSource()->VideoDef() );
       
   292             }
       
   293         }
       
   294     
       
   295     if( ( aFilterProperties.iMinCount > 0 ) && ( CGlxDataSource::EContainerTypeNotAContainer != DataSource()->ContainerType(&aObjectDef) ) )
       
   296         {
       
   297         CMdEPropertyDef* itemCountProperty = 
       
   298                          aObjectDef.GetPropertyDefL(KPropertyDefNameUsageCount);
       
   299         aLogicCondition.AddPropertyConditionL(*itemCountProperty, 
       
   300                               TMdEIntGreaterEqual(aFilterProperties.iMinCount));
       
   301         }
       
   302 
       
   303     if( 0 != aFilterProperties.iContainsItem.Value() )
       
   304         {
       
   305         
       
   306         if( DataSource()->ContainerIsLeft(aObjectDef) )
       
   307             {
       
   308             CMdERelationCondition& relationCondition = 
       
   309                     aLogicCondition.AddRelationConditionL(DataSource()->ContainsDef(), ERelationConditionSideLeft);
       
   310             relationCondition.RightL().AddObjectConditionL(aFilterProperties.iContainsItem.Value());
       
   311             }
       
   312         else
       
   313             {
       
   314             CMdERelationCondition& relationCondition = aLogicCondition.AddRelationConditionL(DataSource()->ContainsDef(), ERelationConditionSideRight);
       
   315             relationCondition.LeftL().AddObjectConditionL(aFilterProperties.iContainsItem.Value());
       
   316             }
       
   317         }
       
   318         
       
   319     if( EGlxFilterOriginNotUsed != aFilterProperties.iOrigin )
       
   320         {
       
   321         CMdEPropertyDef* originProperty = aObjectDef.GetPropertyDefL(KPropertyDefNameOrigin);
       
   322         if(originProperty)
       
   323             {
       
   324             if( EGlxFilterOriginDownload == aFilterProperties.iOrigin )
       
   325                 {
       
   326 #ifdef GLX_NO_ALL_VIEW
       
   327                 // The download collection shows all but captured items
       
   328                 aLogicCondition.AddPropertyConditionL(*originProperty, TMdEUintNotEqual(MdeConstants::Object::ECamera));
       
   329 #else
       
   330                 // The download collection shows only downloaded items
       
   331                 aLogicCondition.AddPropertyConditionL(*originProperty, TMdEUintEqual(MdeConstants::Object::EDownloaded));
       
   332 #endif            
       
   333                 }
       
   334             }
       
   335         }
       
   336         
       
   337     if( aFilterProperties.iExcludeAnimation )
       
   338         {
       
   339         //__ASSERT_DEBUG((EGlxFilterImage == aFilterProperties.iItemType), Panic(EGlxPanicIllegalArgument));
       
   340         // Exclude any image with a frame count > 1
       
   341         const TInt excludeAllImagesAboveOrEqualToThisFrameCount = 2;
       
   342         CMdEPropertyDef* frameCountProperty = DataSource()->ImageDef().GetPropertyDefL(KPropertyDefNameFrameCount);
       
   343         if( frameCountProperty )
       
   344             {
       
   345             aLogicCondition.AddPropertyConditionL(*frameCountProperty, TMdEIntLess(excludeAllImagesAboveOrEqualToThisFrameCount));
       
   346             }
       
   347         }
       
   348         
       
   349     if( aFilterProperties.iNoDRM )
       
   350         {
       
   351         __ASSERT_DEBUG((EGlxFilterImage == aFilterProperties.iItemType), Panic(EGlxPanicIllegalArgument));
       
   352         // Exclude any image which is DRM protected
       
   353         CMdEPropertyDef* drmProperty = DataSource()->ImageDef().GetPropertyDefL(KPropertyDefNameDRM);
       
   354         if( drmProperty )
       
   355             {
       
   356             aLogicCondition.AddPropertyConditionL(*drmProperty, EFalse);
       
   357             }
       
   358         }
       
   359         
       
   360     if( aFilterProperties.iPath )          // If this is set. Then we need to filter on the Ids it supplies
       
   361         {
       
   362         TArray<TInt> selection = aFilterProperties.iPath->Selection();
       
   363         TInt selectionCount = selection.Count();
       
   364         RArray<TItemId> itemList;
       
   365         CleanupClosePushL(itemList);
       
   366         GLX_DEBUG2("Reading Ids from Path, count = %d", selectionCount);
       
   367         if( selectionCount )
       
   368             {
       
   369             for( TInt i = 0; i < selectionCount; i++ )
       
   370                 {
       
   371                 const TMPXItemId& itemId = aFilterProperties.iPath->IdOfIndex(selection[i]);
       
   372                 itemList.AppendL(itemId);
       
   373                 }
       
   374             aLogicCondition.AddObjectConditionL(itemList);
       
   375             }
       
   376         CleanupStack::Pop(&itemList);
       
   377         }
       
   378         
       
   379     if( !aFilterProperties.iIncludeCameraAlbum )
       
   380         {
       
   381         CMdEObjectCondition& objectCondition = aLogicCondition.AddObjectConditionL(DataSource()->CameraAlbumId().Value());
       
   382         objectCondition.SetNegate(ETrue);
       
   383         }
       
   384     
       
   385     if( TTime(0) != aFilterProperties.iStartDate )
       
   386         {
       
   387         CMdEPropertyDef* creationDateDef = aObjectDef.GetPropertyDefL(KPropertyDefNameCreationDate);
       
   388         if (!creationDateDef  || creationDateDef->PropertyType() != EPropertyTime)
       
   389             {
       
   390             User::Leave(KErrCorrupt);
       
   391             }
       
   392 
       
   393         aLogicCondition.AddPropertyConditionL(*creationDateDef, TMdETimeBetween(aFilterProperties.iStartDate, aFilterProperties.iEndDate));
       
   394         }
       
   395     }
       
   396 
       
   397 // ----------------------------------------------------------------------------
       
   398 //  CGlxDataSourceTaskMde::SetSortOrderL
       
   399 // ----------------------------------------------------------------------------
       
   400 // 
       
   401 void CGlxDataSourceTaskMde::SetSortOrderL(CMdEQuery& aQuery, CMdEObjectDef& aObjectDef, 
       
   402                                          const TGlxFilterProperties& aFilterProperties)
       
   403     {
       
   404     GLX_LOG_ENTRY_EXIT("void CGlxDataSourceTaskMde::SetSortOrderL()");
       
   405     switch(aFilterProperties.iSortOrder)
       
   406         {
       
   407         case EGlxFilterSortOrderAlphabetical:
       
   408             {
       
   409             CMdEPropertyDef* titleProperty = aObjectDef.GetPropertyDefL(KPropertyDefNameTitle);
       
   410             TMdEOrderRule orderRule(*titleProperty, aFilterProperties.iSortDirection == EGlxFilterSortDirectionAscending);
       
   411             orderRule.SetType(EOrderRuleTypeProperty);
       
   412             orderRule.SetCaseSensitive(EFalse);
       
   413             aQuery.AppendOrderRuleL(orderRule);
       
   414             break;
       
   415             }
       
   416          case EGlxFilterSortOrderItemCount:
       
   417             {
       
   418             CMdEPropertyDef* itemCountProperty = aObjectDef.GetPropertyDefL(KPropertyDefNameUsageCount);
       
   419             TMdEOrderRule orderRule(*itemCountProperty, aFilterProperties.iSortDirection == EGlxFilterSortDirectionAscending);
       
   420             orderRule.SetType(EOrderRuleTypeProperty);
       
   421             aQuery.AppendOrderRuleL(orderRule);
       
   422             break;
       
   423             }
       
   424         case EGlxFilterSortOrderCaptureDate:
       
   425             {
       
   426             CMdEPropertyDef* creationDateProperty = aObjectDef.GetPropertyDefL(KPropertyDefNameCreationDate);
       
   427             TMdEOrderRule orderRule(*creationDateProperty, aFilterProperties.iSortDirection == EGlxFilterSortDirectionAscending);
       
   428             orderRule.SetType(EOrderRuleTypeProperty);
       
   429             aQuery.AppendOrderRuleL(orderRule);
       
   430             TMdEOrderRule orderRule2(EOrderRuleTypeItemID, aFilterProperties.iSortDirection == EGlxFilterSortDirectionAscending);
       
   431             aQuery.AppendOrderRuleL(orderRule2);
       
   432             break;
       
   433             }
       
   434          case EGlxFilterSortOrderModifiedDate:
       
   435             {
       
   436             CMdEPropertyDef* modifiedDateProperty = aObjectDef.GetPropertyDefL(KPropertyDefNameLastModifiedDate);
       
   437             TMdEOrderRule orderRule(*modifiedDateProperty, aFilterProperties.iSortDirection == EGlxFilterSortDirectionAscending);
       
   438             orderRule.SetType(EOrderRuleTypeProperty);
       
   439             aQuery.AppendOrderRuleL(orderRule);
       
   440             TMdEOrderRule orderRule2(EOrderRuleTypeItemID, aFilterProperties.iSortDirection == EGlxFilterSortDirectionAscending);
       
   441             aQuery.AppendOrderRuleL(orderRule2);
       
   442             break;
       
   443             }
       
   444         case EGlxFilterSortOrderNotUsed:
       
   445             {
       
   446             break;
       
   447             }
       
   448         }
       
   449     }
       
   450 
       
   451 // ----------------------------------------------------------------------------
       
   452 //  CGlxDataSourceTaskMde::MaxQueryResultsCount
       
   453 // ----------------------------------------------------------------------------
       
   454 // 
       
   455 TInt CGlxDataSourceTaskMde::MaxQueryResultsCount(const TGlxFilterProperties& aFilterProperties) const
       
   456     {
       
   457     GLX_LOG_ENTRY_EXIT("TInt CGlxDataSourceTaskMde::MaxQueryResultsCount()");
       
   458     TInt ret = KMdEQueryDefaultMaxCount;
       
   459     if (aFilterProperties.iLastCaptureDate)
       
   460         {
       
   461         ret = 1;
       
   462         }
       
   463     return ret;
       
   464     }
       
   465 
       
   466 // ----------------------------------------------------------------------------
       
   467 //  CGlxDataSourceTaskMde::RemoveQuery
       
   468 // ----------------------------------------------------------------------------
       
   469 // 
       
   470 void CGlxDataSourceTaskMde::RemoveQuery()
       
   471     {
       
   472     GLX_LOG_ENTRY_EXIT("void CGlxDataSourceTaskMde::RemoveQuery()");
       
   473     CMdEQuery* query = iQueries[0];
       
   474     iQueryTypes.Remove(0);
       
   475     iQueries.Remove(0);
       
   476     query->RemoveObserver(*this);
       
   477     delete query;
       
   478     }
       
   479 
       
   480 // ----------------------------------------------------------------------------
       
   481 //  CGlxDataSourceTaskMde::DoQueryL
       
   482 // ----------------------------------------------------------------------------
       
   483 // 	
       
   484 void CGlxDataSourceTaskMde::DoQueryL(CMdEObjectDef& aObjectDef, 
       
   485         TBool aIsContent, TGlxQueryType aQueryType, TQueryResultMode aResultMode, 
       
   486                                                 const TGlxMediaId& aContainerId)
       
   487     {
       
   488     GLX_LOG_ENTRY_EXIT("void CGlxDataSourceTaskMde::DoQueryL()");
       
   489     
       
   490     CMdEObjectDef* queryBaseObject = &aObjectDef;
       
   491     if( aIsContent )
       
   492         {
       
   493         switch(iFilterProperties.iItemType)
       
   494             {
       
   495             case EGlxFilterImage: 
       
   496                 {
       
   497                 queryBaseObject = &DataSource()->ImageDef();
       
   498                 break;
       
   499                 }
       
   500             case EGlxFilterVideo:
       
   501                 {
       
   502                 queryBaseObject = &DataSource()->VideoDef();
       
   503                 break;
       
   504                 }
       
   505             default:
       
   506                 {
       
   507                 queryBaseObject = &DataSource()->ObjectDef();
       
   508                 break;
       
   509                 }
       
   510             }
       
   511         }
       
   512 
       
   513     CMdEQuery* query = DataSource()->Session().NewObjectQueryL(*DataSource()->NamespaceDef(), *queryBaseObject, this);
       
   514     CleanupStack::PushL(query);
       
   515     
       
   516     SetQueryConditionsL(*query, iFilterProperties, aContainerId, aObjectDef);   
       
   517     query->SetResultMode(aResultMode);
       
   518     
       
   519     CleanupStack::Pop(query);
       
   520     
       
   521     AppendQueryL(query, aQueryType);
       
   522 
       
   523     query->FindL(MaxQueryResultsCount(iFilterProperties));    
       
   524     }
       
   525 
       
   526 // ----------------------------------------------------------------------------
       
   527 // CGlxDataSourceTask::QueueImageVideoObjectQueriesL
       
   528 // ----------------------------------------------------------------------------
       
   529 //
       
   530 void CGlxDataSourceTaskMde::QueueImageVideoObjectQueriesL(const RArray<TItemId>& aObjectIds,
       
   531                                           const TGlxFilterProperties& aFilterProperties)
       
   532     {
       
   533     GLX_LOG_ENTRY_EXIT("void CGlxDataSourceTaskMde::QueueImageVideoObjectQueriesL()");
       
   534     if (aFilterProperties.iItemType == EGlxFilterImage)
       
   535         {
       
   536         // Only perform the image query
       
   537         QueueObjectQueryL(DataSource()->ImageDef(), aObjectIds, EImageVideoQuery);
       
   538         }
       
   539     else if (aFilterProperties.iItemType == EGlxFilterVideo)
       
   540         {
       
   541         // Only perform the video query
       
   542         QueueObjectQueryL(DataSource()->VideoDef(), aObjectIds, EImageVideoQuery);
       
   543         }
       
   544     else
       
   545         {
       
   546         QueueObjectQueryL(DataSource()->ImageDef(), aObjectIds, EImageVideoQuery);
       
   547         QueueObjectQueryL(DataSource()->VideoDef(), aObjectIds, EImageVideoQuery);
       
   548         // Perform both the image and video queries
       
   549         }
       
   550     }
       
   551 
       
   552 // ----------------------------------------------------------------------------
       
   553 // CGlxDataSourceTask::QueueTagObjectQueryL
       
   554 // ----------------------------------------------------------------------------
       
   555 //
       
   556 void CGlxDataSourceTaskMde::QueueTagObjectQueryL(const RArray<TItemId>& aObjectIds)
       
   557     {
       
   558     GLX_LOG_ENTRY_EXIT("void CGlxDataSourceTaskMde::QueueTagObjectQueryL()");
       
   559     QueueObjectQueryL(DataSource()->TagDef(), aObjectIds, EImageVideoQuery);
       
   560     }
       
   561 
       
   562 // ----------------------------------------------------------------------------
       
   563 // CGlxDataSourceTask::QueueAlbumObjectQueryL
       
   564 // ----------------------------------------------------------------------------
       
   565 //
       
   566 void CGlxDataSourceTaskMde::QueueAlbumObjectQueryL(const RArray<TItemId>& aObjectIds)
       
   567     {
       
   568     GLX_LOG_ENTRY_EXIT("void CGlxDataSourceTaskMde::QueueAlbumObjectQueryL()");
       
   569     QueueObjectQueryL(DataSource()->AlbumDef(), aObjectIds, EImageVideoQuery);
       
   570     }
       
   571 
       
   572 
       
   573 void CGlxDataSourceTaskMde::QueueMonthObjectQueryL(const RArray<TItemId>& aObjectIds)
       
   574     {
       
   575     GLX_LOG_ENTRY_EXIT("void CGlxDataSourceTaskMde::QueueMonthObjectQueryL()");
       
   576     QueueObjectQueryL(DataSource()->MonthDef(), aObjectIds, EImageVideoQuery);
       
   577     }
       
   578 
       
   579 // ----------------------------------------------------------------------------
       
   580 // CGlxDataSourceTask::QueueObjectQueryL
       
   581 // ----------------------------------------------------------------------------
       
   582 //
       
   583 void CGlxDataSourceTaskMde::QueueObjectQueryL(CMdEObjectDef& aObjectDef, 
       
   584         const RArray<TItemId>& aObjectIds, const TGlxQueryType& aQueryType)
       
   585     {
       
   586     GLX_LOG_ENTRY_EXIT("void CGlxDataSourceTaskMde::QueueObjectQueryL()");
       
   587     CMdEQuery* query = DataSource()->Session().NewObjectQueryL(*DataSource()->NamespaceDef(), aObjectDef,  this);
       
   588     CleanupStack::PushL(query);
       
   589     
       
   590     CMdELogicCondition& lc = query->Conditions();
       
   591     lc.AddObjectConditionL(aObjectIds);
       
   592  
       
   593     query->SetResultMode(EQueryResultModeObjectWithoutFreetexts);
       
   594     
       
   595     CleanupStack::Pop(query);
       
   596     AppendQueryL(query, aQueryType);
       
   597     
       
   598     }
       
   599 
       
   600 // ----------------------------------------------------------------------------
       
   601 //  CGlxDataSourceTaskMde::AppendQueryL
       
   602 // ----------------------------------------------------------------------------
       
   603 // 
       
   604 void CGlxDataSourceTaskMde::AppendQueryL(CMdEQuery* aQuery, const TGlxQueryType& aQueryType)
       
   605     {
       
   606     GLX_LOG_ENTRY_EXIT("void CGlxDataSourceTaskMde::AppendQueryL()");
       
   607     CleanupStack::PushL(aQuery);
       
   608     
       
   609     TInt err = iQueryTypes.Append(aQueryType);
       
   610     
       
   611     if (KErrNone == err)
       
   612         {
       
   613         iQueries.AppendL(aQuery);
       
   614         CleanupStack::Pop(aQuery);
       
   615         }
       
   616     else
       
   617         {
       
   618         User::Leave(err);
       
   619         }
       
   620     }
       
   621 
       
   622 // ----------------------------------------------------------------------------
       
   623 // CGlxDataSourceTaskMde::ExecuteQueryL
       
   624 // ----------------------------------------------------------------------------
       
   625 // 
       
   626 void CGlxDataSourceTaskMde::ExecuteQueryL()
       
   627     {
       
   628     GLX_LOG_ENTRY_EXIT("void CGlxDataSourceTaskMde::ExecuteQueryL()");
       
   629     __ASSERT_DEBUG(iQueries.Count(), Panic(EGlxPanicQueryLogicError));
       
   630     iQueries[0]->FindL();
       
   631     }
       
   632 
       
   633 // ----------------------------------------------------------------------------
       
   634 //  CGlxDataSourceTaskMde::HandleQueryCompletedL
       
   635 // ----------------------------------------------------------------------------
       
   636 // 
       
   637 void CGlxDataSourceTaskMde::HandleQueryCompletedL(CMdEQuery& aQuery)
       
   638     {
       
   639     GLX_LOG_ENTRY_EXIT("void CGlxDataSourceTaskMde::HandleQueryCompletedL()");
       
   640     DoHandleQueryCompletedL(aQuery);
       
   641     RemoveQuery();
       
   642     DoNextQueryL();
       
   643     }
       
   644 
       
   645 // ----------------------------------------------------------------------------
       
   646 //  CGlxDataSourceTaskMde::DestroyQueries
       
   647 // ----------------------------------------------------------------------------
       
   648 // 
       
   649 void CGlxDataSourceTaskMde::DestroyQueries()
       
   650     {
       
   651     GLX_LOG_ENTRY_EXIT("void CGlxDataSourceTaskMde::DestroyQueries()");
       
   652     for (TInt i = 0; i < iQueries.Count(); i++)
       
   653         {
       
   654         // Ensure that there are not any running queries
       
   655         iQueries[i]->RemoveObserver(*this);
       
   656         iQueries[i]->Cancel();
       
   657         }
       
   658     iQueries.ResetAndDestroy();
       
   659     iQueryTypes.Close();
       
   660     }
       
   661 
       
   662 
       
   663