diff -r 238255e8b033 -r 84d9eb65b26f messagingapp/msgutils/unidatamodel/unismsdataplugin/src/unismsdataplugin_p.cpp --- a/messagingapp/msgutils/unidatamodel/unismsdataplugin/src/unismsdataplugin_p.cpp Fri Apr 16 14:56:15 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,302 +0,0 @@ -/* - * 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 "debugtraces.h" - -#include - -#include -//USER INCLUDES -#include "s60qconversions.h" -#include "convergedmessageaddress.h" -#include "convergedmessage.h" - -#include "unismsdataplugin_p.h" -#include "sessioneventhandler.h" - -#define KSmsMtmUidValue 0x1000102C -const TUid KSmsMtmUid = -{KSmsMtmUidValue}; -_LIT(KUnixEpoch, "19700000:000000.000000"); - -//--------------------------------------------------------------- -// UniSMSDataPluginPrivate::~UniSMSDataPluginPrivate -// @see header -//--------------------------------------------------------------- -UniSMSDataPluginPrivate::~UniSMSDataPluginPrivate() -{ - q_ptr = NULL; - delete iSmsClient; - delete iMtmReg; - delete iSessionHandler; - delete iMSession; -} - -//--------------------------------------------------------------- -// UniSMSDataPluginPrivate::UniSMSDataPluginPrivate -// @see header -//--------------------------------------------------------------- -UniSMSDataPluginPrivate::UniSMSDataPluginPrivate(UniSMSDataPlugin* plugin) : - iMSession(NULL), - iMtmReg(NULL), - iSmsClient(NULL), - q_ptr(plugin), - iSessionHandler(NULL) -{ - iSessionHandler = new SessionEventHandler(); - iMSession = CMsvSession::OpenSyncL(*iSessionHandler); - iSessionHandler->start(); - done = EFalse; -} - -void UniSMSDataPluginPrivate::initL() -{ - - iMtmReg = CClientMtmRegistry::NewL(*iMSession); - TMsvSelectionOrdering ordering; - - CMsvEntry* root = CMsvEntry::NewL(*iMSession, - KMsvRootIndexEntryId, - ordering); - CleanupStack::PushL(root); - - TMsvId firstId; - TRAPD(err, TSmsUtilities::ServiceIdL(*root,firstId)); - - if (err == KErrNotFound) - { - TMsvEntry entry; - entry.iMtm = KUidMsgTypeSMS; - entry.iType = KUidMsvServiceEntry; - entry.SetReadOnly(EFalse); - entry.SetVisible(EFalse); - entry.iDate.UniversalTime(); - entry.iDetails.Set(_L("SMS Service")); - - root->SetEntryL(KMsvRootIndexEntryId); - root->CreateL(entry); - } - - CleanupStack::PopAndDestroy(root); - iSmsClient = static_cast (iMtmReg->NewMtmL(KSmsMtmUid)); - done = ETrue; - iMessageId = 0; -} - -//--------------------------------------------------------------- -// UniSMSDataPluginPrivate::reset -// @see header -//--------------------------------------------------------------- -void UniSMSDataPluginPrivate::reset() -{ -} - -//--------------------------------------------------------------- -// UniSMSDataPluginPrivate::setMessageId -// @see header -//--------------------------------------------------------------- -int UniSMSDataPluginPrivate::setMessageId(int mId) -{ - TInt error = KErrNone; - TRAP(error, setMessageIdL(mId)); - return error; - -} - -void UniSMSDataPluginPrivate::setMessageIdL(int mId) -{ - if (done == EFalse) - { - initL(); - } - if (iMessageId != mId) - { - iMessageId = (TMsvId) mId; - iSmsClient->SwitchCurrentEntryL(iMessageId); - iSmsClient->LoadMessageL(); - } - -} - -//--------------------------------------------------------------- -// UniSMSDataPluginPrivate::body -// @see header -//--------------------------------------------------------------- -void UniSMSDataPluginPrivate::body(QString& aBodyText) -{ - CRichText& textBody = iSmsClient->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; -} - -//--------------------------------------------------------------- -// UniSMSDataPluginPrivate::messageSize -// @see header -//--------------------------------------------------------------- -qint32 UniSMSDataPluginPrivate::messageSize() -{ - return iSmsClient->Entry().Entry().iSize; -} - -//--------------------------------------------------------------- -// UniSMSDataPluginPrivate::toRecipientList -// @see header -//--------------------------------------------------------------- -void UniSMSDataPluginPrivate::toRecipientList( - ConvergedMessageAddressList& mAddressList) -{ - TPtrC name; - TPtrC address; - // Get the recipient list from the client mtm - const CMsvRecipientList& smsRecipients = iSmsClient->AddresseeList(); - - for (TInt id = 0; id < smsRecipients.Count(); ++id) - { - extractNameAndAddress(smsRecipients[id], name, address); - // populate address - ConvergedMessageAddress - * messageAddress = - new ConvergedMessageAddress(S60QConversions::s60DescToQString(address), - S60QConversions::s60DescToQString(name)); - mAddressList.append(messageAddress); - } - - const CSmsEmailFields& emailFields = iSmsClient->SmsHeader().EmailFields(); - // check if it is a EOS - if (emailFields.HasAddress()) - { - const MDesCArray& emailRecipients = emailFields.Addresses(); - for (TInt id = 0; id < emailRecipients.MdcaCount(); ++id) - { - extractNameAndAddress(emailRecipients.MdcaPoint(id), name, address); - ConvergedMessageAddress - * messageAddress = - new ConvergedMessageAddress(S60QConversions::s60DescToQString(address), - S60QConversions::s60DescToQString(name)); - mAddressList.append(messageAddress); - } - } - -} - -//--------------------------------------------------------------- -// UniSMSDataPluginPrivate::fromAddress -// @see header -//--------------------------------------------------------------- -void UniSMSDataPluginPrivate::fromAddress(QString& messageAddress) -{ - CPlainText* pText = CPlainText::NewL(); - CleanupStack::PushL(pText); - - CSmsHeader* smsHeader = CSmsHeader::NewL(CSmsPDU::ESmsDeliver, *pText); - CleanupStack::PushL(smsHeader); - - CMsvEntry *cEntry = CMsvEntry::NewL(iSmsClient->Session(), - iMessageId, - TMsvSelectionOrdering()); - CleanupStack::PushL(cEntry); - - CMsvStore* store = cEntry->ReadStoreL(); - CleanupStack::PushL(store); - - smsHeader->RestoreL(*store); - - messageAddress - = S60QConversions::s60DescToQString(smsHeader->FromAddress()); - CleanupStack::PopAndDestroy(4, pText); -} - -//--------------------------------------------------------------- -// UniSMSDataPluginPrivate::timeStamp -// @see header -//--------------------------------------------------------------- -int UniSMSDataPluginPrivate::timeStamp() -{ - QDateTime retTimeStamp; - TTime timeStamp = iSmsClient->Entry().Entry().iDate; - TTime unixEpoch(KUnixEpoch); - TTimeIntervalSeconds seconds; - timeStamp.SecondsFrom(unixEpoch, seconds); - return seconds.Int(); -} - -//--------------------------------------------------------------- -// UniSMSDataPluginPrivate::session -// @see header -//--------------------------------------------------------------- -CMsvSession* UniSMSDataPluginPrivate::session() -{ - return iMSession; -} - -//--------------------------------------------------------------- -// UniSMSDataPluginPrivate::extractNameAndAddress -// @see header -//--------------------------------------------------------------- -void UniSMSDataPluginPrivate::extractNameAndAddress(const TDesC& aMsvAddress, - TPtrC& aName, - TPtrC& aAddress) -{ - // For address information separation (start) - const TUint KMsgSmsAddressStartChar('<'); - - // For address information separation (end) - const TUint KMsgSmsAddressEndChar('>'); - - TInt addressStart = aMsvAddress.LocateReverse(KMsgSmsAddressStartChar); - TInt addressEnd = aMsvAddress.LocateReverse(KMsgSmsAddressEndChar); - - if (addressStart != KErrNotFound && addressEnd != KErrNotFound - && addressEnd > addressStart) - { - // verified address, will be used as selected from contacts manager - aName.Set(aMsvAddress.Ptr(), addressStart); - aAddress.Set(aMsvAddress.Mid(addressStart + 1).Ptr(), (addressEnd - - addressStart) - 1); - if (!aAddress.Length()) - { - aAddress.Set(aName); - aName.Set(KNullDesC); // empty string - } - } - else - { - // unverified string, will be used as entered in the header field - aName.Set(KNullDesC); // empty string - aAddress.Set(aMsvAddress.Ptr(), aMsvAddress.Length()); // a whole string to address - } - - if (aName.CompareF(aAddress) == 0) - { - aName.Set(KNullDesC); // empty string - } -} -