messagingapp/msgui/msgaudiofetcher/src/msgaudioselectionengine.cpp
changeset 37 518b245aa84c
child 48 4f501b74aeb1
--- /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
+