--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/msguiutils/src/msgsendutil.cpp Tue Aug 31 15:11:31 2010 +0300
@@ -0,0 +1,314 @@
+/*
+ * 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"
+
+
+//---------------------------------------------------------------
+// MsgSendUtil::MsgSendUtil
+// Constructor
+//--------------------------------------------------------------
+MsgSendUtil::MsgSendUtil(QObject* parentObject) :
+ QObject(parentObject), mPluginLoader(0), mUniEditorGenUtils(0)
+ {
+ // Load Plugins for send
+ mPluginLoader = new UniEditorPluginLoader(this);
+ mUniEditorGenUtils = q_check_ptr(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; i<count; i++)
+ {
+ longestEmailSize = qMax(longestEmailSize, addrList.at(i)->address().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; i<attCount; i++)
+ {
+ if(attList.at(i)->attachmentType() ==
+ 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