messagingapp/msgui/unifiedviewer/src/univiewerfeeder_p.cpp
changeset 23 238255e8b033
child 25 84d9eb65b26f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/unifiedviewer/src/univiewerfeeder_p.cpp	Fri Apr 16 14:56:15 2010 +0300
@@ -0,0 +1,382 @@
+/*
+ * Copyright (c) 2009 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: Feeder Private class for unified viewer. Fetches data from the
+ *              message store for the given message id.
+ *
+ */
+#include "univiewerfeeder_p.h"
+// SYSTEM INCLUDES
+#include <mtclreg.h>
+#include <mtclbase.h>
+#include <msvstd.h>
+#include <txtetext.h>
+#include <txtrich.h>
+#include <s60qconversions.h>
+#include <msvids.h>
+#include <qtcontactsglobal.h>
+#include "qtcontacts.h"
+#include "qcontactdetailfilter.h"
+
+// USER INCLUDES
+#include "nativemessageconsts.h"
+#include "univiewerfeeder.h"
+#include "unidatamodelloader.h"
+#include "debugtraces.h"
+
+// ---------------------------------------------------------------------------
+// UniViewerFeederPrivate::UniViewerFeederPrivate
+// @see header file
+// ---------------------------------------------------------------------------
+UniViewerFeederPrivate::UniViewerFeederPrivate(qint32 msgId,
+                                               UniViewerFeeder* feeder) :
+    q_ptr(feeder), mSlideCount(0), mSession(NULL)
+{
+    TRAP_IGNORE(initL(msgId));
+}
+
+// ---------------------------------------------------------------------------
+// UniViewerFeederPrivate::~UniViewerFeederPrivate
+// @see header file
+// ---------------------------------------------------------------------------
+UniViewerFeederPrivate::~UniViewerFeederPrivate()
+{
+    q_ptr = NULL;
+    clearContent();
+    if(pluginLoader)
+    {
+        delete pluginLoader;
+        pluginLoader = NULL;
+    }
+}
+
+// ---------------------------------------------------------------------------
+// UniViewerFeederPrivate::initL
+// Symbian specific constructions
+// ---------------------------------------------------------------------------
+//
+void UniViewerFeederPrivate::initL(qint32 msgId)
+{
+    QDEBUG_WRITE("UniViewerFeederPrivate::initL start");
+    TMsvId serviceId = KMsvNullIndexEntryId;
+    pluginInterface = NULL;
+    mMsgId = msgId;
+    pluginLoader = new UniDataModelLoader();
+    pluginLoader->loadPlugins();
+    pluginInterface = pluginLoader->getDataModelPlugin("sms");
+
+    mSession = pluginInterface->session();
+    mSession->GetEntry(msgId, serviceId, mEntry);
+    QDEBUG_WRITE("UniViewerFeederPrivate::initL end");
+}
+
+// ---------------------------------------------------------------------------
+// UniViewerFeederPrivate::fetchDetails
+// Fetches message details from the store
+// ---------------------------------------------------------------------------
+void UniViewerFeederPrivate::fetchDetails()
+{
+    TRAP_IGNORE(fetchDetailsL());
+}
+
+// ---------------------------------------------------------------------------
+// UniViewerFeederPrivate::msgType
+// Returns the message type.
+// ---------------------------------------------------------------------------
+qint32 UniViewerFeederPrivate::msgType()
+{
+    return mEntry.iMtm.iUid;
+}
+
+// ---------------------------------------------------------------------------
+// UniViewerFeederPrivate::isIncoming
+// Returns if it is a incoming message.
+// ---------------------------------------------------------------------------
+bool UniViewerFeederPrivate::isIncoming()
+{
+    if (mEntry.Parent() == KMsvGlobalInBoxIndexEntryId)
+    {
+        return true;
+    }
+    return false;
+}
+
+// ---------------------------------------------------------------------------
+// UniViewerFeederPrivate::priority
+// Returns the message priority.
+// ---------------------------------------------------------------------------
+int UniViewerFeederPrivate::priority()
+{
+    if (mEntry.Priority() == EMsvHighPriority)
+    {
+        return ConvergedMessage::High;
+    }
+    else if (mEntry.Priority() == EMsvLowPriority)
+    {
+        return ConvergedMessage::Low;
+    }
+    return ConvergedMessage::Normal;
+}
+
+// ---------------------------------------------------------------------------
+// UniViewerFeederPrivate::subject
+// Returns the message subject.
+// ---------------------------------------------------------------------------
+QString UniViewerFeederPrivate::subject()
+{
+    return pluginInterface->subject();
+}
+
+// ---------------------------------------------------------------------------
+// UniViewerFeederPrivate::timeStamp
+// Returns the time stamp
+// ---------------------------------------------------------------------------
+QDateTime UniViewerFeederPrivate::timeStamp()
+{
+
+    return pluginInterface->timeStamp();
+}
+
+// ---------------------------------------------------------------------------
+// UniViewerFeederPrivate::fetchDetailsL
+// Fetches message details from the store.
+// ---------------------------------------------------------------------------
+void UniViewerFeederPrivate::fetchDetailsL()
+{
+    QDEBUG_WRITE("UniViewerFeederPrivate fetchDetailsL : SMS start");
+
+    if (msgType() == KSenduiMtmSmsUidValue)
+    {
+        QString body;
+        pluginInterface->body(body);
+        q_ptr->emitMsgBody(body);
+    }
+
+    QDEBUG_WRITE("UniViewerFeederPrivate fetchDetailsL : SMS END");
+}
+
+// ---------------------------------------------------------------------------
+// UniViewerFeederPrivate::hasAttachments
+// @see header file
+// ---------------------------------------------------------------------------
+bool UniViewerFeederPrivate::hasAttachments()
+{
+    return pluginInterface->hasAttachment();
+}
+// ---------------------------------------------------------------------------
+// UniViewerFeederPrivate::attachmentsList
+// @see header file
+// ---------------------------------------------------------------------------
+UniMessageInfoList UniViewerFeederPrivate::attachmentsList()
+{
+    return pluginInterface->attachmentList();
+}
+
+// ---------------------------------------------------------------------------
+// UniViewerFeederPrivate::attachmentCount
+// @see header file
+// ---------------------------------------------------------------------------
+int UniViewerFeederPrivate::attachmentCount()
+{
+    return pluginInterface->attachmentCount();
+}
+
+// ---------------------------------------------------------------------------
+// UniViewerFeederPrivate::objectsList
+// @see header file
+// ---------------------------------------------------------------------------
+UniMessageInfoList UniViewerFeederPrivate::objectsList()
+{
+    return pluginInterface->objectList();
+}
+
+// ---------------------------------------------------------------------------
+// UniViewerFeederPrivate::objectCount
+// @see header file
+// ---------------------------------------------------------------------------
+int UniViewerFeederPrivate::objectCount()
+{
+    return pluginInterface->objectCount();
+}
+
+// ---------------------------------------------------------------------------
+// UniViewerFeederPrivate::slideCount
+// @see header file
+// ---------------------------------------------------------------------------
+int UniViewerFeederPrivate::slideCount()
+{
+    return mSlideCount;
+}
+
+// ---------------------------------------------------------------------------
+// UniViewerFeederPrivate::slideContent
+// @see header file
+// ---------------------------------------------------------------------------
+UniMessageInfoList UniViewerFeederPrivate::slideContent(int slidenum)
+{
+    return pluginInterface->slideContent(slidenum);
+}
+
+// ---------------------------------------------------------------------------
+// UniViewerFeederPrivate::updateContent
+// @see header file
+// ---------------------------------------------------------------------------
+void UniViewerFeederPrivate::updateContent(qint32 msgId)
+{
+  
+    if (msgId != mMsgId)
+    {
+        mMsgId = msgId;
+        TMsvId serviceId = KMsvNullIndexEntryId;
+        mSession->GetEntry(msgId, serviceId, mEntry);
+        clearContent();
+    }
+
+    if (msgType() == KSenduiMtmSmsUidValue)
+    {
+        pluginInterface = pluginLoader->getDataModelPlugin("sms");
+        pluginInterface->setMessageId(msgId);
+    }
+
+    if (msgType() == KSenduiMtmMmsUidValue)
+    {
+        pluginInterface = pluginLoader->getDataModelPlugin("mms");
+        pluginInterface->setMessageId(msgId);
+        mSlideCount = pluginInterface->slideCount();
+    }
+    pluginInterface->toRecipientList(mToAddressList);
+    pluginInterface->ccRecipientList(mCcAddressList);
+}
+
+// ---------------------------------------------------------------------------
+// UniViewerFeederPrivate::toAddressList
+// @see header file
+// ---------------------------------------------------------------------------
+ConvergedMessageAddressList UniViewerFeederPrivate::toAddressList()
+{
+    for (int i = 0; i < mToAddressList.count(); ++i)
+    {
+        if (mToAddressList.at(i)->alias().isEmpty())
+        {
+            QString alias = QString();
+            GetNameFromContacts(mToAddressList.at(i)->address(), alias);
+            mToAddressList.at(i)->setAlias(alias);
+            alias.clear();
+        }
+    }
+    return mToAddressList;
+}
+
+// ---------------------------------------------------------------------------
+// UniViewerFeederPrivate::ccAddressList
+// @see header file
+// ---------------------------------------------------------------------------
+ConvergedMessageAddressList UniViewerFeederPrivate::ccAddressList()
+{
+    for (int i = 0; i < mCcAddressList.count(); ++i)
+    {
+        if (mCcAddressList.at(i)->alias().isEmpty())
+        {
+            QString alias = QString();
+            GetNameFromContacts(mCcAddressList.at(i)->address(), alias);
+            mCcAddressList.at(i)->setAlias(alias);
+            alias.clear();
+        }
+    }
+    return mCcAddressList;
+}
+
+// ---------------------------------------------------------------------------
+// UniViewerFeederPrivate::messageSize
+// @see header file
+// ---------------------------------------------------------------------------
+int UniViewerFeederPrivate::messageSize()
+{
+    return pluginInterface->messageSize();
+}
+
+// ---------------------------------------------------------------------------
+// UniViewerFeederPrivate::fromAddressAndAlias
+// @see header file
+// ---------------------------------------------------------------------------
+void UniViewerFeederPrivate::fromAddressAndAlias(QString& from, QString& alias)
+{
+    pluginInterface->fromAddress(from);
+    GetNameFromContacts(from, alias);
+}
+
+// ---------------------------------------------------------------------------
+// UniViewerFeederPrivate::clearContent
+// @see header file
+// ---------------------------------------------------------------------------
+void UniViewerFeederPrivate::clearContent()
+{
+    for (int i = 0; i < mToAddressList.count(); ++i)
+    {
+        delete mToAddressList.at(i);
+    }
+    mToAddressList.clear();
+
+    for (int i = 0; i < mCcAddressList.count(); ++i)
+    {
+        delete mCcAddressList.at(i);
+    }
+
+    mCcAddressList.clear();
+}
+
+// ---------------------------------------------------------------------------
+// UniViewerFeederPrivate::GetNameFromContacts
+// @see header file
+//----------------------------------------------------------------------------
+int UniViewerFeederPrivate::GetNameFromContacts(const QString& address,
+                                                QString& alias)
+{
+    QContactManager contactManager("symbian");
+    //set filter
+    QContactDetailFilter phoneFilter;
+    phoneFilter.setDetailDefinitionName(QContactPhoneNumber::DefinitionName,
+                                        QContactPhoneNumber::FieldNumber);
+    phoneFilter.setMatchFlags(QContactFilter::MatchEndsWith);
+
+    phoneFilter.setValue(address); // this is the phone number to be resolved
+
+    QList<QContactLocalId> matchingContacts =
+            contactManager.contacts(phoneFilter);
+    int count = 0;
+    if (matchingContacts.count() > 0)
+    {
+        QContact match = contactManager.contact(matchingContacts.at(0));
+        
+        QContactName name = match.detail(QContactName::DefinitionName);
+        QString nickName(match.detail<QContactNickname> ().nickname());
+        
+        QString displayLabel = match.displayLabel();
+          
+        QList<QContactPhoneNumber> numbers =
+                match.details<QContactPhoneNumber> ();
+        count = numbers.count();
+        if(displayLabel != "Unnamed")
+        {
+            alias.append(displayLabel);
+        }
+        else if(!nickName.isEmpty())
+        {
+            alias.append(nickName);
+        }
+            
+    }
+    return count;
+}
+
+// EOF