--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/msgaudiofetcher/src/msgaudioselectionengine.cpp Fri Jun 25 15:47:40 2010 +0530
@@ -0,0 +1,279 @@
+/*
+ * Copyright (c) 2010 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 source file for mde tone fetcher.
+ *
+ */
+
+// SYSTEM INCLUDES
+#include <XQConversions>
+#include <pathinfo.h>
+#include <bautils.h>
+#include <centralrepository.h>
+#include <ProfileEngineDomainCRKeys.h>
+
+// USER INCLUDES
+#include "msgaudioselectionengine.h"
+
+// CONSTANTS
+_LIT( KAmrMime, "audio/amr" );
+
+MsgAudioSelectionEngine::MsgAudioSelectionEngine()
+ {
+
+ }
+
+MsgAudioSelectionEngine::~MsgAudioSelectionEngine()
+ {
+ delete iQuery;
+ delete iSession;
+ }
+
+
+void MsgAudioSelectionEngine::CreateMetaDataSession()
+{
+ TRAP_IGNORE(iSession = CMdESession::NewL(*this));
+}
+
+
+void MsgAudioSelectionEngine::HandleSessionOpened(CMdESession& /*aSession*/,
+ TInt aError)
+ {
+ if (aError != KErrNone)
+ {
+ delete iSession;
+ iSession = 0;
+ iSessionOpen = EFalse;
+ emit mdeSessionError(aError);
+ }
+ else
+ {
+ iSessionOpen = ETrue;
+ TRAP_IGNORE( AddObjectObserverL() );
+ emit mdeSessionOpened();
+ }
+ }
+
+void MsgAudioSelectionEngine::HandleSessionError(CMdESession& /*aSession*/,
+ TInt aError)
+ {
+ if (aError == KErrNone)
+ {
+ return;
+ }
+
+ delete iSession;
+ iSession = 0;
+ iSessionOpen = EFalse;
+ emit mdeSessionError(aError);
+ }
+
+void MsgAudioSelectionEngine::HandleQueryNewResults(CMdEQuery& /*aQuery*/,
+ TInt /*aFirstNewItemIndex*/, TInt /*aNewItemCount*/)
+ {
+ }
+
+void MsgAudioSelectionEngine::HandleObjectNotification(
+ CMdESession& /*aSession*/, TObserverNotificationType aType,
+ const RArray<TItemId>& /*aObjectIdArray*/)
+ {
+ if (aType == ENotifyAdd || aType == ENotifyModify || aType
+ == ENotifyRemove)
+ {
+ emit notifyObjectChanged();
+ }
+ }
+
+void MsgAudioSelectionEngine::AddObjectObserverL()
+ {
+ if (iSessionOpen)
+ {
+ TUint32 notificationType = ENotifyAdd | ENotifyModify | ENotifyRemove;
+ User::LeaveIfNull(iSession);
+ CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL();
+ iSession->AddObjectObserverL(*this, 0, notificationType, &defNS);
+ iSession->AddObjectPresentObserverL(*this);
+ }
+ }
+
+void MsgAudioSelectionEngine::HandleObjectPresentNotification(
+ CMdESession& /*aSession*/, TBool /*aPresent*/,
+ const RArray<TItemId>& aObjectIdArray)
+ {
+ if (aObjectIdArray.Count() > 0)
+ {
+ emit notifyObjectChanged();
+ }
+ }
+
+void MsgAudioSelectionEngine::HandleQueryCompleted(CMdEQuery& aQuery,
+ TInt aError)
+ {
+ TRAP_IGNORE(HandleQueryCompletedL(aQuery, aError));
+ }
+
+void MsgAudioSelectionEngine::HandleQueryCompletedL(CMdEQuery& aQuery,
+ TInt aError)
+ {
+ iNameList.clear();
+ iUriList.clear();
+ if (aError == KErrCancel)
+ {
+ emit queryError(aError);
+ return;
+ }
+ else
+ {
+ CMdEObjectQuery* query = static_cast<CMdEObjectQuery*> (&aQuery);
+ TInt count = query->Count();
+ for (TInt i = 0; i < count; ++i)
+ {
+ CMdEObject* object =
+ (CMdEObject*) query->TakeOwnershipOfResult(i);
+ CleanupStack::PushL(object);
+ CMdEPropertyDef& propDef = MsgAudioSelectionEngine::PropertyDefL(
+ iSession, MsgAudioSelectionEngine::EAttrFileName);
+
+ CMdEProperty* property = 0;
+ TInt err = object->Property(propDef, property, 0);
+ if (err != KErrNotFound && property)
+ {
+ QString songName(XQConversions::s60DescToQString(
+ property->TextValueL()));
+ QString uriValue(XQConversions::s60DescToQString(
+ object->Uri()));
+ iNameList.append(songName);
+ iUriList.append(uriValue);
+ }
+ CleanupStack::PopAndDestroy(object);
+ }
+ emit queryComplete(iNameList, iUriList);
+ }
+ }
+
+void MsgAudioSelectionEngine::QueryTones()
+ {
+ TRAP_IGNORE(QueryTonesL());
+ }
+
+void MsgAudioSelectionEngine::QueryTonesL()
+ {
+ LeaveIfSessionClosedL();
+ CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL();
+ CMdEObjectDef& musicObjectDef = defNS.GetObjectDefL(
+ MdeConstants::Audio::KAudioObject);
+
+ delete iQuery;
+ iQuery = 0;
+ iQuery = iSession->NewObjectQueryL(defNS, musicObjectDef, this);
+ CMdEPropertyDef& titlePropertyDef = musicObjectDef.GetPropertyDefL(
+ MdeConstants::Object::KTitleProperty);
+ CMdEPropertyDef& typePropertyDef = musicObjectDef.GetPropertyDefL(
+ MdeConstants::Object::KItemTypeProperty);
+
+ // set attributes that are included in query result
+ iQuery->AddPropertyFilterL(&titlePropertyDef);
+ iQuery->AddPropertyFilterL(&typePropertyDef);
+
+ iQuery->SetResultMode(EQueryResultModeItem);
+
+
+ // get root condition
+ CMdELogicCondition& conditions = iQuery->Conditions();
+ conditions.AddPropertyConditionL(typePropertyDef,
+ ETextPropertyConditionCompareEquals, KAmrMime);
+
+ iQuery->FindL();
+ }
+
+void MsgAudioSelectionEngine::LeaveIfSessionClosedL()
+ {
+ if (!iSession || !iSessionOpen)
+ {
+ User::Leave(KErrDisconnected);
+ }
+ }
+
+CMdEPropertyDef& MsgAudioSelectionEngine::PropertyDefL(TInt aAttr)
+ {
+ User::LeaveIfNull(iSession);
+ return PropertyDefL(iSession, aAttr);
+ }
+
+CMdEPropertyDef& MsgAudioSelectionEngine::PropertyDefL(CMdESession* aSession,
+ TInt aAttr)
+ {
+ CMdENamespaceDef& defNS = aSession->GetDefaultNamespaceDefL();
+
+ CMdEObjectDef& objectDef = defNS.GetObjectDefL(
+ MdeConstants::Audio::KAudioObject);
+
+ if (aAttr == EAttrFileSize)
+ {
+ return objectDef.GetPropertyDefL(MdeConstants::Object::KSizeProperty);
+ }
+ else if (aAttr == EAttrMediaType)
+ {
+ return objectDef.GetPropertyDefL(
+ MdeConstants::Object::KItemTypeProperty);
+ }
+ else if (aAttr == EAttrSongName || aAttr == EAttrFileName)
+ {
+ return objectDef.GetPropertyDefL(MdeConstants::Object::KTitleProperty);
+ }
+ else if (aAttr == EAttrArtist)
+ {
+ return objectDef.GetPropertyDefL(
+ MdeConstants::MediaObject::KArtistProperty);
+ }
+ else if (aAttr == EAttrAlbum)
+ {
+ return objectDef.GetPropertyDefL(MdeConstants::Audio::KAlbumProperty);
+ }
+ else if (aAttr == EAttrGenre)
+ {
+ return objectDef.GetPropertyDefL(
+ MdeConstants::MediaObject::KGenreProperty);
+ }
+ else if (aAttr == EAttrComposer)
+ {
+ return objectDef.GetPropertyDefL(
+ MdeConstants::Audio::KComposerProperty);
+ }
+ else
+ {
+ User::Leave(KErrNotSupported);
+ }
+
+ return objectDef.GetPropertyDefL(MdeConstants::Object::KTitleProperty);
+ }
+
+
+void MsgAudioSelectionEngine::SetAttr(int attr, int value)
+ {
+ switch (attr)
+ {
+ case MsgAudioSelectionEngine::EAttrFileSize:
+ {
+ iMaxFileSize = value;
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+}
+// End of File
+