--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mobilemessaging/audiomsg/src/audiomessagesendoperation.cpp Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,219 @@
+/*
+* Copyright (c) 2005-2006 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: Provides message sending methods.
+*
+*/
+
+
+
+#include <mmsclient.h>
+#include <MsgEditorAppUi.h>
+#include <MsgAddressControl.h>
+#include <uniaddresshandler.h>
+
+#include <audiomessage.rsg>
+#include "audiomessagesendoperation.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------
+// CAudioMessageSendOperation::NewL
+// ---------------------------------------------------------
+//
+CAudioMessageSendOperation* CAudioMessageSendOperation::NewL(
+ CMsgAddressControl& aAddressCtrl,
+ CUniAddressHandler& aAddressHandler,
+ MAmsOperationObserver& aObserver,
+ CAudioMessageDocument& aDocument,
+ CMsgEditorView& aView )
+ {
+ CAudioMessageSendOperation* self = new ( ELeave ) CAudioMessageSendOperation(
+ aAddressCtrl,
+ aAddressHandler,
+ aObserver,
+ aDocument,
+ aView );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CAudioMessageSendOperation::Constructor
+// ---------------------------------------------------------
+//
+CAudioMessageSendOperation::CAudioMessageSendOperation(
+ CMsgAddressControl& aAddressCtrl,
+ CUniAddressHandler& aAddressHandler,
+ MAmsOperationObserver& aObserver,
+ CAudioMessageDocument& aDocument,
+ CMsgEditorView& aView ) :
+ CAudioMessageOperation( aObserver, aDocument ),
+ iAddressCtrl( aAddressCtrl ),
+ iAddressHandler( aAddressHandler ),
+ iView( aView )
+ {
+ }
+
+
+// ---------------------------------------------------------
+// CAudioMessageSendOperation::Destructor
+// ---------------------------------------------------------
+//
+CAudioMessageSendOperation::~CAudioMessageSendOperation()
+ {
+ Cancel();
+ delete iSaveOperation;
+ delete iMtmSendOperation;
+ }
+
+// ---------------------------------------------------------
+// CAudioMessageSendOperation::Send
+// ---------------------------------------------------------
+//
+void CAudioMessageSendOperation::Send()
+ {
+ ResetError();
+ iSendState = EAmsSendRemoveDuplicateAddresses;
+ CompleteSelf( KErrNone );
+ }
+
+// ---------------------------------------------------------
+// CAudioMessageSendOperation::DoSendStepL
+// ---------------------------------------------------------
+//
+void CAudioMessageSendOperation::DoSendStepL()
+ {
+ switch ( iSendState )
+ {
+ case EAmsSendRemoveDuplicateAddresses:
+ DoRemoveDuplicateAddressesL();
+ break;
+ case EAmsSendSave:
+ DoSave();
+ break;
+ case EAmsSendMtmSend:
+ DoSendL();
+ break;
+ case EAmsSendEnd:
+ iObserver.EditorOperationEvent(
+ EAmsOperationSend,
+ EAmsOperationComplete );
+ break;
+ default:
+ iObserver.EditorOperationEvent(
+ EAmsOperationSend,
+ EAmsOperationError );
+ break;
+ }
+ }
+
+// ---------------------------------------------------------
+// CAudioMessageSendOperation::DoRemoveDuplicateAddressesL
+// ---------------------------------------------------------
+//
+void CAudioMessageSendOperation::DoRemoveDuplicateAddressesL()
+ {
+ CArrayPtrFlat<CMsgAddressControl>* addressControls
+ = new ( ELeave ) CArrayPtrFlat<CMsgAddressControl>( 1 );
+ CleanupStack::PushL( addressControls );
+ addressControls->AppendL( &iAddressCtrl );
+ if ( iAddressHandler.RemoveDuplicateAddressesL( *addressControls ) )
+ {
+ iDocument.SetHeaderModified( ETrue );
+ }
+ CleanupStack::PopAndDestroy( addressControls );
+ iSendState = EAmsSendSave;
+ CompleteSelf( KErrNone );
+ }
+
+// ---------------------------------------------------------
+// CAudioMessageSendOperation::DoSave
+// ---------------------------------------------------------
+//
+void CAudioMessageSendOperation::DoSave()
+ {
+ iSendState = EAmsSendMtmSend;
+ iSaveOperation->Save();
+ }
+
+// ---------------------------------------------------------
+// CAudioMessageSendOperation::DoSendL
+// ---------------------------------------------------------
+//
+void CAudioMessageSendOperation::DoSendL()
+ {
+ iSendState = EAmsSendEnd;
+ iStatus = KRequestPending;
+ iMtmSendOperation = iDocument.Mtm().SendL( iStatus );
+ SetActive();
+ }
+
+// ---------------------------------------------------------
+// CAudioMessageSendOperation::ConstructL
+// ---------------------------------------------------------
+//
+void CAudioMessageSendOperation::ConstructL()
+ {
+ iSaveOperation = CAudioMessageSaveOperation::NewL( iAddressCtrl, *this, iDocument,
+ iView );
+ }
+
+// ---------------------------------------------------------
+// CAudioMessageSendOperation::DoCancel
+// ---------------------------------------------------------
+//
+void CAudioMessageSendOperation::DoCancel()
+ {
+ if ( iSaveOperation )
+ {
+ iSaveOperation->Cancel();
+ }
+ if ( iMtmSendOperation )
+ {
+ iMtmSendOperation->Cancel();
+ }
+ }
+
+// ---------------------------------------------------------
+// CAudioMessageSendOperation::RunL
+// ---------------------------------------------------------
+//
+void CAudioMessageSendOperation::RunL()
+ {
+ if ( iStatus.Int() != KErrNone )
+ {
+ SetError( iStatus.Int() );
+ iObserver.EditorOperationEvent(
+ EAmsOperationSend,
+ EAmsOperationError );
+ }
+ else
+ {
+ DoSendStepL();
+ }
+ }
+
+// ---------------------------------------------------------
+// CAudioMessageSendOperation::EditorOperationEvent
+// ---------------------------------------------------------
+//
+void CAudioMessageSendOperation::EditorOperationEvent(
+ TAmsOperationType /*aOperation*/,
+ TAmsOperationEvent /*aEvent*/ )
+ {
+ CompleteSelf( KErrNone );
+ }
+