messagingapp/msgui/msgaudiofetcher/src/msgaudioselectionengine.cpp
changeset 37 518b245aa84c
child 48 4f501b74aeb1
equal deleted inserted replaced
25:84d9eb65b26f 37:518b245aa84c
       
     1 /*
       
     2  * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
       
     3  * All rights reserved.
       
     4  * This component and the accompanying materials are made available
       
     5  * under the terms of "Eclipse Public License v1.0"
       
     6  * which accompanies this distribution, and is available
       
     7  * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8  *
       
     9  * Initial Contributors:
       
    10  * Nokia Corporation - initial contribution.
       
    11  *
       
    12  * Contributors:
       
    13  *
       
    14  * Description:
       
    15  *     The source file for mde tone fetcher.
       
    16  *
       
    17  */
       
    18 
       
    19 // SYSTEM INCLUDES
       
    20 #include <XQConversions>
       
    21 #include <pathinfo.h>
       
    22 #include <bautils.h>
       
    23 #include <centralrepository.h>
       
    24 #include <ProfileEngineDomainCRKeys.h>
       
    25 
       
    26 // USER INCLUDES
       
    27 #include "msgaudioselectionengine.h"
       
    28 
       
    29 // CONSTANTS
       
    30 _LIT( KAmrMime, "audio/amr" );
       
    31 
       
    32 MsgAudioSelectionEngine::MsgAudioSelectionEngine()
       
    33     {
       
    34 
       
    35     }
       
    36 
       
    37 MsgAudioSelectionEngine::~MsgAudioSelectionEngine()
       
    38     {
       
    39     delete iQuery;
       
    40     delete iSession;
       
    41     }
       
    42 
       
    43 
       
    44 void MsgAudioSelectionEngine::CreateMetaDataSession()
       
    45 {
       
    46     TRAP_IGNORE(iSession = CMdESession::NewL(*this));
       
    47 }
       
    48 
       
    49 
       
    50 void MsgAudioSelectionEngine::HandleSessionOpened(CMdESession& /*aSession*/,
       
    51         TInt aError)
       
    52     {
       
    53     if (aError != KErrNone)
       
    54         {
       
    55         delete iSession;
       
    56         iSession = 0;
       
    57         iSessionOpen = EFalse;
       
    58         emit mdeSessionError(aError);
       
    59         }
       
    60     else
       
    61         {
       
    62         iSessionOpen = ETrue;
       
    63         TRAP_IGNORE( AddObjectObserverL() );
       
    64         emit mdeSessionOpened();
       
    65         }
       
    66     }
       
    67 
       
    68 void MsgAudioSelectionEngine::HandleSessionError(CMdESession& /*aSession*/,
       
    69         TInt aError)
       
    70     {
       
    71     if (aError == KErrNone)
       
    72         {
       
    73         return;
       
    74         }
       
    75 
       
    76     delete iSession;
       
    77     iSession = 0;
       
    78     iSessionOpen = EFalse;
       
    79     emit mdeSessionError(aError);
       
    80     }
       
    81 
       
    82 void MsgAudioSelectionEngine::HandleQueryNewResults(CMdEQuery& /*aQuery*/,
       
    83         TInt /*aFirstNewItemIndex*/, TInt /*aNewItemCount*/)
       
    84     {
       
    85     }
       
    86 
       
    87 void MsgAudioSelectionEngine::HandleObjectNotification(
       
    88         CMdESession& /*aSession*/, TObserverNotificationType aType,
       
    89         const RArray<TItemId>& /*aObjectIdArray*/)
       
    90     {
       
    91     if (aType == ENotifyAdd || aType == ENotifyModify || aType
       
    92             == ENotifyRemove)
       
    93         {
       
    94         emit notifyObjectChanged();
       
    95         }
       
    96     }
       
    97 
       
    98 void MsgAudioSelectionEngine::AddObjectObserverL()
       
    99     {
       
   100     if (iSessionOpen)
       
   101         {
       
   102         TUint32 notificationType = ENotifyAdd | ENotifyModify | ENotifyRemove;
       
   103         User::LeaveIfNull(iSession);
       
   104         CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL();
       
   105         iSession->AddObjectObserverL(*this, 0, notificationType, &defNS);
       
   106         iSession->AddObjectPresentObserverL(*this);
       
   107         }
       
   108     }
       
   109 
       
   110 void MsgAudioSelectionEngine::HandleObjectPresentNotification(
       
   111         CMdESession& /*aSession*/, TBool /*aPresent*/,
       
   112         const RArray<TItemId>& aObjectIdArray)
       
   113     {
       
   114     if (aObjectIdArray.Count() > 0)
       
   115         {
       
   116         emit notifyObjectChanged();
       
   117         }
       
   118     }
       
   119 
       
   120 void MsgAudioSelectionEngine::HandleQueryCompleted(CMdEQuery& aQuery,
       
   121         TInt aError)
       
   122     {
       
   123     TRAP_IGNORE(HandleQueryCompletedL(aQuery, aError));
       
   124     }
       
   125 
       
   126 void MsgAudioSelectionEngine::HandleQueryCompletedL(CMdEQuery& aQuery,
       
   127         TInt aError)
       
   128     {
       
   129     iNameList.clear();
       
   130     iUriList.clear();
       
   131     if (aError == KErrCancel)
       
   132         {
       
   133         emit queryError(aError);
       
   134         return;
       
   135         }
       
   136     else
       
   137         {
       
   138         CMdEObjectQuery* query = static_cast<CMdEObjectQuery*> (&aQuery);
       
   139         TInt count = query->Count();
       
   140         for (TInt i = 0; i < count; ++i)
       
   141             {
       
   142             CMdEObject* object =
       
   143                     (CMdEObject*) query->TakeOwnershipOfResult(i);
       
   144             CleanupStack::PushL(object);
       
   145             CMdEPropertyDef& propDef = MsgAudioSelectionEngine::PropertyDefL(
       
   146                     iSession, MsgAudioSelectionEngine::EAttrFileName);
       
   147 
       
   148             CMdEProperty* property = 0;
       
   149             TInt err = object->Property(propDef, property, 0);
       
   150             if (err != KErrNotFound && property)
       
   151                 {
       
   152                 QString songName(XQConversions::s60DescToQString(
       
   153                         property->TextValueL()));
       
   154                 QString uriValue(XQConversions::s60DescToQString(
       
   155                         object->Uri()));
       
   156                 iNameList.append(songName);
       
   157                 iUriList.append(uriValue);
       
   158                 }
       
   159             CleanupStack::PopAndDestroy(object);
       
   160             }
       
   161         emit queryComplete(iNameList, iUriList);
       
   162         }
       
   163     }
       
   164 
       
   165 void MsgAudioSelectionEngine::QueryTones()
       
   166     {
       
   167     TRAP_IGNORE(QueryTonesL());
       
   168     }
       
   169 
       
   170 void MsgAudioSelectionEngine::QueryTonesL()
       
   171     {
       
   172     LeaveIfSessionClosedL();
       
   173     CMdENamespaceDef& defNS = iSession->GetDefaultNamespaceDefL();
       
   174     CMdEObjectDef& musicObjectDef = defNS.GetObjectDefL(
       
   175             MdeConstants::Audio::KAudioObject);
       
   176 
       
   177     delete iQuery;
       
   178     iQuery = 0;
       
   179     iQuery = iSession->NewObjectQueryL(defNS, musicObjectDef, this);
       
   180     CMdEPropertyDef& titlePropertyDef = musicObjectDef.GetPropertyDefL(
       
   181             MdeConstants::Object::KTitleProperty);
       
   182     CMdEPropertyDef& typePropertyDef = musicObjectDef.GetPropertyDefL(
       
   183             MdeConstants::Object::KItemTypeProperty);
       
   184 
       
   185     // set attributes that are included in query result
       
   186     iQuery->AddPropertyFilterL(&titlePropertyDef);
       
   187     iQuery->AddPropertyFilterL(&typePropertyDef);
       
   188 
       
   189     iQuery->SetResultMode(EQueryResultModeItem);
       
   190 
       
   191 
       
   192     // get root condition
       
   193     CMdELogicCondition& conditions = iQuery->Conditions();
       
   194     conditions.AddPropertyConditionL(typePropertyDef,
       
   195             ETextPropertyConditionCompareEquals, KAmrMime);
       
   196 
       
   197     iQuery->FindL();
       
   198     }
       
   199 
       
   200 void MsgAudioSelectionEngine::LeaveIfSessionClosedL()
       
   201     {
       
   202     if (!iSession || !iSessionOpen)
       
   203         {
       
   204         User::Leave(KErrDisconnected);
       
   205         }
       
   206     }
       
   207 
       
   208 CMdEPropertyDef& MsgAudioSelectionEngine::PropertyDefL(TInt aAttr)
       
   209     {
       
   210     User::LeaveIfNull(iSession);
       
   211     return PropertyDefL(iSession, aAttr);
       
   212     }
       
   213 
       
   214 CMdEPropertyDef& MsgAudioSelectionEngine::PropertyDefL(CMdESession* aSession,
       
   215         TInt aAttr)
       
   216     {
       
   217     CMdENamespaceDef& defNS = aSession->GetDefaultNamespaceDefL();
       
   218 
       
   219     CMdEObjectDef& objectDef = defNS.GetObjectDefL(
       
   220             MdeConstants::Audio::KAudioObject);
       
   221 
       
   222     if (aAttr == EAttrFileSize)
       
   223         {
       
   224         return objectDef.GetPropertyDefL(MdeConstants::Object::KSizeProperty);
       
   225         }
       
   226     else if (aAttr == EAttrMediaType)
       
   227         {
       
   228         return objectDef.GetPropertyDefL(
       
   229                 MdeConstants::Object::KItemTypeProperty);
       
   230         }
       
   231     else if (aAttr == EAttrSongName || aAttr == EAttrFileName)
       
   232         {
       
   233         return objectDef.GetPropertyDefL(MdeConstants::Object::KTitleProperty);
       
   234         }
       
   235     else if (aAttr == EAttrArtist)
       
   236         {
       
   237         return objectDef.GetPropertyDefL(
       
   238                 MdeConstants::MediaObject::KArtistProperty);
       
   239         }
       
   240     else if (aAttr == EAttrAlbum)
       
   241         {
       
   242         return objectDef.GetPropertyDefL(MdeConstants::Audio::KAlbumProperty);
       
   243         }
       
   244     else if (aAttr == EAttrGenre)
       
   245         {
       
   246         return objectDef.GetPropertyDefL(
       
   247                 MdeConstants::MediaObject::KGenreProperty);
       
   248         }
       
   249     else if (aAttr == EAttrComposer)
       
   250         {
       
   251         return objectDef.GetPropertyDefL(
       
   252                 MdeConstants::Audio::KComposerProperty);
       
   253         }
       
   254     else
       
   255         {
       
   256         User::Leave(KErrNotSupported);
       
   257         }
       
   258 
       
   259     return objectDef.GetPropertyDefL(MdeConstants::Object::KTitleProperty);
       
   260     }
       
   261 
       
   262 
       
   263 void MsgAudioSelectionEngine::SetAttr(int attr, int value)
       
   264     {
       
   265     switch (attr)
       
   266         {
       
   267     case MsgAudioSelectionEngine::EAttrFileSize:
       
   268             {
       
   269             iMaxFileSize = value;
       
   270             break;
       
   271             }
       
   272     default:
       
   273         {
       
   274         break;
       
   275         }
       
   276     }
       
   277 }
       
   278 // End of File
       
   279