diff -r 000000000000 -r 4e91876724a2 photosgallery/collectionframework/datasource/plugins/glxdatasourcemde/src/glxdatasourcetaskmdeidlist.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/photosgallery/collectionframework/datasource/plugins/glxdatasourcemde/src/glxdatasourcetaskmdeidlist.cpp Thu Dec 17 08:45:44 2009 +0200 @@ -0,0 +1,309 @@ +/* +* Copyright (c) 2006 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 MDE ID List class +* +*/ + + + + +/** + * @internal reviewed 11/07/2007 by M Byrne + */ + +#include "glxdatasourcetaskmdeidlist.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 "glxdatasourcemde.h" +#include "glxdatasourcemde.hrh" + +// CONSTANTS +const TInt KGlxAlbumPromotionPosition = 0; + +_LIT(KPropertyDefNameCreationDate, "CreationDate"); + +// ---------------------------------------------------------------------------- +// Constructor +// ---------------------------------------------------------------------------- +// +CGlxDataSourceTaskMdeIdList::CGlxDataSourceTaskMdeIdList(CGlxIdListRequest* aRequest, MGlxDataSourceRequestObserver& aObserver, CGlxDataSource* aDataSource) + : CGlxDataSourceTaskMde(aRequest, aObserver, aDataSource) + { + GLX_LOG_ENTRY_EXIT("CGlxDataSourceTaskMdeIdList::CGlxDataSourceTaskMdeIdList()"); + iFilterProperties = TGlxFilterFactory::ExtractAttributes(iRequest->Filter()); + } + +// ---------------------------------------------------------------------------- +// Destructor +// ---------------------------------------------------------------------------- +// +CGlxDataSourceTaskMdeIdList::~CGlxDataSourceTaskMdeIdList() + { + GLX_LOG_ENTRY_EXIT("CGlxDataSourceTaskMdeIdList::~CGlxDataSourceTaskMdeIdList()"); + // No implementation required + } + +// ---------------------------------------------------------------------------- +// CGlxDataSourceTaskMde::FilterAvailableComplete +// ---------------------------------------------------------------------------- +// +void CGlxDataSourceTaskMdeIdList::FilterAvailableComplete( + const RArray& aIdArray, TInt aErrorCode) + { + GLX_LOG_ENTRY_EXIT("void CGlxDataSourceTaskMdeIdList::FilterAvailableComplete()"); + DoPostFilterComplete(aIdArray, aErrorCode); + } + +// ---------------------------------------------------------------------------- +// CGlxDataSourceTaskMdeIdList::ExecuteRequestL +// ---------------------------------------------------------------------------- +// +void CGlxDataSourceTaskMdeIdList::ExecuteRequestL() + { + GLX_LOG_ENTRY_EXIT("void 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: + { + container = DataSource()->CameraAlbumId(); + objectDef = &DataSource()->AlbumDef(); + break; + } + case KGlxTagCollectionPluginImplementationUid: + { + isContent = EFalse; + objectDef = &DataSource()->TagDef(); + break; + } + case KGlxCollectionPluginMonthsImplementationUid: + { + container = DataSource()->CameraAlbumId(); + objectDef = &DataSource()->AlbumDef(); + resultMode = EQueryResultModeObjectWithoutFreetexts; + break; + } + 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: + { + AddMonthFilterL(container, iFilterProperties); + container = DataSource()->CameraAlbumId(); + objectDef = &DataSource()->AlbumDef(); + break; + } + default: + { + User::Leave(KErrNotSupported); + break; + } + } + } + + DoQueryL(*objectDef, isContent, queryType, resultMode, container); + } + +// ---------------------------------------------------------------------------- +// CGlxDataSourceTaskMde::DoHandleQueryCompletedL +// ---------------------------------------------------------------------------- +// +void CGlxDataSourceTaskMdeIdList::DoHandleQueryCompletedL(CMdEQuery& /*aQuery*/) + { + GLX_LOG_ENTRY_EXIT("void CGlxDataSourceTaskMdeIdList::DoHandleQueryCompletedL()"); + __ASSERT_DEBUG(iQueryTypes[0] == EIdListQuery, Panic(EGlxPanicLogicError)); + DoHandleListQueryCompletedL(); + } + +// ---------------------------------------------------------------------------- +// CGlxDataSourceTaskMdeIdList::DoHandleListQueryCompletedL +// ---------------------------------------------------------------------------- +// +void CGlxDataSourceTaskMdeIdList::DoHandleListQueryCompletedL() + { + GLX_LOG_ENTRY_EXIT("void CGlxDataSourceTaskMdeIdList::DoHandleListQueryCompletedL()"); + if( EQueryResultModeObjectWithoutFreetexts == iQueries[0]->ResultMode() ) + { + DoMonthListCreationL(*iQueries[0], iFilterProperties); + } + else // only id or item supported + { + const RArray& localList = reinterpret_cast&>(iQueries[0]->ResultIds()); + PostFilterL(localList, iFilterProperties); + + } + } + +// ---------------------------------------------------------------------------- +// CGlxDataSourceTaskMdeIdList::DoMonthListCreationL +// ---------------------------------------------------------------------------- +// +void CGlxDataSourceTaskMdeIdList::DoMonthListCreationL(CMdEQuery& aQuery, + const TGlxFilterProperties& aFilterProperties) + { + GLX_LOG_ENTRY_EXIT("void CGlxDataSourceTaskMdeIdList::DoMonthListCreationL()"); + CMdEProperty* time; + CMdEPropertyDef* creationDateDef = DataSource()->ObjectDef().GetPropertyDefL(KPropertyDefNameCreationDate); + if (!creationDateDef || 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) + { + GLX_LOG_ENTRY_EXIT("void CGlxDataSourceTaskMdeIdList::DoPostFilterComplete()"); + if (aErrorCode == KErrNone) + { + TRAP(aErrorCode, ListToMediaL(aIdArray)); + } + + HandleRequestComplete(aErrorCode); + } + +// ---------------------------------------------------------------------------- +// CGlxDataSourceTaskMde::PostFilterL +// ---------------------------------------------------------------------------- +// +void CGlxDataSourceTaskMdeIdList::PostFilterL(const RArray& + aFilteredList, const TGlxFilterProperties& aFilterProperties) + { + GLX_LOG_ENTRY_EXIT("void CGlxDataSourceTaskMdeIdList::PostFilterL()"); +/* if( TSize(0,0) != aFilterProperties.iThumbnailLoadability ) + { + DataSource()->ThumbnailCreator().FilterAvailableThumbnailsL + (aFilteredList.Array(), iFilterProperties.iThumbnailLoadability, *this); + } + else + { +*/ if( aFilterProperties.iPromoteSystemItems ) + { + RArray list = aFilteredList; + TInt favoritesIndex = list.Find(DataSource()->FavoritesId()); + if( KErrNotFound != favoritesIndex ) + { + list.Remove(favoritesIndex); + list.Insert(DataSource()->FavoritesId(), KGlxAlbumPromotionPosition); + } + TInt cameraAlbumIndex = list.Find(DataSource()->CameraAlbumId()); + if( KErrNotFound != cameraAlbumIndex ) + { + list.Remove(cameraAlbumIndex); + list.Insert(DataSource()->CameraAlbumId(), KGlxAlbumPromotionPosition); + } + DoPostFilterComplete(list, KErrNone); + } + else + { + DoPostFilterComplete(aFilteredList, KErrNone); + } +// } + }