diff -r 4697dfb2d7ad -r 238255e8b033 messagingapp/msgui/msguiutils/src/msgsendutil.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingapp/msgui/msguiutils/src/msgsendutil.cpp Fri Apr 16 14:56:15 2010 +0300 @@ -0,0 +1,317 @@ +/* + * 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:Message send functionality handler. + * + */ + +#include "msgsendutil.h" +#include "debugtraces.h" +// plugin loader and plugin interface +#include "unieditorpluginloader.h" +#include "unieditorplugininterface.h" +// general editor utilities +#include "UniEditorGenUtils.h" + + +#define MSG_SETTINGS_PLUGIN "resource\\qt\\plugins\\controlpanel\\msgsettingsplugin.qtplugin" +//--------------------------------------------------------------- +// MsgSendUtil::MsgSendUtil +// Constructor +//-------------------------------------------------------------- +MsgSendUtil::MsgSendUtil(QObject* parentObject) : + QObject(parentObject), mPluginLoader(0), mUniEditorGenUtils(0) + { + // Load Plugins for send + mPluginLoader = new UniEditorPluginLoader(this); + mPluginLoader->loadPlugins(); + + mUniEditorGenUtils = new UniEditorGenUtils(); + } + +//--------------------------------------------------------------- +// MsgSendUtil::~MsgSendUtil +// Desctructor +//-------------------------------------------------------------- +MsgSendUtil::~MsgSendUtil() + { + if( mUniEditorGenUtils) + { + delete mUniEditorGenUtils; + mUniEditorGenUtils = NULL; + } + } + +//--------------------------------------------------------------- +// MsgSendUtil::saveToDrafts +// @see header file +//-------------------------------------------------------------- +TMsvId MsgSendUtil::saveToDrafts(ConvergedMessage& msg) + { + QDEBUG_WRITE("START MsgSendUtil::saveToDraft"); + bool emailOverSmsSupported = false; + TMsvId id = -1; + + if( checkEmailOverSms(msg, emailOverSmsSupported) + && checkMaxRecipientCount(msg) + && checkMaxMsgSizeLimit(msg) ) + { + UniEditorPluginInterface* pluginInterface = + mPluginLoader->getUniEditorPlugin(msg.messageType()); + id = pluginInterface->convertTo(&msg); + } + QDEBUG_WRITE("END MsgSendUtil::saveToDraft"); + return id; + } + +//--------------------------------------------------------------- +// MsgSendUtil::send +// @see header file +//-------------------------------------------------------------- +int MsgSendUtil::send(ConvergedMessage& msg) +{ + QDEBUG_WRITE("START MsgSendUtil::send"); + int retValue = KErrGeneral; + bool emailOverSmsSupported = false; + long int id = saveToDrafts(msg); + if(id != -1) + { + checkEmailOverSms(msg, emailOverSmsSupported); + UniEditorPluginInterface* pluginInterface = + mPluginLoader->getUniEditorPlugin(msg.messageType()); + if( validateService(pluginInterface, emailOverSmsSupported) ) + { + pluginInterface->send(id); + retValue = KErrNone; + } + else + { + //Delete the entry created in drafts as we are switching to settings + pluginInterface->deleteDraftsEntry(id); + retValue = KErrNotFound; + } + } + + QDEBUG_WRITE("END MsgSendUtil::send"); + return retValue; +} + +//--------------------------------------------------------------- +// MsgSendUtil::checkEmailOverSms +// @see header file +//-------------------------------------------------------------- +bool MsgSendUtil::checkEmailOverSms(ConvergedMessage& msg, bool& emailOverSmsSupported) + { + QDEBUG_WRITE("START MsgSendUtil::checkEmailOverSms"); + if (msg.messageType() == ConvergedMessage::Sms) + { + bool emailAddrPresent = false; + TRAPD(err,emailAddrPresent = + mUniEditorGenUtils->VerifyEmailAddressesL(msg.toAddressList())); + if (err == KErrNone && emailAddrPresent) + { + TRAPD(err, emailOverSmsSupported = mUniEditorGenUtils->AcceptEmailAddressesL()); + if (err == KErrNone && !emailOverSmsSupported) + { + //TODO if the note is to be shown or if we have to convert the msg type + msg.setMessageType(ConvergedMessage::Mms); + } + } + } + // if control is here, then checks are ok + QDEBUG_WRITE("END MsgSendUtil::checkEmailOverSms"); + return true; + } + +//--------------------------------------------------------------- +// MsgSendUtil::checkMaxRecipientCount +// @see header file +//-------------------------------------------------------------- +bool MsgSendUtil::checkMaxRecipientCount(ConvergedMessage& msg) + { + QDEBUG_WRITE("START MsgSendUtil::checkMaxRecipientCount"); + bool result = true; + // max recipient count check for sms + if (msg.messageType() == ConvergedMessage::Sms) + { + int maxSmsRecipientsCount = KDefaultSmsRecipients; + TRAP_IGNORE(maxSmsRecipientsCount = mUniEditorGenUtils->MaxSmsRecipientsL()); + if (msg.toAddressList().count() > maxSmsRecipientsCount) + { + //TODO show a note to user to delete some recipients + //TODO or convert msg to MMS ?? + result = false; + } + } + + // max recipient count check for mms + if (msg.messageType() == ConvergedMessage::Mms) + { + int maxMmsRecipientsCount = KDefaultMmsRecipients; + TRAP_IGNORE(maxMmsRecipientsCount = mUniEditorGenUtils->MaxMmsRecipientsL()); + if ( ( msg.toAddressList().count() + + msg.ccAddressList().count() + + msg.bccAddressList().count() ) > maxMmsRecipientsCount ) + { + //TODO show a note to user to delete some recipients + result = false; + } + } + // if control is here, then all checks are ok + QDEBUG_WRITE("END MsgSendUtil::checkMaxRecipientCount"); + return result; + } + +//--------------------------------------------------------------- +// MsgSendUtil::checkMaxMsgSizeLimit +// @see header file +//-------------------------------------------------------------- +bool MsgSendUtil::checkMaxMsgSizeLimit(ConvergedMessage& msg) + { + QDEBUG_WRITE("START MsgSendUtil::checkMaxMsgSizeLimit"); + bool result = true; + // msg size limit check for sms + if (msg.messageType() == ConvergedMessage::Sms) + { + int maxSmsMsgSize = KFirstNormalSmsLength; + TRAP_IGNORE(maxSmsMsgSize = mUniEditorGenUtils->MaxSmsMsgSizeL()); + if (getSmsMsgSize(msg) > maxSmsMsgSize) + { + // TODO: Msg size exceeded. Either convert to MMS?? or stall. + result = false; + } + } + + // msg size limit check for mms + if (msg.messageType() == ConvergedMessage::Mms) + { + int maxMmsMsgSize = KDefaultMaxSize; + TRAP_IGNORE(maxMmsMsgSize = mUniEditorGenUtils->MaxMmsMsgSizeL()); + if (getMmsMsgSize(msg) > maxMmsMsgSize) + { + // TODO: Show note and then give chance to user to delete content + result = false; + } + } + // if control is here, then all checks are ok + QDEBUG_WRITE("END MsgSendUtil::checkMaxMsgSizeLimit"); + return result; + } + +//--------------------------------------------------------------- +// MsgSendUtil::getSmsMsgSize +// @see header file +//-------------------------------------------------------------- +int MsgSendUtil::getSmsMsgSize(ConvergedMessage& msg) + { + QDEBUG_WRITE("START MsgSendUtil::getSmsMsgSize"); + int totalMsgSize = 0; + totalMsgSize += mUniEditorGenUtils->UTF8Size(msg.bodyText()) + + mUniEditorGenUtils->UTF8Size(msg.subject()); + bool ret = false; + TRAP_IGNORE(ret = mUniEditorGenUtils->AcceptEmailAddressesL()); + if (ret) + { + int emailAddrLen = longestEmailAddressSize(msg.toAddressList()); + if (emailAddrLen > 0) + { + // 1 char is needed by recipient and subject separator + totalMsgSize += emailAddrLen + 1; + } + } + //TODO: attachment size calculation are missing (e.g vCard/vCal etc) + + QDEBUG_WRITE("END MsgSendUtil::getSmsMsgSize"); + return totalMsgSize; + } + +//--------------------------------------------------------------- +// MsgSendUtil::longestEmailAddressSize +// @see header file +//-------------------------------------------------------------- +int MsgSendUtil::longestEmailAddressSize(ConvergedMessageAddressList addrList) + { + int count = addrList.count(); + int longestEmailSize = 0; + for(int i=0; iaddress().length()); + } + return longestEmailSize; + } + +//--------------------------------------------------------------- +// MsgSendUtil::getMmsMsgSize +// @see header file +//-------------------------------------------------------------- +int MsgSendUtil::getMmsMsgSize(ConvergedMessage& msg) + { + QDEBUG_WRITE("START MsgSendUtil::getMmsMsgSize"); + int totalMsgSize = 0; + int textSize = mUniEditorGenUtils->UTF8Size(msg.bodyText()); + totalMsgSize += textSize + + mUniEditorGenUtils->UTF8Size(msg.subject()); + ConvergedMessageAttachmentList attList = msg.attachments(); + int attCount = attList.count(); + bool hasInlineContent = false; + + for (int i=0; iattachmentType() == + ConvergedMessageAttachment::EInline) + { + hasInlineContent = true; + } + int attSize; + QString mimeType; + TMsgMediaType mediaType = EMsgMediaUnknown; + + attSize = 0; + TRAP_IGNORE(mUniEditorGenUtils->getFileInfoL( + attList.at(i)->filePath(), + attSize, mimeType, mediaType)); + totalMsgSize += attSize; + } + + if( hasInlineContent && textSize > 0 ) + { + // attachments are present, so we add our estimates + totalMsgSize += KEstimatedMmsSmilHeaderSize + KEstimatedMimeHeaderSize; + } + QDEBUG_WRITE("END MsgSendUtil::getMmsMsgSize"); + return totalMsgSize; + } + +//--------------------------------------------------------------- +// MsgSendUtil::validateService +// @see header file +//-------------------------------------------------------------- +bool MsgSendUtil::validateService( + UniEditorPluginInterface* pluginInterface, + bool emailOverSmsSupported) + { + QDEBUG_WRITE("START MsgSendUtil::validateService"); + bool result = true; + //If settings are missed then show a note and launch settings dialog + if (!pluginInterface->validateService(emailOverSmsSupported)) + { + //TODO: show note and launch settings dialog + + result = false; + } + // if control is here, then check is ok + QDEBUG_WRITE("END MsgSendUtil::validateService"); + return result; + } + +// EOF