diff -r 000000000000 -r 72b543305e3a mobilemessaging/unieditor/application/src/UniEditorSendOperation.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mobilemessaging/unieditor/application/src/UniEditorSendOperation.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -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 +#include +#include + +#include + +// Features +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#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* 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