diff -r ebe688cedc25 -r 7fdbb852d323 mobilemessaging/audiomsg/src/audiomessagesendoperation.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mobilemessaging/audiomsg/src/audiomessagesendoperation.cpp Wed Sep 01 12:31:54 2010 +0100 @@ -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 +#include +#include +#include + +#include +#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* addressControls + = new ( ELeave ) CArrayPtrFlat( 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 ); + } +