diff -r 000000000000 -r 4e91876724a2 photosgallery/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcetaskmdsidlist.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/photosgallery/collectionframework/datasource/plugins/glxdatasourcemde2.5/src/glxdatasourcetaskmdsidlist.cpp Thu Dec 17 08:45:44 2009 +0200 @@ -0,0 +1,314 @@ +/* +* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: The Data Source Task MDS IDlist class +* +*/ + + + + +/** + * @internal reviewed 11/07/2007 by M Byrne + */ + +#include "glxdatasourcetaskmdsidlist.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "glxdatasourcemds.h" +#include "glxdatasourcemds.hrh" +#include "glxdatasourcemdsutility.h" + +// CONSTANTS +//const TInt KGlxAlbumPromotionPosition = 0; + +_LIT(KPropertyDefNameCreationDate, "CreationDate"); + +// ---------------------------------------------------------------------------- +// Constructor +// ---------------------------------------------------------------------------- +// +CGlxDataSourceTaskMdeIdList::CGlxDataSourceTaskMdeIdList(CGlxIdListRequest* aRequest, + MGlxDataSourceRequestObserver& aObserver, CGlxDataSource* aDataSource) + : CGlxDataSourceTaskMde(aRequest, aObserver, aDataSource) + { + TRACER("CGlxDataSourceTaskMdeIdList::CGlxDataSourceTaskMdeIdList()") + iFilterProperties = TGlxFilterFactory::ExtractAttributes(iRequest->Filter()); + } + +// ---------------------------------------------------------------------------- +// Destructor +// ---------------------------------------------------------------------------- +// +CGlxDataSourceTaskMdeIdList::~CGlxDataSourceTaskMdeIdList() + { + TRACER("CGlxDataSourceTaskMdeIdList::~CGlxDataSourceTaskMdeIdList()") + // No implementation required + } + +// ---------------------------------------------------------------------------- +// CGlxDataSourceTaskMde::FilterAvailableComplete +// ---------------------------------------------------------------------------- +// +void CGlxDataSourceTaskMdeIdList::FilterAvailableComplete( + const RArray& aIdArray, TInt aErrorCode) + { + TRACER("CGlxDataSourceTaskMdeIdList::FilterAvailableComplete()") + DoPostFilterComplete(aIdArray, aErrorCode); + } + +// ---------------------------------------------------------------------------- +// CGlxDataSourceTaskMdeIdList::ExecuteRequestL +// ---------------------------------------------------------------------------- +// +void CGlxDataSourceTaskMdeIdList::ExecuteRequestL() + { + TRACER("CGlxDataSourceTaskMdeIdList::ExecuteRequestL()") + CGlxIdListRequest* request = static_cast(iRequest); + TGlxMediaId container = request->ContainerId(); + TGlxQueryType queryType = EIdListQuery; + TQueryResultMode resultMode = EQueryResultModeId; + CMdEObjectDef* objectDef = &DataSource()->ObjectDef(); + TBool isContent = ETrue; + + if( KGlxCollectionRootId == container.Value() ) // The root. + { + switch(request->CollectionPluginUid().iUid) + { + + case KGlxCollectionPluginAlbumsImplementationUid: + { + isContent = EFalse; + objectDef = &DataSource()->AlbumDef(); + break; + } + case KGlxCollectionPluginCameraImplementationUid: + { + iFilterProperties.iOrigin = EGlxFilterOriginCamera; + break; + } + case KGlxTagCollectionPluginImplementationUid: + { + isContent = EFalse; + objectDef = &DataSource()->TagDef(); + break; + } + case KGlxCollectionPluginMonthsImplementationUid: + { + iFilterProperties.iOrigin = EGlxFilterOriginAll; + container = TGlxMediaId(KGlxCollectionRootId); + resultMode = EQueryResultModeItem; + break; + } + case KGlxCollectionPluginImageViewerImplementationUid: + { + RArray list; + CleanupClosePushL(list); + list.AppendL(TGlxMediaId(request->CollectionPluginUid().iUid)); + DoPostFilterComplete(list, KErrNone); + CleanupStack::PopAndDestroy(&list); + return; + } + default: + { + // default gallery query returns all objects as per filter + break; + } + } + } + else // return the content of a container + { + switch(request->CollectionPluginUid().iUid) + { + case KGlxCollectionPluginAlbumsImplementationUid: + { + objectDef = &DataSource()->AlbumDef(); + break; + } + case KGlxTagCollectionPluginImplementationUid: + { + objectDef = &DataSource()->TagDef(); + break; + } + case KGlxCollectionPluginMonthsImplementationUid: + { + iFilterProperties.iOrigin = EGlxFilterOriginAll; + AddMonthFilterL(container, iFilterProperties); + container = TGlxMediaId(KGlxCollectionRootId); + break; + } + default: + { + User::Leave(KErrNotSupported); + break; + } + } + } + + DoQueryL(*objectDef, isContent, queryType, resultMode, container); + } + +// ---------------------------------------------------------------------------- +// CGlxDataSourceTaskMde::DoHandleQueryCompletedL +// ---------------------------------------------------------------------------- +// +void CGlxDataSourceTaskMdeIdList::DoHandleQueryCompletedL(CMdEQuery& /*aQuery*/) + { + TRACER("CGlxDataSourceTaskMdeIdList::DoHandleQueryCompletedL()") + __ASSERT_DEBUG(iQueryTypes[0] == EIdListQuery, Panic(EGlxPanicLogicError)); + DoHandleListQueryCompletedL(); + } + +// ---------------------------------------------------------------------------- +// CGlxDataSourceTaskMdeIdList::DoHandleListQueryCompletedL +// ---------------------------------------------------------------------------- +// +void CGlxDataSourceTaskMdeIdList::DoHandleListQueryCompletedL() + { + TRACER("CGlxDataSourceTaskMdeIdList::DoHandleListQueryCompletedL()") + if(iQueries[0]->ResultMode() == EQueryResultModeItem) + { + DoMonthListCreationL(*iQueries[0], iFilterProperties); + } + else // only id or item supported + { + + RArray localList; + CleanupClosePushL(localList); + NGlxDataSourceMdsUtility::CopyItemIdArrayL(localList,iQueries[0]->ResultIds()); + PostFilterL(localList, iFilterProperties); + CleanupStack::PopAndDestroy(&localList); + } + } + +// ---------------------------------------------------------------------------- +// CGlxDataSourceTaskMdeIdList::DoMonthListCreationL +// ---------------------------------------------------------------------------- +// +void CGlxDataSourceTaskMdeIdList::DoMonthListCreationL(CMdEQuery& aQuery, + const TGlxFilterProperties& aFilterProperties) + { + TRACER("CGlxDataSourceTaskMdeIdList::DoMonthListCreationL()") + CMdEProperty* time; + CMdEPropertyDef& creationDateDef = DataSource()->ObjectDef().GetPropertyDefL(KPropertyDefNameCreationDate); + if (creationDateDef.PropertyType() != EPropertyTime) + { + User::Leave(KErrCorrupt); + } + RArray monthList; + CleanupClosePushL(monthList); + TTime lastMonth; + TTime currentMonth; + TInt count = aQuery.Count(); + for( TInt i = 0 ; i < count ; i++ ) + { + CMdEObject& object = (CMdEObject&)aQuery.ResultItem(i); + TInt timeIndex = object.Property(creationDateDef, time); + if( KErrNotFound == timeIndex ) + { + User::Leave(KErrCorrupt); + } + currentMonth = static_cast(time)->Value(); + if( !DataSource()->SameMonth(lastMonth, currentMonth) ) + { + const TGlxMediaId monthId = DataSource()->GetMonthIdL(currentMonth); + monthList.AppendL(monthId); + lastMonth = currentMonth; + } + } + PostFilterL(monthList, aFilterProperties); + CleanupStack::PopAndDestroy(&monthList); + } + +// ---------------------------------------------------------------------------- +// CGlxDataSourceTaskMdeIdList::DoPostFilterComplete +// ---------------------------------------------------------------------------- +// +void CGlxDataSourceTaskMdeIdList::DoPostFilterComplete( + const RArray& aIdArray, TInt aErrorCode) + { + TRACER("CGlxDataSourceTaskMdeIdList::DoPostFilterComplete()") + if (aErrorCode == KErrNone) + { + TRAP(aErrorCode, ListToMediaL(aIdArray)); + } + + HandleRequestComplete(aErrorCode); + } + +// ---------------------------------------------------------------------------- +// CGlxDataSourceTaskMde::PostFilterL +// ---------------------------------------------------------------------------- +// +void CGlxDataSourceTaskMdeIdList::PostFilterL(const RArray& + aFilteredList, const TGlxFilterProperties& aFilterProperties) + { + TRACER("CGlxDataSourceTaskMdeIdList::PostFilterL()") + + if( aFilterProperties.iPromoteSystemItems ) + { + RArray list = aFilteredList; + /* + TInt favoritesIndex = list.Find(DataSource()->FavoritesId()); + if( KErrNotFound != favoritesIndex ) + { + list.Remove(favoritesIndex); + list.Insert(DataSource()->FavoritesId(), KGlxAlbumPromotionPosition); + } + */ + DoPostFilterComplete(list, KErrNone); + } + else + { + DoPostFilterComplete(aFilteredList, KErrNone); + } + }