--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/email/imum/Utils/Src/ImumMBoxServiceDeletion.cpp Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,422 @@
+/*
+* Copyright (c) 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: MsvOperation encapsulating deletion of email service
+*
+*/
+
+
+#include <StringLoader.h> // StringLoader
+#include <mtuireg.h>
+#include <muiumsvuiserviceutilitiesinternal.h>
+#include <imum.rsg>
+#include <MtmExtendedCapabilities.hrh>
+
+#include "ImumMboxServiceDeletion.h"
+#include "MsvPrgReporter.h"
+#include "EmailUtils.H"
+#include "SenduiMtmUids.h"
+#include "ImumPanic.h"
+#include "IMSSettingsNoteUi.h"
+#include "ImumInternalApiImpl.h"
+
+#include "ImumMtmLogging.h"
+
+const TInt KSvcDelOpPriority = CActive::EPriorityStandard;
+
+// ----------------------------------------------------------------------------
+// CImumMBoxServiceDeletion::NewL()
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CImumMBoxServiceDeletion* CImumMBoxServiceDeletion::NewL(
+ CMsvSession& aMsvSession,
+ TRequestStatus& aObserverRequestStatus,
+ MMsvProgressReporter& aReporter,
+ TMsvId aServiceId )
+ {
+ CImumMBoxServiceDeletion* op =
+ new ( ELeave ) CImumMBoxServiceDeletion( aMsvSession,
+ aObserverRequestStatus,
+ aReporter,
+ aServiceId );
+
+ CleanupStack::PushL( op );
+ op->ConstructL();
+ CleanupStack::Pop( op );
+ return op;
+ }
+
+// ----------------------------------------------------------------------------
+// CImumMBoxServiceDeletion::~CImumMBoxServiceDeletion()
+// ----------------------------------------------------------------------------
+//
+CImumMBoxServiceDeletion::~CImumMBoxServiceDeletion()
+ {
+ IMUM_CONTEXT( CImumMBoxServiceDeletion::CImumMBoxServiceDeletion, 0, KImumMtmLog );
+ IMUM_IN();
+
+ if ( IsActive() )
+ {
+ Cancel();
+ }
+
+ delete iEmailApi;
+ delete iSubOperation;
+ delete iProgressString;
+
+ IMUM_OUT();
+ }
+
+// ----------------------------------------------------------------------------
+// CImumMBoxServiceDeletion::ProgressL()
+// ----------------------------------------------------------------------------
+//
+const TDesC8& CImumMBoxServiceDeletion::ProgressL()
+ {
+ if ( iState == EDeleteService )
+ {
+ iProgressBuf.Copy( iSubOperation->ProgressL() );
+ }
+ return iProgressBuf;
+ }
+
+// ----------------------------------------------------------------------------
+// CImumMBoxServiceDeletion::RunL()
+// ----------------------------------------------------------------------------
+//
+void CImumMBoxServiceDeletion::RunL()
+ {
+ IMUM_CONTEXT( CImumMBoxServiceDeletion::RunL, 0, KImumMtmLog );
+ IMUM_IN();
+
+ DoRunL();
+
+ IMUM_OUT();
+ }
+
+// ----------------------------------------------------------------------------
+// CImumMBoxServiceDeletion::DoCancel()
+// ----------------------------------------------------------------------------
+//
+void CImumMBoxServiceDeletion::DoCancel()
+ {
+ IMUM_CONTEXT( CImumMBoxServiceDeletion::DoCancel, 0, KImumMtmLog );
+ IMUM_IN();
+
+ if ( iSubOperation )
+ {
+ iSubOperation->Cancel();
+ }
+ CompleteObserver();
+ IMUM_OUT();
+ }
+
+// ----------------------------------------------------------------------------
+// CImumMBoxServiceDeletion::RunError()
+// ----------------------------------------------------------------------------
+//
+TInt CImumMBoxServiceDeletion::RunError(TInt __DEBUG_ONLY( aError ) )
+ {
+ IMUM_CONTEXT( CImumMBoxServiceDeletion::RunError, 0, KImumMtmLog );
+ IMUM_IN();
+
+ IMUM1( 0, "RunL error %d", aError);
+
+ CompleteObserver();
+
+ IMUM_OUT();
+ return KErrNone; // RunError must return KErrNone to active sheduler.
+ }
+
+// ----------------------------------------------------------------------------
+// CImumMBoxServiceDeletion::CImumMBoxServiceDeletion()
+// ----------------------------------------------------------------------------
+//
+CImumMBoxServiceDeletion::CImumMBoxServiceDeletion(
+ CMsvSession& aMsvSession,
+ TRequestStatus& aObserverRequestStatus,
+ MMsvProgressReporter& aReporter,
+ TMsvId aServiceId )
+ :
+ CMsvOperation( aMsvSession, KSvcDelOpPriority, aObserverRequestStatus ),
+ iReporter( aReporter ),
+ iServiceId( aServiceId )
+ {
+ IMUM_CONTEXT( CImumMBoxServiceDeletion::CImumMBoxServiceDeletion, 0, KImumMtmLog );
+ IMUM_IN();
+ IMUM_OUT();
+ }
+
+// ----------------------------------------------------------------------------
+// CImumMBoxServiceDeletion::ConstructL()
+// ----------------------------------------------------------------------------
+//
+void CImumMBoxServiceDeletion::ConstructL()
+ {
+ IMUM_CONTEXT( CImumMBoxServiceDeletion::ConstructL, 0, KImumMtmLog );
+ IMUM_IN();
+
+ CActiveScheduler::Add( this );
+
+ iEmailApi = CImumInternalApiImpl::NewL( &iMsvSession );
+
+ TMsvEntry servEntry;
+ TMsvId serviceId;
+ User::LeaveIfError(
+ iMsvSession.GetEntry( iServiceId, serviceId, servEntry ) );
+
+ iSMTPServiceId = servEntry.iRelatedId;
+ iMtm = servEntry.iMtm;
+
+ TMsvEntry smtpEntry;
+ TMsvId smtpServiceId;
+
+ User::LeaveIfError( iMsvSession.GetEntry(
+ iSMTPServiceId, smtpServiceId, smtpEntry ) );
+
+ // serviceEntry must: be a service entry and have the root as parent.
+ __ASSERT_DEBUG(servEntry.iType.iUid == KUidMsvServiceEntryValue,
+ User::Panic(KImumMtmUiPanic,ESmtpMtmUiSvcDelOpNotAService) );
+ __ASSERT_DEBUG(servEntry.Parent() == KMsvRootIndexEntryIdValue,
+ User::Panic(KImumMtmUiPanic,ESmtpMtmUiSvcDelOpParentIsNotRoot) );
+
+ SetProgressStringL( smtpEntry.Id() );
+ iReporter.SetProgressDecoder( *this );
+
+ // Remove mailbox from ao agent list.
+ // if fails, just ignore, doesn't effect us
+ TRAP_IGNORE( MsvEmailMtmUiUtils::SendAOCommandL( EServerAPIEmailAgentRemove,
+ iServiceId ) );
+
+ BeginDeleteOperationL();
+ iState = EDoPrompts;
+ ProgressL();//Update initial progress.
+
+ IMUM_OUT();
+ }
+
+// ----------------------------------------------------------------------------
+// CImumMBoxServiceDeletion::BeginDeleteOperationL()
+// ----------------------------------------------------------------------------
+//
+void CImumMBoxServiceDeletion::BeginDeleteOperationL()
+ {
+ IMUM_CONTEXT( CImumMBoxServiceDeletion::BeginDeleteOperationL, 0, KImumMtmLog );
+ IMUM_IN();
+
+ iSubOperation = CMsvCompletedOperation::NewL(
+ iMsvSession, KUidMsvLocalServiceMtm, KNullDesC8,
+ KMsvLocalServiceIndexEntryId, iStatus );
+
+ SetActive();
+ IMUM_OUT();
+ }
+
+// ----------------------------------------------------------------------------
+// CImumMBoxServiceDeletion::RemovePreCreatedMessagesL()
+// ----------------------------------------------------------------------------
+//
+void CImumMBoxServiceDeletion::RemovePreCreatedMessagesL()
+ {
+ IMUM_CONTEXT( CImumMBoxServiceDeletion::RemovePreCreatedMessagesL, 0, KImumMtmLog );
+ IMUM_IN();
+
+ iStatus = KRequestPending;
+ iSubOperation = GetPreCreatedMailDeletionOpL( iStatus );
+ SetActive();
+
+ if( !iSubOperation )
+ {
+ // If this is the case, complete this stage.
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete(status, KErrNone);
+ }
+ IMUM_OUT();
+ }
+
+// ----------------------------------------------------------------------------
+// CImumMBoxServiceDeletion::DoRunL()
+// ----------------------------------------------------------------------------
+//
+void CImumMBoxServiceDeletion::DoRunL()
+ {
+ IMUM_CONTEXT( CImumMBoxServiceDeletion::DoRunL, 0, KImumMtmLog );
+ IMUM_IN();
+
+ if( iSubOperation )
+ {
+ if ( iSubOperation->IsActive() )
+ {
+ iSubOperation->Cancel();
+ }
+
+ delete iSubOperation;
+ iSubOperation = NULL;
+ }
+
+ switch(iState)
+ {
+ case EDoPrompts:
+ DoRemoveMailboxL();
+ iState = EDeleteService;
+ break;
+ case EDeleteService:
+ RemovePreCreatedMessagesL();
+ iState = EDeletePreCreatedMsgs;
+ break;
+ case EDeletePreCreatedMsgs:
+ CompleteObserver();
+ break;
+ case EStateComplete:
+ default:
+ break;
+ }
+ IMUM_OUT();
+ }
+
+// ----------------------------------------------------------------------------
+// CImumMBoxServiceDeletion::CompleteObserver()
+// ----------------------------------------------------------------------------
+//
+void CImumMBoxServiceDeletion::CompleteObserver()
+ {
+ TRequestStatus* status = &iObserverRequestStatus;
+ User::RequestComplete(status, iStatus.Int());
+ }
+
+
+// ----------------------------------------------------------------------------
+// CImumMBoxServiceDeletion::DecodeProgress()
+// ----------------------------------------------------------------------------
+//
+TInt CImumMBoxServiceDeletion::DecodeProgress(
+ const TDesC8& /* aProgress */,
+ TBuf<CBaseMtmUi::EProgressStringMaxLen>& aReturnString,
+ TInt& aTotalEntryCount,
+ TInt& aEntriesDone,
+ TInt& aCurrentEntrySize,
+ TInt& aCurrentBytesTrans,
+ TBool /* aInternal */)
+ {
+ aTotalEntryCount = 0;
+ aEntriesDone = 0;
+ aCurrentEntrySize = 0;
+ aCurrentBytesTrans = 0;
+ aReturnString.Copy( *iProgressString );
+ return KErrNone;
+ }
+
+// ----------------------------------------------------------------------------
+// CImumMBoxServiceDeletion::BeginRemoveAccountDeleteOpL()
+// ----------------------------------------------------------------------------
+//
+void CImumMBoxServiceDeletion::BeginRemoveAccountDeleteOpL()
+ {
+ IMUM_CONTEXT( CImumMBoxServiceDeletion::BeginRemoveAccountDeleteOpL, 0, KImumMtmLog );
+ IMUM_IN();
+
+ // Complete right after the deletion
+ iSubOperation = CMsvCompletedOperation::NewL( iMsvSession,
+ KUidMsvLocalServiceMtm,
+ KNullDesC8,
+ KMsvLocalServiceIndexEntryId,
+ iStatus );
+ iStatus = KRequestPending;
+ SetActive();
+ IMUM_OUT();
+ }
+
+// ----------------------------------------------------------------------------
+// CImumMBoxServiceDeletion::GetPreCreatedMailDeletionOpL()
+// ----------------------------------------------------------------------------
+//
+CMsvOperation* CImumMBoxServiceDeletion::GetPreCreatedMailDeletionOpL( TRequestStatus& aStatus )
+ {
+ IMUM_CONTEXT( CImumMBoxServiceDeletion::GetPreCreatedMailDeletionOpL, 0, KImumMtmLog );
+ IMUM_IN();
+
+ //Get SMTP UI mtm
+ CClientMtmRegistry* clientRegistry = CClientMtmRegistry::NewL( iMsvSession );
+ CleanupStack::PushL( clientRegistry );
+
+ CBaseMtm* smtpmtm = clientRegistry->NewMtmL( KUidMsgTypeSMTP );
+ CleanupStack::PushL( smtpmtm );
+
+ CMtmUiRegistry* mtmuireg = CMtmUiRegistry::NewL( iMsvSession );
+ CleanupStack::PushL( mtmuireg );
+
+ CBaseMtmUi* smtpUi = mtmuireg->NewMtmUiL( *smtpmtm );
+ CleanupStack::PushL( smtpUi );
+
+ CMsvEntrySelection* sel = new(ELeave) CMsvEntrySelection;
+ CleanupStack::PushL(sel);
+ sel->AppendL( iSMTPServiceId );
+
+ TBuf8<1> dummyParam;
+ CMsvOperation* op = smtpUi->InvokeAsyncFunctionL( KMtmUiFunctionPreCreateMessage, *sel, aStatus, dummyParam );
+
+ CleanupStack::PopAndDestroy( 5, clientRegistry ); // CSI: 47 # sel, smtpUi, mtmuireg, smtpmtm, clientRegistry
+
+ IMUM_OUT();
+ return op;
+ }
+
+// ----------------------------------------------------------------------------
+// CImumMBoxServiceDeletion::DoRemoveMailboxL()
+// ----------------------------------------------------------------------------
+//
+void CImumMBoxServiceDeletion::DoRemoveMailboxL()
+ {
+ IMUM_CONTEXT( CImumMBoxServiceDeletion::DoRemoveMailboxL, 0, KImumMtmLog );
+ IMUM_IN();
+
+ iStatus = KRequestPending;
+
+ iEmailApi->SettingsManagerL().RemoveAccount( iServiceId, ETrue );
+
+ iSubOperation = CMsvCompletedOperation::NewL( iMsvSession,
+ KUidMsvLocalServiceMtm,
+ KNullDesC8,
+ KMsvLocalServiceIndexEntryId,
+ iStatus );
+
+
+ SetActive();
+ IMUM_OUT();
+ }
+
+// ----------------------------------------------------------------------------
+// CImumMBoxServiceDeletion::SetProgressStringL()
+// ----------------------------------------------------------------------------
+//
+void CImumMBoxServiceDeletion::SetProgressStringL( TMsvId aServiceId )
+ {
+ TMsvId serv;
+ TMsvEntry tEntry;
+
+ TInt err = iMsvSession.GetEntry( aServiceId, serv, tEntry );
+
+ if ( iProgressString )
+ {
+ delete iProgressString;
+ iProgressString = NULL;
+ }
+
+ iProgressString = StringLoader::LoadL(
+ R_EMAIL_SVCDELOP_DIALOG_TITLE, tEntry.iDetails, CEikonEnv::Static() );
+
+ iReporter.SetTitleL(*iProgressString);
+ iReporter.SetProgressDecoder( *this );
+ }
+
+// End of File