diff -r 238255e8b033 -r 84d9eb65b26f messagingapp/msgutils/unidatamodel/unimmsdataplugin/src/unimmsdataplugin_p.cpp --- a/messagingapp/msgutils/unidatamodel/unimmsdataplugin/src/unimmsdataplugin_p.cpp Fri Apr 16 14:56:15 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,598 +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 - -#include -#include -#include -#include -#include -#include - - -#include - -#include "convergedmessage.h" -#include "s60qconversions.h" -#include "convergedmessageaddress.h" -#include "unimmsdataplugin_p.h" -#include "UniDataModel.h" -#include "debugtraces.h" -#include "sessioneventhandler.h" - - -#define KSenduiMtmMmsUidValue 0x100058E1 -const TUid KSenduiMtmMmsUid = -{KSenduiMtmMmsUidValue}; -_LIT(KUnixEpoch, "19700000:000000.000000"); - -const TInt KMmsArrayAllocationNumber = 6; - -UniMMSDataPluginPrivate::UniMMSDataPluginPrivate(): - mSession(NULL), - mMtmRegistry(NULL), - mUniDataModel(NULL), - mMmsClient(NULL), - mInsertingMedia(NULL), - iEditor(NULL), - iDom(NULL), - iDRMHelper(NULL), - iSessionHandler(NULL) - { - - done = EFalse; - iSessionHandler = new SessionEventHandler(); - mSession = CMsvSession::OpenSyncL(*iSessionHandler); - iSessionHandler->start(); - } - -void UniMMSDataPluginPrivate::initL() -{ - mMtmRegistry = CClientMtmRegistry::NewL(*mSession); - mMmsClient - = static_cast (mMtmRegistry->NewMtmL(KSenduiMtmMmsUid)); - - User::LeaveIfError(mfsSession.Connect()); - iMessageId = 0; -} - -UniMMSDataPluginPrivate::~UniMMSDataPluginPrivate() -{ - delete iEditor; - delete iDom; - if(mUniDataModel) - { - delete mUniDataModel; - } - mfsSession.Close(); - delete mMmsClient; - delete mMtmRegistry; - delete iSessionHandler; - delete mSession; -} - -int UniMMSDataPluginPrivate::setMessageId(int messageId) -{ - TInt error = KErrNone; - TRAP(error, setMessageIdL(messageId)); - return error; -} - -void UniMMSDataPluginPrivate::setMessageIdL(int messageId) -{ - if (done == EFalse) - { - initL(); - } - - if (iMessageId != messageId) - { - if (done) - { - reset(); - } - done = ETrue; - iMessageId = messageId; - mMmsClient->SwitchCurrentEntryL(iMessageId); - mMmsClient->LoadMessageL(); - mUniDataModel = CUniDataModel::NewL(mfsSession, *mMmsClient); - mUniDataModel->RestoreL(*this, EFalse); - } -} - -void UniMMSDataPluginPrivate::reset() -{ - delete mUniDataModel; - mUniDataModel = NULL; -} - -void UniMMSDataPluginPrivate::body(QString& aBodyText) -{ - - CRichText& textBody = mMmsClient->Body(); - TInt len = textBody.DocumentLength(); - HBufC* buf = HBufC::NewL(len); - TPtr bufPtr = buf->Des(); - aBodyText = S60QConversions::s60DescToQString(bufPtr); -} - -int UniMMSDataPluginPrivate::messageSize() -{ - return mMmsClient->MessageSize(); -} - - -QString UniMMSDataPluginPrivate::subject() -{ - TPtrC sub = mMmsClient->SubjectL(); - return S60QConversions::s60DescToQString(sub); -} - - - - -void UniMMSDataPluginPrivate::toRecipientList( - ConvergedMessageAddressList& mAddressList) -{ - CMsvEntry* cEntry = mSession->GetEntryL(KMsvGlobalInBoxIndexEntryIdValue); - CleanupStack::PushL(cEntry); - TRAPD (error, cEntry->SetEntryL( iMessageId )); - if (error != KErrNone) - { - CleanupStack::PopAndDestroy(); // cEntry - return; - } - CMsvStore* store = cEntry->ReadStoreL(); - CleanupStack::PushL(store); - CMmsSettings* settings = CMmsSettings::NewL(); - CleanupStack::PushL(settings); - CMmsHeaders* mmsHeaders = CMmsHeaders::NewL(settings->MmsVersion()); - CleanupStack::PushL(mmsHeaders); - mmsHeaders->RestoreL(*store); - TPtrC name; - TPtrC address; - TPtrC to; - for (TInt id = 0; id < mmsHeaders->ToRecipients().MdcaCount(); id++) - { - to.Set( (mmsHeaders->ToRecipients())[id]); - extractNameAndAddress(to, name, address); - // populate address - ConvergedMessageAddress - * messageAddress = - new ConvergedMessageAddress(S60QConversions::s60DescToQString(address), - S60QConversions::s60DescToQString(name)); - mAddressList.append(messageAddress); - } - - CleanupStack::PopAndDestroy(3); // mmsHeaders, settings, store - - CleanupStack::PopAndDestroy(); // cEntry -} - -void UniMMSDataPluginPrivate::ccRecipientList( - ConvergedMessageAddressList& mAddressList) -{ - CMsvEntry* cEntry = mSession->GetEntryL(KMsvGlobalInBoxIndexEntryIdValue); - CleanupStack::PushL(cEntry); - TRAPD (error, cEntry->SetEntryL( iMessageId )); - if (error != KErrNone) - { - CleanupStack::PopAndDestroy(); // cEntry - return; - } - CMsvStore* store = cEntry->ReadStoreL(); - CleanupStack::PushL(store); - CMmsSettings* settings = CMmsSettings::NewL(); - CleanupStack::PushL(settings); - CMmsHeaders* mmsHeaders = CMmsHeaders::NewL(settings->MmsVersion()); - CleanupStack::PushL(mmsHeaders); - mmsHeaders->RestoreL(*store); - //CDesCArray& ccList = mmsHeaders->CcRecipients(); - - TPtrC cc; - TPtrC name; - TPtrC address; - for (TInt id = 0; id < mmsHeaders->CcRecipients().MdcaCount(); id++) - { - cc.Set( (mmsHeaders->CcRecipients())[id]); - extractNameAndAddress(cc, name, address); - // populate address - ConvergedMessageAddress - * messageAddress = - new ConvergedMessageAddress(S60QConversions::s60DescToQString(address), - S60QConversions::s60DescToQString(name)); - mAddressList.append(messageAddress); - } - - CleanupStack::PopAndDestroy(3); // mmsHeaders, settings, store - - CleanupStack::PopAndDestroy(); // cEntry -} - -void UniMMSDataPluginPrivate::bccRecipientList( - ConvergedMessageAddressList& mAddressList) -{ - CMsvEntry* cEntry = mSession->GetEntryL(KMsvGlobalInBoxIndexEntryIdValue); - CleanupStack::PushL(cEntry); - TRAPD (error, cEntry->SetEntryL( iMessageId )); - if (error != KErrNone) - { - CleanupStack::PopAndDestroy(); // cEntry - return; - } - CMsvStore* store = cEntry->ReadStoreL(); - CleanupStack::PushL(store); - CMmsSettings* settings = CMmsSettings::NewL(); - CleanupStack::PushL(settings); - CMmsHeaders* mmsHeaders = CMmsHeaders::NewL(settings->MmsVersion()); - CleanupStack::PushL(mmsHeaders); - mmsHeaders->RestoreL(*store); - //CDesCArray& bccList = mmsHeaders->BccRecipients(); - - TPtrC bcc; - TPtrC name; - TPtrC address; - for (TInt id = 0; id < mmsHeaders->BccRecipients().MdcaCount(); id++) - { - bcc.Set( (mmsHeaders->BccRecipients())[id]); - extractNameAndAddress(bcc, name, address); - // populate address - ConvergedMessageAddress - * messageAddress = - new ConvergedMessageAddress(S60QConversions::s60DescToQString(address), - S60QConversions::s60DescToQString(name)); - mAddressList.append(messageAddress); - } - - CleanupStack::PopAndDestroy(3); // mmsHeaders, settings, store - - CleanupStack::PopAndDestroy(); // cEntry -} - -void UniMMSDataPluginPrivate::fromAddress(QString& messageAddress) -{ - - TPtrC sender = mMmsClient->Sender(); - messageAddress = S60QConversions::s60DescToQString(sender); -} - -UniMessageInfoList UniMMSDataPluginPrivate::attachmentList() -{ - UniMessageInfoList attlist; - int attcount = mUniDataModel->AttachmentList().Count(); - - QString path; - QString mimetype; - int size; - for (int i = 0; i < attcount; i++) - { - CUniObject *obj = mUniDataModel->AttachmentList().GetByIndex(i); - - mimetype = S60QConversions::s60Desc8ToQString(obj->MimeType()); - path - = S60QConversions::s60DescToQString(obj->MediaInfo()->FullFilePath()); - size = obj->Size(EFalse); - - UniMessageInfo *msgobj = new UniMessageInfo(path, size, mimetype); - attlist << msgobj; - } - - return attlist; -} - -QString UniMMSDataPluginPrivate::messageType() -{ - QString str("mms"); - return str; -} - -MsgPriority UniMMSDataPluginPrivate::messagePriority() -{ - return Normal; -} - -int UniMMSDataPluginPrivate::attachmentCount() -{ - return mUniDataModel->AttachmentList().Count(); -} - -bool UniMMSDataPluginPrivate::hasAttachment() -{ - int count = mUniDataModel->AttachmentList().Count(); - if (count > 0) - { - return true; - } - else - { - return false; - } -} - -int UniMMSDataPluginPrivate::objectCount() -{ - return mUniDataModel->ObjectList().Count(); -} - -UniMessageInfoList UniMMSDataPluginPrivate::objectList() -{ - UniMessageInfoList objlist; - int objcount = mUniDataModel->ObjectList().Count(); - - QString path; - QString mimetype; - int size; - for (int i = 0; i < objcount; i++) - { - CUniObject *obj = mUniDataModel->ObjectList().GetByIndex(i); - - mimetype = S60QConversions::s60Desc8ToQString(obj->MimeType()); - path - = S60QConversions::s60DescToQString(obj->MediaInfo()->FullFilePath()); - size = obj->Size(EFalse); - - UniMessageInfo *msgobj = new UniMessageInfo(path, size, mimetype); - objlist << msgobj; - } - - return objlist; -} - -/* - * For now not reqd - */ -int UniMMSDataPluginPrivate::slideCount() -{ - return mUniDataModel->SmilModel().SlideCount(); -} - -UniMessageInfoList UniMMSDataPluginPrivate::slideContent(TInt slidenum) -{ - UniMessageInfoList slidecontent; - - int slideobjcount = mUniDataModel->SmilModel().SlideObjectCount(slidenum); - - QString path; - QString mimetype; - int size; - for (int i = 0; i < slideobjcount; i++) - { - CUniObject *obj = mUniDataModel->SmilModel().GetObjectByIndex(slidenum, - i); - - mimetype = S60QConversions::s60Desc8ToQString(obj->MimeType()); - path - = S60QConversions::s60DescToQString(obj->MediaInfo()->FullFilePath()); - size = obj->Size(EFalse); - - UniMessageInfo *msgobj = new UniMessageInfo(path, size, mimetype); - slidecontent << msgobj; - } - - return slidecontent; -} - -int UniMMSDataPluginPrivate::timeStamp() -{ - QDateTime retTimeStamp; - TTime timeStamp = mMmsClient->Entry().Entry().iDate; - TTime unixEpoch(KUnixEpoch); - TTimeIntervalSeconds seconds; - timeStamp.SecondsFrom(unixEpoch, seconds); - return seconds.Int(); -} - -void UniMMSDataPluginPrivate::extractNameAndAddress(const TDesC& aMsvAddress, - TPtrC& aName, - TPtrC& aAddress) -{ - // For address information separation (start) - const TUint KMsgMmsAddressStartChar('<'); - - // For address information separation (end) - const TUint KMsgMmsAddressEndChar('>'); - - TInt addressStart = aMsvAddress.LocateReverse(KMsgMmsAddressStartChar); - TInt addressEnd = aMsvAddress.LocateReverse(KMsgMmsAddressEndChar); - - 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 - } -} - -void UniMMSDataPluginPrivate::RestoreReady(TInt /*aParseResult*/, - TInt /*aError*/) -{ -} - -void UniMMSDataPluginPrivate::addObjectL( int aSlideNum,UniMessageInfo* aInfo ) -{ - TInt error = KErrNone; - - HBufC* filePath = S60QConversions::qStringToS60Desc(aInfo->path()); - if(filePath) - { - CleanupStack::PushL(filePath); - - RFile file = mUniDataModel->MediaResolver().FileHandleL( *filePath); - CleanupClosePushL( file ); - - mInsertingMedia = mUniDataModel->MediaResolver().CreateMediaInfoL( file ); - - //TODO try using the commented code after testing on diff env or on hardware - //mUniDataModel->MediaResolver().ParseInfoDetailsL( mInsertingMedia, file ); - iDRMHelper = CDRMHelper::NewL(); - mInsertingMedia->ParseInfoDetailsL( file, *iDRMHelper, *this ); - - mUniDataModel->SmilModel().AddObjectL( *this, aSlideNum, mInsertingMedia ); - - //Since the ownership is transferred dont delete these - mInsertingMedia = NULL; - iDRMHelper = NULL; - - - CleanupStack::PopAndDestroy( &file ); - CleanupStack::PopAndDestroy( filePath ); - } -} - -void UniMMSDataPluginPrivate::ObjectSaveReady( TInt /*aError*/ ) -{ - -} - -void UniMMSDataPluginPrivate::MediaInfoParsed() -{ - -} -void UniMMSDataPluginPrivate::addTextObjectL(int aSlideNum,QString aText ) -{ - TInt error = KErrNone; - - //Delete this always - delete iEditor; - iEditor = NULL; - - HBufC* textContent = S60QConversions::qStringToS60Desc(aText); - if(textContent) - { - CleanupStack::PushL(textContent); - - iEditor = new CEikRichTextEditor; - iEditor->ConstructL(NULL,0,0,CEikEdwin::ENoAutoSelection| - CEikEdwin::EOwnsWindow,0,0); - iEditor->RichText()->InsertL(0,*textContent); - - mUniDataModel->SmilModel().AddTextObjectL( aSlideNum,iEditor); - CleanupStack::PopAndDestroy( textContent ); - } -} - -void UniMMSDataPluginPrivate::addSlideL( int aSlideNum ) -{ - TInt error = KErrNone; - mUniDataModel->SmilModel().AddSlideL(aSlideNum); -} - -void UniMMSDataPluginPrivate::composeSmilL(CMsvStore& aEditStore) -{ - TInt error = KErrNone; - - delete iDom; - iDom = NULL; - - iDom = mUniDataModel->SmilModel().ComposeL(); - - mUniDataModel->SmilList().CreateSmilAttachmentL( *this,aEditStore, iDom ); -} - -void UniMMSDataPluginPrivate::saveObjects() -{ - mUniDataModel->ObjectList().SaveAll( *this, CMsvAttachment::EMsvFile ); -} - -void UniMMSDataPluginPrivate::SmilComposeEvent( TInt /*aError*/ ) -{ - -} - -TMsvAttachmentId UniMMSDataPluginPrivate::getSmilAttachmentByIndex() -{ - return mUniDataModel->SmilList().GetSmilAttachmentByIndex( 0 ); -} - -void UniMMSDataPluginPrivate::restoreL(CBaseMtm& mtm) -{ - initL(); - mUniDataModel = CUniDataModel::NewL(mfsSession, mtm); - mUniDataModel->RestoreL(*this, ETrue); -} - -void UniMMSDataPluginPrivate::addAttachmentL( UniMessageInfo* aInfo ) -{ - TInt error = KErrNone; - - HBufC* filePath = S60QConversions::qStringToS60Desc(aInfo->path()); - if(filePath) - { - CleanupStack::PushL(filePath); - - RFile file = mUniDataModel->MediaResolver().FileHandleL( *filePath); - CleanupClosePushL( file ); - - mInsertingMedia = mUniDataModel->MediaResolver().CreateMediaInfoL( file ); - - //TODO try using the commented code after testing on diff env or on hardware - //mUniDataModel->MediaResolver().ParseInfoDetailsL( mInsertingMedia, file ); - iDRMHelper = CDRMHelper::NewL(); - mInsertingMedia->ParseInfoDetailsL( file, *iDRMHelper, *this ); - - mUniDataModel->AddAttachmentL( *this, mInsertingMedia, - CMsvAttachment::EMsvFile ); - - //Since the ownership is transferred dont delete these - mInsertingMedia = NULL; - iDRMHelper = NULL; - - - CleanupStack::PopAndDestroy( &file ); - CleanupStack::PopAndDestroy( filePath ); - } -} - -void UniMMSDataPluginPrivate::removeSlide(int aSlideNumber) -{ - mUniDataModel->SmilModel().RemoveSlide(aSlideNumber); -} - - -CMsvSession* UniMMSDataPluginPrivate::session() -{ - return mSession; -} -