diff -r 4697dfb2d7ad -r 238255e8b033 messagingapp/msgutils/unidatamodel/univcaldataplugin/src/univcaldataplugin_p.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingapp/msgutils/unidatamodel/univcaldataplugin/src/univcaldataplugin_p.cpp Fri Apr 16 14:56:15 2010 +0300 @@ -0,0 +1,319 @@ +/* + * 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 +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include "debugtraces.h" + +#include +#include +#include + +#include "convergedmessage.h" +#include "convergedmessageaddress.h" +#include "univcaldataplugin_p.h" +#include "sessioneventhandler.h" + +#define KBioUidValue 0x10001262 +const TUid KBioUidValueUid = +{KBioUidValue}; + + +_LIT(KUnixEpoch, "19700000:000000.000000"); + +//--------------------------------------------------------------- +// UniVCalDataPluginPrivate::~UniVCalDataPluginPrivate +// @see header +//--------------------------------------------------------------- +UniVCalDataPluginPrivate::~UniVCalDataPluginPrivate() +{ + q_ptr = NULL; + if (iMsvEntry) + { + delete iMsvEntry; + } + + delete iBioClientMtm; + delete iMtmReg; + delete iSessionHandler; + delete iMSession; + +} + +//--------------------------------------------------------------- +// UniVCalDataPluginPrivate::UniVCalDataPluginPrivate +// @see header +//--------------------------------------------------------------- +UniVCalDataPluginPrivate::UniVCalDataPluginPrivate(UniVCalDataPlugin* plugin) : + q_ptr(plugin), iMSession(NULL), iMtmReg(NULL), iBioClientMtm(NULL), + iMsvEntry(NULL), iSessionHandler(NULL) +{ + iSessionHandler = new SessionEventHandler(); + // Create a new messaging server session.. + iMSession = CMsvSession::OpenSyncL(*iSessionHandler); + iSessionHandler->start(); + done = EFalse; +} + +void UniVCalDataPluginPrivate::initL() +{ + iMtmReg = CClientMtmRegistry::NewL(*iMSession); + iBioClientMtm = (CBIOClientMtm*) iMtmReg->NewMtmL(KBioUidValueUid); + + attachmentProcessed = EFalse; + done = ETrue; + +} + +//--------------------------------------------------------------- +// UniVCalDataPluginPrivate::reset +// @see header +//--------------------------------------------------------------- +void UniVCalDataPluginPrivate::reset() +{ +} + +//--------------------------------------------------------------- +// UniVCalDataPluginPrivate::setMessageId +// @see header +//--------------------------------------------------------------- +int UniVCalDataPluginPrivate::setMessageId(int mId) +{ + TInt error = KErrNone; + TRAP(error, setMessageIdL(mId)); + return error; +} + +//--------------------------------------------------------------- +// UniVCalDataPluginPrivate::setMessageIdL +// @see header +//--------------------------------------------------------------- +void UniVCalDataPluginPrivate::setMessageIdL(int mId) +{ + if (done == EFalse) + { + initL(); + } + iMessageId = (TMsvId) mId; + iBioClientMtm->SwitchCurrentEntryL(iMessageId); + + iMsvEntry = CMsvEntry::NewL(iBioClientMtm->Session(), + iMessageId, + TMsvSelectionOrdering()); + + iBioClientMtm->LoadMessageL(); +} + +//--------------------------------------------------------------- +// UniVCalDataPluginPrivate::body +// @see header +//--------------------------------------------------------------- +void UniVCalDataPluginPrivate::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 = S60QConversions::s60DescToQString(*buf); + delete buf; +} + +//--------------------------------------------------------------- +// UniVCalDataPluginPrivate::messageSize +// @see header +//--------------------------------------------------------------- +qint32 UniVCalDataPluginPrivate::messageSize() +{ + return iBioClientMtm->Entry().Entry().iSize; +} + +//--------------------------------------------------------------- +// UniVCalDataPluginPrivate::toRecipientList +// @see header +//--------------------------------------------------------------- +void UniVCalDataPluginPrivate::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(S60QConversions::s60DescToQString(address), + S60QConversions::s60DescToQString(name)); + mAddressList.append(messageAddress); + } + CleanupStack::PopAndDestroy(3, pText); + +} + +//--------------------------------------------------------------- +// UniVCalDataPluginPrivate::fromAddress +// @see header +//--------------------------------------------------------------- +void UniVCalDataPluginPrivate::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 + = S60QConversions::s60DescToQString(smsHeader->FromAddress()); + CleanupStack::PopAndDestroy(3, pText); +} + +//--------------------------------------------------------------- +// UniVCalDataPluginPrivate::timeStamp +// @see header +//--------------------------------------------------------------- +int UniVCalDataPluginPrivate::timeStamp() +{ + QDateTime retTimeStamp; + TTime timeStamp = iBioClientMtm->Entry().Entry().iDate; + TTime unixEpoch(KUnixEpoch); + TTimeIntervalSeconds seconds; + timeStamp.SecondsFrom(unixEpoch, seconds); + return seconds.Int(); +} + +//--------------------------------------------------------------- +// UniVCalDataPluginPrivate::attachmentList +// @see header +//--------------------------------------------------------------- +RFile UniVCalDataPluginPrivate::attachmentL() +{ + if (attachmentProcessed) + { + + CMsvStore* store1 = iMsvEntry->ReadStoreL(); + CleanupStack::PushL(store1); + MMsvAttachmentManager& attachMan = store1->AttachmentManagerL(); + RFile file = attachMan.GetAttachmentFileL(0); + CleanupStack::PopAndDestroy(store1); + return file; + } + + CMsvEntrySelection* selection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(selection); + + selection->AppendL(iMessageId); + + TBuf8<1> aParameter; + CMsvOperationWait* wait = CMsvOperationWait::NewLC(); + wait->iStatus = KRequestPending; + wait->Start(); + + CMsvOperation* operation = + iBioClientMtm->InvokeAsyncFunctionL(KBiosMtmParse, + *selection, + aParameter, + wait->iStatus); + + CActiveScheduler::Start(); + + CMsvStore* store = iMsvEntry->ReadStoreL(); + CleanupStack::PushL(store); + MMsvAttachmentManager& attachMan = store->AttachmentManagerL(); + RFile file = attachMan.GetAttachmentFileL(0); + + delete operation; + CleanupStack::PopAndDestroy(3,selection); + attachmentProcessed = ETrue; + return file; + +} + +//--------------------------------------------------------------- +// UniVCalDataPluginPrivate::attachmentCount +// @see header +//--------------------------------------------------------------- + +int UniVCalDataPluginPrivate::attachmentCount() +{ + if (!attachmentProcessed) + { + RFile file = attachmentL(); + file.Close(); + } + + CMsvStore* store = iMsvEntry->ReadStoreL(); + CleanupStack::PushL(store); + + MMsvAttachmentManager& attachMan = store->AttachmentManagerL(); + int count = attachMan.AttachmentCount(); + CleanupStack::PopAndDestroy(store); + + return count; +} + +//--------------------------------------------------------------- +// UniVCalDataPluginPrivate::messagePriority +// @see header +//--------------------------------------------------------------- + +MsgPriority UniVCalDataPluginPrivate::messagePriority() +{ + + MsgPriority priority = (MsgPriority) iMsvEntry->Entry().Priority(); + return priority; +} + +//--------------------------------------------------------------- +// UniVCalDataPluginPrivate::session +// @see header +//--------------------------------------------------------------- +CMsvSession* UniVCalDataPluginPrivate::session() +{ + return iMSession; +} +