--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mobilemessaging/unieditor/application/src/UniEditorSendOperation.cpp Wed Nov 03 09:52:46 2010 +0530
@@ -0,0 +1,284 @@
+/*
+* Copyright (c) 2006,2007 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: CUniEditorSendOperation, asynchronous object for message sending
+*
+*/
+
+
+
+// ========== INCLUDE FILES ================================
+#include <MsgEditorView.h>
+#include <MsgBodyControl.h>
+#include <MsgExpandableControl.h>
+
+#include <mmsconst.h>
+
+// Features
+#include <featmgr.h>
+#include <bldvariant.hrh>
+#include <messagingvariant.hrh>
+
+#include <unidatautils.h>
+#include <MsgMimeTypes.h>
+#include <unismilmodel.h>
+#include <unismillist.h>
+#include <uniobjectlist.h>
+#include <MsgMediaInfo.h>
+#include <MsgTextInfo.h>
+#include <MsgImageInfo.h>
+#include <uniaddresshandler.h>
+
+#include "UniClientMtm.h"
+#include "UniPluginApi.h"
+#include "UniEditorHeader.h"
+#include "UniEditorSendOperation.h"
+
+// ========== EXTERNAL DATA STRUCTURES =====================
+
+// ========== EXTERNAL FUNCTION PROTOTYPES =================
+
+// ========== CONSTANTS ====================================
+
+// ========== MACROS =======================================
+
+// ========== LOCAL CONSTANTS AND MACROS ===================
+
+// ========== MODULE DATA STRUCTURES =======================
+
+// ========== LOCAL FUNCTION PROTOTYPES ====================
+
+// ========== LOCAL FUNCTIONS ==============================
+
+// ========== MEMBER FUNCTIONS =============================
+
+// ---------------------------------------------------------
+// CUniEditorSendOperation::NewL
+//
+// Factory method.
+// ---------------------------------------------------------
+//
+CUniEditorSendOperation* CUniEditorSendOperation::NewL(
+ MUniEditorOperationObserver& aObserver,
+ CUniEditorDocument& aDocument,
+ CUniEditorHeader& aHeader,
+ CUniEditorPlugin& aPlugin,
+ CMsgEditorView& aView,
+ RFs& aFs )
+ {
+ CUniEditorSendOperation* self =
+ new ( ELeave ) CUniEditorSendOperation( aObserver, aDocument, aHeader, aPlugin, aView, aFs );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CUniEditorSendOperation::CUniEditorSendOperation
+//
+// Constructor.
+// ---------------------------------------------------------
+//
+CUniEditorSendOperation::CUniEditorSendOperation(
+ MUniEditorOperationObserver& aObserver,
+ CUniEditorDocument& aDocument,
+ CUniEditorHeader& aHeader,
+ CUniEditorPlugin& aPlugin,
+ CMsgEditorView& aView,
+ RFs& aFs ) :
+ CUniEditorOperation( aObserver, aDocument, aFs, EUniEditorOperationSend ),
+ iHeader( aHeader ),
+ iPlugin( aPlugin ),
+ iView( aView ),
+ iConvertedEntry( 0 )
+ {
+ }
+
+// ---------------------------------------------------------
+// CUniEditorSendOperation::ConstructL
+//
+// 2nd phase constructor.
+// ---------------------------------------------------------
+//
+void CUniEditorSendOperation::ConstructL()
+ {
+ BaseConstructL();
+ iSaveOperation = CUniEditorSaveOperation::NewL( *this, iDocument, iHeader, iView, iFs );
+ }
+
+
+// ---------------------------------------------------------
+// CUniEditorSendOperation::~CUniEditorSendOperation
+//
+// Destructor.
+// ---------------------------------------------------------
+//
+CUniEditorSendOperation::~CUniEditorSendOperation()
+ {
+ Cancel();
+ delete iSaveOperation;
+ }
+
+// ---------------------------------------------------------
+// CUniEditorSendOperation::Send
+// ---------------------------------------------------------
+//
+void CUniEditorSendOperation::Send()
+ {
+ ResetErrors();
+ iOperationState = EUniEditorSendRemoveDuplicateAddresses;
+ CompleteSelf( KErrNone );
+ }
+
+// ---------------------------------------------------------
+// CUniEditorSendOperation::DoSendStepL
+// ---------------------------------------------------------
+//
+void CUniEditorSendOperation::DoSendStepL()
+ {
+ switch ( iOperationState )
+ {
+ case EUniEditorSendRemoveDuplicateAddresses:
+ {
+ DoRemoveDuplicateAddressesL();
+ break;
+ }
+ case EUniEditorSendSave:
+ {
+ DoSave();
+ break;
+ }
+ case EUniEditorSendConvert:
+ {
+ DoConvertL();
+ break;
+ }
+ case EUniEditorSendPluginSend:
+ {
+ DoSendL();
+ break;
+ }
+ case EUniEditorSendEnd:
+ {
+ iObserver.EditorOperationEvent(
+ EUniEditorOperationSend,
+ EUniEditorOperationComplete );
+ break;
+ }
+ default:
+ {
+ iObserver.EditorOperationEvent(
+ EUniEditorOperationSend,
+ EUniEditorOperationError );
+ break;
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CUniEditorSendOperation::DoRemoveDuplicateAddressesL
+// ---------------------------------------------------------
+//
+void CUniEditorSendOperation::DoRemoveDuplicateAddressesL()
+ {
+ if ( iHeader.RemoveDuplicateAddressesL() )
+ {
+ iDocument.SetHeaderModified( ETrue );
+ }
+
+ iOperationState = EUniEditorSendSave;
+ CompleteSelf( KErrNone );
+ }
+
+// ---------------------------------------------------------
+// CUniEditorSendOperation::DoSave
+// ---------------------------------------------------------
+//
+void CUniEditorSendOperation::DoSave()
+ {
+ iOperationState = EUniEditorSendConvert;
+ iSaveOperation->Save( ESendingSave );
+ SetPending();
+ }
+
+// ---------------------------------------------------------
+// CUniEditorSendOperation::DoConvertL
+// ---------------------------------------------------------
+//
+void CUniEditorSendOperation::DoConvertL()
+ {
+ iOperationState = EUniEditorSendPluginSend;
+ iConvertedEntry = iPlugin.ConvertToL( iDocument.Mtm().Entry().EntryId() );
+ CompleteSelf( KErrNone );
+ }
+
+// ---------------------------------------------------------
+// CUniEditorSendOperation::DoSendL
+// ---------------------------------------------------------
+//
+void CUniEditorSendOperation::DoSendL()
+ {
+ iOperationState = EUniEditorSendEnd;
+ iPlugin.SendL( iConvertedEntry );
+ CompleteSelf( KErrNone );
+ }
+
+// ---------------------------------------------------------
+// CUniEditorSendOperation::DoCancelCleanup
+//
+// ---------------------------------------------------------
+//
+void CUniEditorSendOperation::DoCancelCleanup()
+ {
+ if ( iSaveOperation )
+ {
+ iSaveOperation->Cancel();
+ }
+ }
+
+// ---------------------------------------------------------
+// CUniEditorSendOperation::RunL
+// ---------------------------------------------------------
+//
+void CUniEditorSendOperation::RunL()
+ {
+ PrintOperationAndState();
+ if ( !SetErrorAndReport( iStatus.Int() ) )
+ {
+ DoSendStepL();
+ }
+ }
+
+// ---------------------------------------------------------
+// CUniEditorSendOperation::HandleOperationEvent
+// ---------------------------------------------------------
+//
+void CUniEditorSendOperation::HandleOperationEvent(
+ TUniEditorOperationType /*aOperation*/,
+ TUniEditorOperationEvent /*aEvent*/ )
+ {
+ // Get errors from iSaveOperation
+ CArrayFixFlat<TInt>* errors = iSaveOperation->GetErrors();
+ for ( TInt i = 0; i < errors->Count(); i++ )
+ {
+ // if save operation has produced errors, the message
+ // must not be sent because probably there is nothing to send!
+ SetError( errors->At( i ) );
+ iOperationState = EUniEditorSendEnd;
+ }
+
+ CompleteOperation( KErrNone );
+ }
+
+// EOF