messagingapp/msgutils/unidatautils/unidatamodelplugins/unibiomessagedataplugin/src/unibiomessagedataplugin_p.cpp
/*
* 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:
*
*/
//SYSTEM INCLUDES
#include <e32cmn.h>
#include <mtclreg.h>
#include <mtclbase.h>
#include <msvids.h>
#include <txtetext.h>
#include <txtrich.h>
#include <txtfmlyr.h>
#include <smsclnt.h>
#include <bioscmds.h>
#include <biocmtm.h>
#include "debugtraces.h"
#include <QDateTime>
#include <xqconversions.h>
#include <mmsvattachmentmanager.h>
#include <mmsvattachmentmanagersync.h>
#include "convergedmessage.h"
#include "convergedmessageaddress.h"
#include "unibiomessagedataplugin_p.h"
#define KBioUidValue 0x10001262
const TUid KBioUidValueUid =
{KBioUidValue};
_LIT(KUnixEpoch, "19700000:000000.000000");
//---------------------------------------------------------------
// UniBioMessageDataPluginPrivate::~UniBioMessageDataPluginPrivate
// @see header
//---------------------------------------------------------------
UniBioMessageDataPluginPrivate::~UniBioMessageDataPluginPrivate()
{
q_ptr = NULL;
if(attachmentProcessed == EFalse && iAttachmentCount == 1)
{
TRAP_IGNORE( CMsvStore* store = iMsvEntry->EditStoreL();
CleanupStack::PushL(store);
MMsvAttachmentManagerSync& attachMan = store->AttachmentManagerExtensionsL();
attachMan.RemoveAttachmentL(0);
CleanupStack::PopAndDestroy(););
}
if (iMsvEntry) {
delete iMsvEntry;
}
delete iBioClientMtm;
delete iMtmReg;
delete iMSession;
}
//---------------------------------------------------------------
// UniBioMessageDataPluginPrivate::UniBioMessageDataPluginPrivate
// @see header
//---------------------------------------------------------------
UniBioMessageDataPluginPrivate::UniBioMessageDataPluginPrivate(UniBioMessageDataPlugin* plugin) :
q_ptr(plugin), iMSession(NULL), iMtmReg(NULL), iBioClientMtm(NULL),
iMsvEntry(NULL),iAttachmentCount(0)
{
iMSession = CMsvSession::OpenSyncL(*this);
done = EFalse;
}
void UniBioMessageDataPluginPrivate::initL()
{
iMtmReg = CClientMtmRegistry::NewL(*iMSession);
iBioClientMtm = (CBIOClientMtm*) iMtmReg->NewMtmL(KBioUidValueUid);
attachmentProcessed = EFalse;
done = ETrue;
}
//---------------------------------------------------------------
// UniBioMessageDataPluginPrivate::reset
// @see header
//---------------------------------------------------------------
void UniBioMessageDataPluginPrivate::reset()
{
}
//---------------------------------------------------------------
// UniBioMessageDataPluginPrivate::setMessageId
// @see header
//---------------------------------------------------------------
int UniBioMessageDataPluginPrivate::setMessageId(int mId)
{
TInt error = KErrNone;
TRAP(error, setMessageIdL(mId));
return error;
}
//---------------------------------------------------------------
// UniBioMessageDataPluginPrivate::setMessageIdL
// @see header
//---------------------------------------------------------------
void UniBioMessageDataPluginPrivate::setMessageIdL(int mId)
{
if (done == EFalse)
{
initL();
}
if (iMessageId != mId)
{
attachmentProcessed = EFalse;
}
iMessageId = (TMsvId) mId;
iBioClientMtm->SwitchCurrentEntryL(iMessageId);
iMsvEntry = CMsvEntry::NewL(iBioClientMtm->Session(),
iMessageId,
TMsvSelectionOrdering());
iBioClientMtm->LoadMessageL();
}
//---------------------------------------------------------------
// UniBioMessageDataPluginPrivate::body
// @see header
//---------------------------------------------------------------
void UniBioMessageDataPluginPrivate::body(QString& aBodyText)
{
CRichText& textBody = iBioClientMtm->Body();
TInt len = textBody.DocumentLength();
HBufC* buf = HBufC::NewL(len);
TPtr bufPtr = buf->Des();
textBody.ExtractSelectively(bufPtr, 0, len, CPlainText::EExtractAll);
aBodyText = XQConversions::s60DescToQString(*buf);
delete buf;
}
//---------------------------------------------------------------
// UniBioMessageDataPluginPrivate::messageSize
// @see header
//---------------------------------------------------------------
qint32 UniBioMessageDataPluginPrivate::messageSize()
{
return iBioClientMtm->Entry().Entry().iSize;
}
//---------------------------------------------------------------
// UniBioMessageDataPluginPrivate::toRecipientList
// @see header
//---------------------------------------------------------------
void UniBioMessageDataPluginPrivate::toRecipientList(
ConvergedMessageAddressList& mAddressList)
{
TPtrC name;
TPtrC address;
CPlainText* pText = CPlainText::NewL();
CleanupStack::PushL(pText);
CSmsHeader* smsHeader = CSmsHeader::NewL(CSmsPDU::ESmsSubmit, *pText);
CleanupStack::PushL(smsHeader);
CMsvStore* store = iMsvEntry->ReadStoreL();
CleanupStack::PushL(store);
smsHeader->RestoreL(*store);
for (TInt id = 0; id < smsHeader->Recipients().Count(); ++id)
{
CSmsNumber* rcpt = smsHeader->Recipients()[id];
name.Set(rcpt->Name());
address.Set(rcpt->Address());
ConvergedMessageAddress
* messageAddress =
new ConvergedMessageAddress(XQConversions::s60DescToQString(address),
XQConversions::s60DescToQString(name));
mAddressList.append(messageAddress);
}
CleanupStack::PopAndDestroy(3, pText);
}
//---------------------------------------------------------------
// UniBioMessageDataPluginPrivate::fromAddress
// @see header
//---------------------------------------------------------------
void UniBioMessageDataPluginPrivate::fromAddress(QString& messageAddress)
{
CPlainText* pText = CPlainText::NewL();
CleanupStack::PushL(pText);
CSmsHeader* smsHeader = CSmsHeader::NewL(CSmsPDU::ESmsDeliver, *pText);
CleanupStack::PushL(smsHeader);
CMsvStore* store = iMsvEntry->ReadStoreL();
CleanupStack::PushL(store);
smsHeader->RestoreL(*store);
messageAddress
= XQConversions::s60DescToQString(smsHeader->FromAddress());
CleanupStack::PopAndDestroy(3, pText);
}
//---------------------------------------------------------------
// UniBioMessageDataPluginPrivate::timeStamp
// @see header
//---------------------------------------------------------------
int UniBioMessageDataPluginPrivate::timeStamp()
{
QDateTime retTimeStamp;
TTime timeStamp = iBioClientMtm->Entry().Entry().iDate;
TTime unixEpoch(KUnixEpoch);
TTimeIntervalSeconds seconds;
timeStamp.SecondsFrom(unixEpoch, seconds);
return seconds.Int();
}
//---------------------------------------------------------------
// UniBioMessageDataPluginPrivate::attachmentList
// @see header
//---------------------------------------------------------------
RFile UniBioMessageDataPluginPrivate::attachmentL()
{
if (attachmentProcessed) {
CMsvStore* store1 = iMsvEntry->ReadStoreL();
CleanupStack::PushL(store1);
MMsvAttachmentManager& attachMan = store1->AttachmentManagerL();
RFile file;
if (iAttachmentCount > 0)
{
file = attachMan.GetAttachmentFileL(0);
}
CleanupStack::PopAndDestroy(store1);
return file;
}
RFile file;
if (iMsvEntry->Entry().SendingState() != KMsvSendStateNotApplicable
|| iMsvEntry->Entry().SendingState() != KMsvSendStateUnknown) {
CMsvStore* store = iMsvEntry->ReadStoreL();
CleanupStack::PushL(store);
MMsvAttachmentManager& attachMan = store->AttachmentManagerL();
iAttachmentCount = attachMan.AttachmentCount();
if (iAttachmentCount > 0) {
file = attachMan.GetAttachmentFileL(0);
}
CleanupStack::PopAndDestroy(store);
}
if (iAttachmentCount == 0) {
CMsvEntrySelection* selection = new (ELeave) CMsvEntrySelection;
CleanupStack::PushL(selection);
selection->AppendL(iMessageId);
TBuf8<1> aParameter;
CMsvOperationActiveSchedulerWait* wait = CMsvOperationActiveSchedulerWait::NewLC();
CMsvOperation* operation = iBioClientMtm->InvokeAsyncFunctionL(KBiosMtmParse, *selection,
aParameter, wait->iStatus);
wait->Start();
CMsvStore* store = iMsvEntry->ReadStoreL();
CleanupStack::PushL(store);
MMsvAttachmentManager& attachMan = store->AttachmentManagerL();
iAttachmentCount = attachMan.AttachmentCount();
if(iAttachmentCount) {
file = attachMan.GetAttachmentFileL(0);
}
delete operation;
CleanupStack::PopAndDestroy(3, selection);
attachmentProcessed = ETrue;
}
return file;
}
//---------------------------------------------------------------
// UniBioMessageDataPluginPrivate::attachmentCount
// @see header
//---------------------------------------------------------------
int UniBioMessageDataPluginPrivate::attachmentCount()
{
if (!attachmentProcessed) {
RFile file = attachmentL();
file.Close();
}
return (int) iAttachmentCount;
}
//---------------------------------------------------------------
// UniBioMessageDataPluginPrivate::messagePriority
// @see header
//---------------------------------------------------------------
MsgPriority UniBioMessageDataPluginPrivate::messagePriority()
{
MsgPriority priority = (MsgPriority) iMsvEntry->Entry().Priority();
return priority;
}
//---------------------------------------------------------------
// UniBioMessageDataPluginPrivate::session
// @see header
//---------------------------------------------------------------
CMsvSession* UniBioMessageDataPluginPrivate::session()
{
return iMSession;
}
//---------------------------------------------------------------
// UniBioMessageDataPluginPrivate::HandleSessionEventL
// @see header
//---------------------------------------------------------------
void UniBioMessageDataPluginPrivate::HandleSessionEventL(TMsvSessionEvent /*aEvent*/,
TAny* /*aArg1*/,
TAny* /*aArg2*/, TAny* /*aArg3*/)
{
// do nothing
}