diff -r 000000000000 -r 72b543305e3a messagingappbase/mce/src/MceCancelSendingOperation.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingappbase/mce/src/MceCancelSendingOperation.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,190 @@ +/* +* Copyright (c) 2002 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: +* CMceCancelSendingOperation. +* Cancels first sending of the message and then tries to delete or move it to drafts. +* +*/ + + + + +// INCLUDE FILES +#include // CMtmStore +#include +#include "MceCancelSendingOperation.h" +#include "MceLogText.h" + +// MODULE DATA STRUCTURES + +// Two-phased constructor. +CMceCancelSendingOperation* CMceCancelSendingOperation::NewL( + CMsvSession& aMsvSession, + TRequestStatus& aObserverRequestStatus, + TMsvId aEntryId, + TCancelSendingType aCancelType, + CMtmStore& aMtmStore ) + { + MCELOGGER_ENTERFN("CMceCancelSendingOperation::NewL"); + CMceCancelSendingOperation* self = new ( ELeave ) CMceCancelSendingOperation( + aMsvSession, aObserverRequestStatus, aEntryId, aCancelType, aMtmStore ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + MCELOGGER_LEAVEFN("CMceCancelSendingOperation::NewL"); + return self; + } + +// C++ default constructor can NOT contain any code that +// might leave. +// +CMceCancelSendingOperation::CMceCancelSendingOperation( + CMsvSession& aMsvSession, + TRequestStatus& aObserverRequestStatus, + TMsvId aEntryId, + TCancelSendingType aCancelType, + CMtmStore& aMtmStore ) + : + CMsvOperation( + aMsvSession, + CActive::EPriorityStandard, + aObserverRequestStatus), + iMtmStore( aMtmStore ), + iCancelType( aCancelType ), + iEntryId( aEntryId ), + iBlank(_L8("")) + { + CActiveScheduler::Add( this ); + } + +// Symbian OS default constructor can leave. +void CMceCancelSendingOperation::ConstructL() + { + MCELOGGER_ENTERFN("CMceCancelSendingOperation::ConstructL"); + iEntry = CMsvEntry::NewL( iMsvSession, iEntryId, TMsvSelectionOrdering() ); + iEntrySelection = new( ELeave ) CMsvEntrySelection; + iEntrySelection->AppendL( iEntryId ); + CancelSendingL(); + iCancelState = ECancelling; + iStatus = KRequestPending; + SetActive(); + MCELOGGER_LEAVEFN("CMceCancelSendingOperation::ConstructL"); + } + + +//destructor +CMceCancelSendingOperation::~CMceCancelSendingOperation() + { + MCELOGGER_ENTERFN("CMceCancelSendingOperation::~"); + Cancel(); + delete iOperation; + delete iEntry; + delete iEntrySelection; + MCELOGGER_LEAVEFN("CMceCancelSendingOperation::~"); + } + + + +// ---------------------------------------------------- +// CMceCancelSendingOperation::CancelSendingL +// ---------------------------------------------------- +void CMceCancelSendingOperation::CancelSendingL() + { + MCELOGGER_ENTERFN("CMceCancelSendingOperation::CancelSendingL"); + CBaseMtmUi& ui = iMtmStore.GetMtmUiLC( iEntry->Entry().iMtm ); + iMtm = iEntry->Entry().iMtm; + MCELOGGER_WRITE_FORMAT("Start cancelling message id 0x%x", iEntryId ); + iOperation = ui.CancelL( iStatus, *iEntrySelection); + CleanupStack::PopAndDestroy( );//release mtmUi + MCELOGGER_LEAVEFN("CMceCancelSendingOperation::CancelSendingL"); + } + +// ---------------------------------------------------- +// CMceCancelSendingOperation::MoveOrDeleteEntryL +// ---------------------------------------------------- +void CMceCancelSendingOperation::MoveOrDeleteEntryL() + { + MCELOGGER_ENTERFN("CMceCancelSendingOperation::MoveOrDeleteEntryL"); + delete iOperation; + iOperation = NULL; + iEntry->SetEntryL( KMsvGlobalOutBoxIndexEntryId ); + if ( iCancelType == ECancelAndMoveToDrafts ) + { + MCELOGGER_WRITE_FORMAT("Start moving message id 0x%x to drafts", iEntryId ); + iOperation = iEntry->MoveL( + *iEntrySelection, KMsvDraftEntryId, iStatus ); + } + else + { + MCELOGGER_WRITE_FORMAT("Start deleting message id 0x%x", iEntryId ); + iOperation = iEntry->DeleteL( + *iEntrySelection, iStatus ); + } + iMtm = iOperation->Mtm(); + + MCELOGGER_LEAVEFN("CMceCancelSendingOperation::MoveOrDeleteEntryL"); + } + +// ---------------------------------------------------- +// CMceCancelSendingOperation::DoCancel +// ---------------------------------------------------- +void CMceCancelSendingOperation::DoCancel() + { + MCELOGGER_ENTERFN("CMceCancelSendingOperation::DoCancel"); + if ( iOperation ) + { + iOperation->Cancel(); + } + TRequestStatus* status = &iObserverRequestStatus; + User::RequestComplete(status, iStatus.Int()); + MCELOGGER_LEAVEFN("CMceCancelSendingOperation::DoCancel"); + } + +// ---------------------------------------------------- +// CMceCancelSendingOperation::RunL +// ---------------------------------------------------- +void CMceCancelSendingOperation::RunL() + { + MCELOGGER_ENTERFN("CMceCancelSendingOperation::RunL"); + TInt error = iStatus.Int(); + MCELOGGER_WRITE_FORMAT("error: %d", error ); + if ( error == KErrNone && iCancelType != ECancelOnly && iCancelState == ECancelling ) + { + MoveOrDeleteEntryL(); + iCancelState = EDeletingOrMoving; + iStatus = KRequestPending; + SetActive(); + } + else + { + // everything is done + MCELOGGER_WRITE("everything done, complete" ); + TRequestStatus* status = &iObserverRequestStatus; + User::RequestComplete(status, iStatus.Int()); + } + MCELOGGER_LEAVEFN("CMceCancelSendingOperation::RunL"); + } +// ---------------------------------------------------- +// CMceCancelSendingOperation::ProgressL +// ---------------------------------------------------- +const TDesC8& CMceCancelSendingOperation::ProgressL() + { + if ( iOperation ) + { + return iOperation->ProgressL(); + } + return iBlank; + } + +// End of File