/*
* 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 <msvstd.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(mPluginLoader)
{
delete mPluginLoader;
mPluginLoader = NULL;
}
}
// ---------------------------------------------------------------------------
// UniViewerFeederPrivate::initL
// Symbian specific constructions
// ---------------------------------------------------------------------------
//
void UniViewerFeederPrivate::initL(qint32 msgId)
{
QDEBUG_WRITE("UniViewerFeederPrivate::initL start");
TMsvId serviceId = KMsvNullIndexEntryId;
mPluginInterface = NULL;
mMsgId = msgId;
mPluginLoader = new UniDataModelLoader();
mPluginInterface = mPluginLoader->getDataModelPlugin(ConvergedMessage::Sms);
mSession = mPluginInterface->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 mPluginInterface->subject();
}
// ---------------------------------------------------------------------------
// UniViewerFeederPrivate::subject
// Returns the message subject.
// ---------------------------------------------------------------------------
int UniViewerFeederPrivate::sendingState()
{
return mEntry.SendingState();
}
// ---------------------------------------------------------------------------
// UniViewerFeederPrivate::timeStamp
// Returns the time stamp
// ---------------------------------------------------------------------------
QDateTime UniViewerFeederPrivate::timeStamp()
{
return mPluginInterface->timeStamp();
}
// ---------------------------------------------------------------------------
// UniViewerFeederPrivate::fetchDetailsL
// Fetches message details from the store.
// ---------------------------------------------------------------------------
void UniViewerFeederPrivate::fetchDetailsL()
{
QDEBUG_WRITE("UniViewerFeederPrivate fetchDetailsL : SMS start");
if (msgType() == KSenduiMtmSmsUidValue)
{
QString body;
mPluginInterface->body(body);
q_ptr->emitMsgBody(body);
}
QDEBUG_WRITE("UniViewerFeederPrivate fetchDetailsL : SMS END");
}
// ---------------------------------------------------------------------------
// UniViewerFeederPrivate::hasAttachments
// @see header file
// ---------------------------------------------------------------------------
bool UniViewerFeederPrivate::hasAttachments()
{
return mPluginInterface->hasAttachment();
}
// ---------------------------------------------------------------------------
// UniViewerFeederPrivate::attachmentsList
// @see header file
// ---------------------------------------------------------------------------
UniMessageInfoList UniViewerFeederPrivate::attachmentsList()
{
return mPluginInterface->attachmentList();
}
// ---------------------------------------------------------------------------
// UniViewerFeederPrivate::attachmentCount
// @see header file
// ---------------------------------------------------------------------------
int UniViewerFeederPrivate::attachmentCount()
{
return mPluginInterface->attachmentCount();
}
// ---------------------------------------------------------------------------
// UniViewerFeederPrivate::objectsList
// @see header file
// ---------------------------------------------------------------------------
UniMessageInfoList UniViewerFeederPrivate::objectsList()
{
return mPluginInterface->objectList();
}
// ---------------------------------------------------------------------------
// UniViewerFeederPrivate::objectCount
// @see header file
// ---------------------------------------------------------------------------
int UniViewerFeederPrivate::objectCount()
{
return mPluginInterface->objectCount();
}
// ---------------------------------------------------------------------------
// UniViewerFeederPrivate::slideCount
// @see header file
// ---------------------------------------------------------------------------
int UniViewerFeederPrivate::slideCount()
{
return mSlideCount;
}
// ---------------------------------------------------------------------------
// UniViewerFeederPrivate::slideContent
// @see header file
// ---------------------------------------------------------------------------
UniMessageInfoList UniViewerFeederPrivate::slideContent(int slidenum)
{
return mPluginInterface->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)
{
mPluginInterface = mPluginLoader->getDataModelPlugin(ConvergedMessage::Sms);
mPluginInterface->setMessageId(msgId);
}
if (msgType() == KSenduiMtmMmsUidValue)
{
mPluginInterface = mPluginLoader->getDataModelPlugin(ConvergedMessage::Mms);
mPluginInterface->setMessageId(msgId);
mSlideCount = mPluginInterface->slideCount();
}
mPluginInterface->toRecipientList(mToAddressList);
mPluginInterface->ccRecipientList(mCcAddressList);
}
// ---------------------------------------------------------------------------
// UniViewerFeederPrivate::toAddressList
// @see header file
// ---------------------------------------------------------------------------
ConvergedMessageAddressList UniViewerFeederPrivate::toAddressList()
{
QString alias = QString();
for (int i = 0; i < mToAddressList.count(); ++i)
{
GetNameFromContacts(mToAddressList.at(i)->address(), alias);
mToAddressList.at(i)->setAlias(alias);
alias.clear();
}
return mToAddressList;
}
// ---------------------------------------------------------------------------
// UniViewerFeederPrivate::ccAddressList
// @see header file
// ---------------------------------------------------------------------------
ConvergedMessageAddressList UniViewerFeederPrivate::ccAddressList()
{
QString alias = QString();
for (int i = 0; i < mCcAddressList.count(); ++i)
{
GetNameFromContacts(mCcAddressList.at(i)->address(), alias);
mCcAddressList.at(i)->setAlias(alias);
alias.clear();
}
return mCcAddressList;
}
// ---------------------------------------------------------------------------
// UniViewerFeederPrivate::messageSize
// @see header file
// ---------------------------------------------------------------------------
int UniViewerFeederPrivate::messageSize()
{
return mPluginInterface->messageSize();
}
// ---------------------------------------------------------------------------
// UniViewerFeederPrivate::fromAddressAndAlias
// @see header file
// ---------------------------------------------------------------------------
void UniViewerFeederPrivate::fromAddressAndAlias(QString& from, QString& alias)
{
mPluginInterface->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<QContactSortOrder> sortOrder;
QList<QContact> matchingContacts =
contactManager.contacts(phoneFilter,
sortOrder,
QStringList());
int count = 0;
if (matchingContacts.count() > 0)
{
QContact match = matchingContacts.at(0);
QString displayLabel = match.displayLabel();
if (displayLabel != "Unnamed")
{
alias.append(displayLabel);
}
QList<QContactPhoneNumber> numbers =
match.details<QContactPhoneNumber> ();
count = numbers.count();
}
return count;
}
// EOF