diff -r 4e54af54a4a1 -r 6c59112cfd31 emailservices/nmclientapi/src/nmapioperationsendmessage.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/emailservices/nmclientapi/src/nmapioperationsendmessage.cpp Thu Sep 30 11:43:07 2010 +0300 @@ -0,0 +1,117 @@ +/* + * Copyright (c) 2010 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: + * Send message operation implementation. + */ + +#include "nmapiheaders.h" + +namespace EmailClientApi +{ + +NmApiOperationSendMessage::NmApiOperationSendMessage(const NmApiMessage &message, CFSMailBox &mailBox, QObject *parent) + :NmApiOperation(parent, Succeeded, SendMessage), + mMessage(message), + mMailBox(mailBox), + mRequestId(NmApiNoError) + +{ + NM_FUNCTION; +} + +NmApiOperationSendMessage::~NmApiOperationSendMessage() +{ + NM_FUNCTION; +} + +void NmApiOperationSendMessage::start() +{ + NM_FUNCTION; + + NmId id(mMessage.envelope().id()); + TFSMailMsgId fsId(id); + + RPointerArray mailPlugins; + NmApiEngine *engine = NmApiEngine::instance(); + if (engine) { + engine->listMailPlugins(mailPlugins); + } + + CFSMailPlugin *plugin = NULL; + CFSMailMessage *fsMessage = NULL; + TFSMailMsgId fsMailBoxId = mMailBox.GetId(); + TFSMailMsgId fsFolderId = TFSMailMsgId(); + TFSMailMsgId fsMessageId = TFSMailMsgId(fsId); + + for (int i = 0; i < mailPlugins.Count() && !fsMessage; i++){ + plugin = mailPlugins[i]; + if (plugin && (plugin->Id() == fsMailBoxId.PluginId())) { + TRAPD(err, fsMessage = plugin->GetMessageByUidL(fsMailBoxId, + fsFolderId, + fsMessageId, + EFSMsgDataStructure)); + Q_UNUSED(err); + if (fsMessage) { + break; + } + } + } + + if (fsMessage) { + TRAPD(mail_err, mMailBox.SendMessageL(*fsMessage, *this)); + if (mail_err == KErrNone){ + mStatus = Pending; + } + else { + mStatus = Failed; + emit operationComplete(NmApiGeneralError); + } + } else { + mStatus = Failed; + emit operationComplete(NmApiGeneralError); + } + if (fsMessage) { + delete fsMessage; + } + + NmApiEngine::releaseInstance(engine); +} + +void NmApiOperationSendMessage::cancel() +{ + NM_FUNCTION; +} + +void NmApiOperationSendMessage::RequestResponseL( TFSProgress aEvent, TInt aRequestId ) +{ + NM_FUNCTION; + + TFSProgress::TFSProgressStatus status = aEvent.iProgressStatus; + + if (aRequestId == mRequestId) { + if (status == TFSProgress::EFSStatus_RequestComplete && aEvent.iParam) { + mStatus = Succeeded; + emit operationComplete(NmApiNoError); + } + else if (status == TFSProgress::EFSStatus_RequestCancelled) { + mStatus = Canceled; + emit operationComplete(NmApiCancelError); + } + else { + mStatus = Failed; + emit operationComplete(NmApiGeneralError); + } + } +} +}