diff -r 45459746d5e8 -r 27f2d7aec52a engine/collectionframework/datasource/plugins/glxdatasourcemde/src/glxdatasourcemde.cpp --- a/engine/collectionframework/datasource/plugins/glxdatasourcemde/src/glxdatasourcemde.cpp Mon Sep 27 15:13:20 2010 +0530 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,661 +0,0 @@ -/* -* 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: -* -*/ - - - -/** - * @internal reviewed 11/07/2007 by M Byrne - */ - - -// INCLUDE FILES -#include "glxdatasourcemde.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "glxdatasourcetaskmde.h" -#include "glxdatasourcetaskmdeattribute.h" -#include "glxdatasourcetaskmdecommand.h" -#include "glxdatasourcetaskmdeidlist.h" -#include "glxdatasourcetaskmdethumbnail.h" - -_LIT(KGlxMdeDataSourceThumbnailDatabase, "glxmdstn"); - -_LIT(KObjectDefLocation, "Location"); -_LIT(KObjectDefNameAlbum, "Album"); -_LIT(KObjectDefNameImage, "Image"); -_LIT(KObjectDefNameMedia, "MediaObject"); -_LIT(KObjectDefNameObject, "Object"); -_LIT(KObjectDefNameTag, "Tag"); -_LIT(KObjectDefNameVideo, "Video"); -_LIT(KPropertyDefNameCreationDate, "CreationDate"); -_LIT(KPropertyDefNameLastModifiedDate, "LastModifiedDate"); -_LIT(KPropertyDefNameSize, "Size"); -_LIT(KPropertyDefNameTitle, "Title"); -_LIT(KRelationDefNameContains, "Contains"); - -_LIT(KObjectDefNameMonth, "MediaObject");/// @todo nasty hack remove and use base object - -_LIT(KGlxMdeCameraAlbumUri, "Camera album"); -_LIT(KGlxMdeFavoritesUri, "Favorites"); - -#undef __USING_INTELLIGENT_UPDATE_FILTERING - -// ============================ MEMBER FUNCTIONS ============================== - -CGlxDataSourceMde* CGlxDataSourceMde::NewL() - { - GLX_LOG_ENTRY_EXIT("CGlxDataSourceMde* CGlxDataSourceMde::NewL()"); - CGlxDataSourceMde* ds = new (ELeave) CGlxDataSourceMde(); - CleanupStack::PushL(ds); - ds->ConstructL(); - CleanupStack::Pop(ds); - return ds; - } - -CGlxDataSourceMde::~CGlxDataSourceMde() - { - GLX_LOG_ENTRY_EXIT("CGlxDataSourceMde::~CGlxDataSourceMde()"); - delete iSession; - if (iThumbnailCreator) - { - iThumbnailCreator->Close(iThumbnailDatabase); - } - delete iThumbnailDatabase; - iFs.Close(); - RFbsSession::Disconnect(); - iMonthArray.Close(); - iMonthList.Close(); - iUpdateData.Close(); - delete iUpdateCallback; - delete iCreateSessionCallback; - } - -CGlxDataSourceMde::CGlxDataSourceMde() - { - GLX_LOG_ENTRY_EXIT("CGlxDataSourceMde::CGlxDataSourceMde()"); - } - -void CGlxDataSourceMde::ConstructL() - { - GLX_LOG_ENTRY_EXIT("void CGlxDataSourceMde::ConstructL()"); - iDataSourceReady = EFalse; - User::LeaveIfError(iFs.Connect()); - iSession = CMdESession::NewL( *this ); - - User::LeaveIfError(RFbsSession::Connect()); - iThumbnailCreator = CGlxtnThumbnailCreator::InstanceL(); - iThumbnailDatabase = CGlxtnThumbnailDatabase::NewL( - KGlxMdeDataSourceThumbnailDatabase, this); - iCreateSessionCallback = new ( ELeave ) - CAsyncCallBack( TCallBack( CreateSession, this ), CActive::EPriorityHigh ); - iUpdateCallback = new ( ELeave ) - CAsyncCallBack( TCallBack( ProcessItemUpdate, this ), CActive::EPriorityLow ); - iUpdateData.Reserve(100); // ignore if it fails - } - -// ---------------------------------------------------------------------------- -// from MMdESessionObserver -// CMPXCollectionMdEPlugin::HandleSessionOpened -// ---------------------------------------------------------------------------- -// -void CGlxDataSourceMde::HandleSessionOpened( CMdESession& aSession, TInt aError ) - { - GLX_LOG_ENTRY_EXIT("void CGlxDataSourceMde::HandleSessionOpened(CMdESession& aSession, TInt aError)"); - if( KErrNone != aError ) - { - HandleSessionError(aSession, aError); - } - TRAPD(err, DoSessionInitL()); - if( KErrNone != err ) - { - HandleSessionError(aSession, err); - } - - iSessionOpen = ETrue; - iDataSourceReady = ETrue; - TryStartTask(ETrue); - } - -// ---------------------------------------------------------------------------- -// from MMdESessionObserver -// CMPXCollectionMdEPlugin::HandleSessionError -// ---------------------------------------------------------------------------- -// -void CGlxDataSourceMde::HandleSessionError(CMdESession& /*aSession*/, TInt /*aError*/ ) - { - GLX_LOG_ENTRY_EXIT("void CGlxDataSourceMde::HandleSessionError(CMdESession& /*aSession*/, TInt /*aError*/)"); - iSession = NULL; - iDataSourceReady = EFalse; - iSessionOpen = EFalse; - iCreateSessionCallback->CallBack(); - } - - -CGlxDataSourceTask* CGlxDataSourceMde::CreateTaskL(CGlxRequest* aRequest, MGlxDataSourceRequestObserver& aObserver) - { - GLX_LOG_ENTRY_EXIT("CGlxDataSourceTask* CGlxDataSourceMde::CreateTaskL(CGlxRequest* aRequest, MGlxDataSourceRequestObserver& aObserver)"); - if(dynamic_cast(aRequest)) - { - CleanupStack::PushL(aRequest); - CGlxDataSourceTaskMdeCommand* task = new (ELeave) CGlxDataSourceTaskMdeCommand(static_cast(aRequest), aObserver, this); - CleanupStack::Pop(aRequest); // now owned by task - CleanupStack::PushL(task); - task->ConstructL(); - CleanupStack::Pop(task); - return task; - } - else if (dynamic_cast< CGlxGetRequest *>(aRequest)) - { - CleanupStack::PushL(aRequest); - CGlxDataSourceTaskMdeAttribute* task = new (ELeave) CGlxDataSourceTaskMdeAttribute(static_cast(aRequest), aObserver, this); - CleanupStack::Pop(aRequest); // now owned by task - CleanupStack::PushL(task); - task->ConstructL(); - CleanupStack::Pop(task); - return task; - } - else if (dynamic_cast< CGlxIdListRequest *>(aRequest)) - { - CleanupStack::PushL(aRequest); - CGlxDataSourceTaskMdeIdList* task = new (ELeave) CGlxDataSourceTaskMdeIdList(static_cast(aRequest), aObserver, this); - CleanupStack::Pop(aRequest); // now owned by task - CleanupStack::PushL(task); - task->ConstructL(); - CleanupStack::Pop(task); - return task; - } - else if (dynamic_cast< CGlxThumbnailRequest *>(aRequest)) - { - CleanupStack::PushL(aRequest); - CGlxDataSourceTaskMdeThumbnail* task = new (ELeave) CGlxDataSourceTaskMdeThumbnail(static_cast(aRequest), aObserver, this); - CleanupStack::Pop(aRequest); // now owned by task - CleanupStack::PushL(task); - task->ConstructL(); - CleanupStack::Pop(task); - return task; - } - else - { - User::Leave(KErrNotSupported); - return NULL; // stops compiler warning - } - } - -void CGlxDataSourceMde::ThumbnailAvailable(const TGlxMediaId& /*aId*/, const TSize& /*aSize*/) - { - GLX_LOG_ENTRY_EXIT("void CGlxDataSourceMde::ThumbnailAvailable()"); - // no implementation - } - -void CGlxDataSourceMde::BackgroundThumbnailError(const TGlxMediaId& aId, TInt aError) - { - GLX_LOG_ENTRY_EXIT("void CGlxDataSourceMde::BackgroundThumbnailError()"); - TSize size(0, 0); - TRAP_IGNORE(BackgroundThumbnailMessageL(aId, size, aError)); - } - -void CGlxDataSourceMde::BackgroundThumbnailMessageL(const TGlxMediaId& aId, const TSize& aSize, TInt aError) - { - GLX_LOG_ENTRY_EXIT("void CGlxDataSourceMde::BackgroundThumbnailMessageL()"); - CMPXMessage* message = CMPXMessage::NewL(); - CleanupStack::PushL(message); - message->SetTObjectValueL(KMPXMessageGeneralId, KGlxMessageIdBackgroundThumbnail); - message->SetTObjectValueL(KGlxBackgroundThumbnailMediaId, aId.Value()); - message->SetTObjectValueL(KGlxBackgroundThumbnailSize, aSize); - message->SetTObjectValueL(KGlxBackgroundThumbnailError, aError); - BroadcastMessage(*message); - CleanupStack::PopAndDestroy(message); - } - -void CGlxDataSourceMde::DoSessionInitL() - { - GLX_LOG_ENTRY_EXIT("void CGlxDataSourceMde::DoSessionInitL()"); - /// @todo check schema version number - iNameSpaceDef = iSession->GetDefaultNamespaceDefL(); - if ( !iNameSpaceDef ) - { - User::Leave(KErrCorrupt); - } - - CMdEObject* cameraAlbum = iSession->GetObjectL(KGlxMdeCameraAlbumUri); - if ( !cameraAlbum ) - { - User::Leave(KErrCorrupt); - } - iCameraAlbumId = (TGlxMediaId)cameraAlbum->Id(); - delete cameraAlbum; - - CMdEObject* favorites = iSession->GetObjectL(KGlxMdeFavoritesUri); - if ( !favorites ) - { - User::Leave(KErrCorrupt); - } - iFavoritesId = (TGlxMediaId)favorites->Id(); - delete favorites; - - iContainsDef = iNameSpaceDef->GetRelationDefL(KRelationDefNameContains); - - iObjectDef = iNameSpaceDef->GetObjectDefL(KObjectDefNameObject); - iImageDef = iNameSpaceDef->GetObjectDefL(KObjectDefNameImage); - iVideoDef = iNameSpaceDef->GetObjectDefL(KObjectDefNameVideo); - iMediaDef = iNameSpaceDef->GetObjectDefL(KObjectDefNameMedia); - iAlbumDef = iNameSpaceDef->GetObjectDefL(KObjectDefNameAlbum); - iTagDef = iNameSpaceDef->GetObjectDefL(KObjectDefNameTag); - iMonthDef = iNameSpaceDef->GetObjectDefL(KObjectDefNameMonth); - iLocationDef = iNameSpaceDef->GetObjectDefL(KObjectDefLocation); - - AddMdEObserversL(); - - PrepareMonthsL(); - } - -void CGlxDataSourceMde::AddMdEObserversL() - { - GLX_LOG_ENTRY_EXIT("void CGlxDataSourceMde::AddMdEObserversL()"); - iSession->AddRelationObserverL(*this); - iSession->AddRelationPresentObserverL(*this); - - iSession->AddObjectObserverL(*this); - iSession->AddObjectPresentObserverL(*this); - } - -void CGlxDataSourceMde::HandleObjectAdded(CMdESession& /*aSession*/, const RArray& aObjectIdArray) - { - GLX_LOG_ENTRY_EXIT("void CGlxDataSourceMde::HandleObjectAdded()"); - ProcessUpdateArray(aObjectIdArray, EMPXItemInserted, ETrue); - } - -void CGlxDataSourceMde::HandleObjectModified(CMdESession& /*aSession*/, const RArray& aObjectIdArray) - { - GLX_LOG_ENTRY_EXIT("void CGlxDataSourceMde::HandleObjectModified()"); - ProcessUpdateArray(aObjectIdArray, EMPXItemModified, ETrue); - } - -void CGlxDataSourceMde::HandleObjectRemoved(CMdESession& /*aSession*/, const RArray& aObjectIdArray) - { - GLX_LOG_ENTRY_EXIT("void CGlxDataSourceMde::HandleObjectRemoved()"); - ProcessUpdateArray(aObjectIdArray, EMPXItemDeleted, ETrue); - } - -void CGlxDataSourceMde::HandleObjectPresent(CMdESession& /*aSession*/, const RArray& aObjectIdArray) - { - GLX_LOG_ENTRY_EXIT("void CGlxDataSourceMde::HandleObjectPresent()"); - ProcessUpdateArray(aObjectIdArray, EMPXItemInserted, ETrue); - } -void CGlxDataSourceMde::HandleObjectNotPresent(CMdESession& /*aSession*/, const RArray& aObjectIdArray) - { - GLX_LOG_ENTRY_EXIT("void CGlxDataSourceMde::HandleObjectNotPresent()"); - ProcessUpdateArray(aObjectIdArray, EMPXItemDeleted, ETrue); - } -void CGlxDataSourceMde::HandleRelationAdded(CMdESession& /*aSession*/, const RArray& aRelationIdArray) - { - GLX_LOG_ENTRY_EXIT("void CGlxDataSourceMde::HandleRelationAdded()"); - ProcessUpdateArray(aRelationIdArray, EMPXItemInserted, EFalse); - } -void CGlxDataSourceMde::HandleRelationRemoved(CMdESession& /*aSession*/, const RArray& aRelationIdArray) - { - GLX_LOG_ENTRY_EXIT("void CGlxDataSourceMde::HandleRelationRemoved()"); - ProcessUpdateArray(aRelationIdArray, EMPXItemDeleted, EFalse); - } -void CGlxDataSourceMde::HandleRelationModified(CMdESession& /*aSession*/, const RArray& /*aRelationIdArray*/) - { - GLX_LOG_ENTRY_EXIT("void CGlxDataSourceMde::HandleRelationModified()"); - // not used until ordinals are required - } -void CGlxDataSourceMde::HandleRelationPresent(CMdESession& /*aSession*/, const RArray& aRelationIdArray) - { - GLX_LOG_ENTRY_EXIT("void CGlxDataSourceMde::HandleRelationPresent()"); - ProcessUpdateArray(aRelationIdArray, EMPXItemInserted, EFalse); - } -void CGlxDataSourceMde::HandleRelationNotPresent(CMdESession& /*aSession*/, const RArray& aRelationIdArray) - { - GLX_LOG_ENTRY_EXIT("void CGlxDataSourceMde::HandleRelationNotPresent()"); - ProcessUpdateArray(aRelationIdArray, EMPXItemDeleted, EFalse); - } -void CGlxDataSourceMde::ProcessUpdateArray(const RArray& aArray, TMPXChangeEventType aType, TBool aIsObject) - { - GLX_LOG_ENTRY_EXIT("void CGlxDataSourceMde::ProcessUpdateArray()"); - // only need one message so process first item - TUpdateData update; - update.iId = aArray[0]; - update.iType = aType; - update.iIsObject = aIsObject; - if( iUpdateData.Count() ) - { - if( ( iUpdateData[0].iType == aType ) && ( iUpdateData[0].iIsObject ) ) - { - return; - } - } - if( iUpdateData.Append(update) == KErrNone ) // if we can't allocate space for the update, ignore it - { - iUpdateCallback->CallBack(); - } - } -TInt CGlxDataSourceMde::CreateSession(TAny* aPtr) - { - GLX_LOG_ENTRY_EXIT("TInt CGlxDataSourceMde::CreateSession(TAny* aPtr)"); - CGlxDataSourceMde* self - = reinterpret_cast( aPtr ); - TRAP_IGNORE(self->CreateSessionL()); - return 0; - } - -void CGlxDataSourceMde::CreateSessionL() - { - GLX_LOG_ENTRY_EXIT("void CGlxDataSourceMde::CreateSessionL()"); - iSession = CMdESession::NewL( *this ); - } - - -TInt CGlxDataSourceMde::ProcessItemUpdate(TAny* aPtr) - { - GLX_LOG_ENTRY_EXIT("TInt CGlxDataSourceMde::ProcessItemUpdate(TAny* aPtr)"); - CGlxDataSourceMde* self - = reinterpret_cast( aPtr ); - TRAP_IGNORE(self->ProcessItemUpdateL()); - return 0; - } - -void CGlxDataSourceMde::ProcessItemUpdateL() - { - GLX_LOG_ENTRY_EXIT("void CGlxDataSourceMde::ProcessItemUpdateL()"); - if ( !iUpdateData.Count() || iPauseUpdate ) - { - return; - } - - CMPXMessage* message = CMPXMessage::NewL(); - CleanupStack::PushL(message); - message->SetTObjectValueL(KMPXMessageGeneralId, KMPXMessageIdItemChanged); - message->SetTObjectValueL(KMPXMessageChangeEventType, iUpdateData[0].iType); - TMPXGeneralCategory category = EMPXNoCategory; - TMPXItemId id = iUpdateData[0].iId; - - GLX_LOG_INFO2("CGlxDataSourceMde::ProcessItemUpdateL() cat%d, item id %d", category, id.iId1); -#ifdef __USING_INTELLIGENT_UPDATE_FILTERING - if ( !iUpdateData[0].iIsObject ) - { - TMPXGeneralCategory containerCategory = EMPXNoCategory; - TMPXItemId containerId; - - CMdERelation* relation = iSession->GetRelationL(id); - if( relation ) - { - TItemId rightId = relation->RightObjectId(); - TItemId leftId = relation->LeftObjectId(); - delete relation; - - CMdEObject* contObject = iSession->GetObjectL(leftId); - __ASSERT_DEBUG(contObject, Panic(EGlxPanicIllegalState)); - TContainerType container = ContainerType(contObject); - delete contObject; - __ASSERT_DEBUG(( EContainerTypeTag != container), Panic(EGlxPanicIllegalState)); - if( EContainerTypeNotAContainer == container ) - { - CMdEObject* rightObject = iSession->GetObjectL(rightId); - __ASSERT_DEBUG(rightObject, Panic(EGlxPanicIllegalState)); - TContainerType rightContainer = ContainerType(rightObject); - delete rightObject; - __ASSERT_DEBUG(( EContainerTypeAlbum != rightContainer), Panic(EGlxPanicIllegalState)); - if( EContainerTypeTag == rightContainer ) - { - id = leftId; - containerId = rightId; - containerCategory = EMPXTag; - } - else if( EContainerTypeNotAContainer == rightContainer ) - { - User::Leave(KErrNotSupported); // Not a gallery relation. - } - } - else if( EContainerTypeAlbum == container) - { - id = rightId; - containerId = leftId; - containerCategory = EMPXAlbum; - } - message->SetTObjectValueL(KGlxCollectionMessageContainerCategory, containerCategory); - message->SetTObjectValueL(KGlxCollectionMessageContainerId, containerId); - } - else - { - // use id 0 to identify to ML that we don't know what was deleted - id = 0; - } - } - - if ( id != 0 ) - { - CMdEObject* object = iSession->GetObjectL(id); - if( object ) - { - TContainerType container = ContainerType(object); - if( EContainerTypeAlbum == container) - { - category = EMPXAlbum; - } - else if( EContainerTypeTag == container) - { - category = EMPXTag; - } - else - { - TItemType item = ItemType(object); - if( EItemTypeImage == item) - { - category = EMPXImage; - } - else if( EItemTypeVideo == item) - { - category = EMPXVideo; - } - } - delete object; - } - } -#endif // __USING_INTELLIGENT_UPDATE_FILTERING - message->SetTObjectValueL(KMPXMessageMediaGeneralCategory, category); - message->SetTObjectValueL(KMPXMessageMediaGeneralId, id); - BroadcastMessage(*message); - CleanupStack::PopAndDestroy(message); - iUpdateData.Remove(0); - } - -CGlxDataSource::TContainerType CGlxDataSourceMde::ContainerType(CMdEObject* aObject) - { - GLX_LOG_ENTRY_EXIT("TContainerType CGlxDataSourceMde::ContainerType()"); - TContainerType containerType = EContainerTypeNotAContainer; - - if( 0 == aObject->Def().Compare(*iAlbumDef) ) - { - containerType = EContainerTypeAlbum; - } - else if( 0 == aObject->Def().Compare(*iTagDef) ) - { - containerType = EContainerTypeTag; - } - else if( 0 == aObject->Def().Compare(*iMonthDef) ) - { - containerType = EContainerTypeMonth; - } - - return containerType; - } - -CGlxDataSource::TContainerType CGlxDataSourceMde::ContainerType(CMdEObjectDef* aObjectDef) - { - GLX_LOG_ENTRY_EXIT("TContainerType CGlxDataSourceMde::ContainerType()"); - TContainerType containerType = EContainerTypeNotAContainer; - - if( 0 == aObjectDef->Compare(*iAlbumDef) ) - { - containerType = EContainerTypeAlbum; - } - else if( 0 == aObjectDef->Compare(*iTagDef) ) - { - containerType = EContainerTypeTag; - } - else if( 0 == aObjectDef->Compare(*iMonthDef) ) - { - containerType = EContainerTypeMonth; - } - - return containerType; - } -CGlxDataSource::TItemType CGlxDataSourceMde::ItemType(CMdEObject* aObject) - { - GLX_LOG_ENTRY_EXIT("TItemType CGlxDataSourceMde::ItemType()"); - TItemType itemType = EItemTypeNotAnItem; - - if( 0 == aObject->Def().Compare(*iImageDef) ) - { - itemType = EItemTypeImage; - } - else if(0 == aObject->Def().Compare(*iVideoDef) ) - { - itemType = EItemTypeVideo; - } - - return itemType; - } -void CGlxDataSourceMde::PrepareMonthsL() - { - GLX_LOG_ENTRY_EXIT("void CGlxDataSourceMde::PrepareMonthsL()"); - TTime month(0); - iFirstMonth = month; - } -const TGlxMediaId CGlxDataSourceMde::GetMonthIdL(const TTime& aMonth) - { - GLX_LOG_ENTRY_EXIT("TGlxMediaId CGlxDataSourceMde::GetMonthIdL()"); - TTime monthStart = iFirstMonth + aMonth.MonthsFrom(iFirstMonth); - const TTimeIntervalMonths KGlxOneMonth = 1; - const TTimeIntervalMicroSeconds KGlxOneMicrosecond = 1; - - TGlxMediaId monthId; - TInt monthIndex = iMonthArray.Find(monthStart); - if( monthIndex != KErrNotFound ) - { - monthId = iMonthList[monthIndex]; - } - else - { - _LIT(KGlxMonthTitleFormat, "%F%Y%M%D:"); - const TInt KGlxMonthTitleLength = 12; - TBuf title; - monthStart.FormatL(title, KGlxMonthTitleFormat); - - CMdEObject* month = iSession->GetObjectL(title); - if( month ) - { - monthId = (TGlxMediaId)month->Id(); - iMonthArray.AppendL(monthStart); - iMonthList.AppendL(monthId); - delete month; - } - else - { - TTime monthEnd = monthStart + KGlxOneMonth - KGlxOneMicrosecond; - month = iSession->NewObjectLC(*iMonthDef, title); - - // A title property def of type text is required. - CMdEPropertyDef* titlePropertyDef = iObjectDef->GetPropertyDefL(KPropertyDefNameTitle); - if (!titlePropertyDef || titlePropertyDef->PropertyType() != EPropertyText) - { - User::Leave(KErrCorrupt); - } - // Set the object title. - month->AddTextPropertyL (*titlePropertyDef, title); - - // A size property is required. - CMdEPropertyDef* sizePropertyDef = iObjectDef->GetPropertyDefL(KPropertyDefNameSize); - if (!sizePropertyDef || sizePropertyDef->PropertyType() != EPropertyUint32) - { - User::Leave(KErrCorrupt); - } - month->AddUint32PropertyL(*sizePropertyDef,0); - - - // A creation date property is required. - CMdEPropertyDef* creationDateDef = iObjectDef->GetPropertyDefL(KPropertyDefNameCreationDate); - if (!creationDateDef || creationDateDef->PropertyType() != EPropertyTime) - { - User::Leave(KErrCorrupt); - } - month->AddTimePropertyL(*creationDateDef, monthStart); - - // A last modified date property is required. - CMdEPropertyDef* lmDateDef = iObjectDef->GetPropertyDefL(KPropertyDefNameLastModifiedDate); - if (!lmDateDef || lmDateDef->PropertyType() != EPropertyTime) - { - User::Leave(KErrCorrupt); - } - - month->AddTimePropertyL(*lmDateDef, monthEnd); - - monthId = (TGlxMediaId)iSession->AddObjectL(*month); - CleanupStack::PopAndDestroy(month); - iMonthArray.AppendL(monthStart); - iMonthList.AppendL(monthId); - } - } - return monthId; - } -TBool CGlxDataSourceMde::SameMonth(const TTime& aOldDate, const TTime& aNewDate) - { - GLX_LOG_ENTRY_EXIT("TBool CGlxDataSourceMde::SameMonth(const TTime& aOldDate, const TTime& aNewDate)"); - return ( aOldDate.MonthsFrom(iFirstMonth) == aNewDate.MonthsFrom(iFirstMonth) ); - } - -TBool CGlxDataSourceMde::ContainerIsLeft(CMdEObjectDef& aObjectDef) - { - GLX_LOG_ENTRY_EXIT("TBool CGlxDataSourceMde::ContainerIsLeft(CMdEObjectDef& aObjectDef)"); - TBool containerLeft = EFalse; - if ( 0 == aObjectDef.Compare(AlbumDef()) ) - { - containerLeft = ETrue; - } - return containerLeft; - } - -void CGlxDataSourceMde::TaskCompletedL() - { - iPauseUpdate = EFalse; - iUpdateCallback->CallBack(); - } - -void CGlxDataSourceMde::TaskStartedL() - { - iPauseUpdate = ETrue; - } -