email/imum/Mtms/Src/ImumFetchAndEditOperation.cpp
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/imum/Mtms/Src/ImumFetchAndEditOperation.cpp	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,208 @@
+/*
+* Copyright (c) 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: 
+*       Common email MTM wrapper operation
+*
+*/
+
+
+#include <eikenv.h>
+#include <eikrutil.h>
+#include <coehelp.h>
+#include <MsvPrgReporter.h>
+#include <MTMStore.h>
+#include <mtmuibas.h>
+#include <msvuids.h>    // KUidMsvLocalServiceMtm
+#include <miutmsg.h>    // CImEmailOperation
+#include <miutset.h>
+
+#include "ImumFetchAndEditOperation.h"
+#include "ImumEditOperation.h"
+#include "EmailUtils.H"
+#include "ImumPanic.h"
+#include "ImumMtmLogging.h"
+
+const TInt KEmailFetchAndEditOpPriority = CActive::EPriorityStandard;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ----------------------------------------------------------------------------
+// CImumFetchAndEditOperation
+// ----------------------------------------------------------------------------
+CImumFetchAndEditOperation::CImumFetchAndEditOperation(
+    CImumInternalApi& aMailboxApi,
+    TRequestStatus& aObserverRequestStatus,
+    MMsvProgressReporter& aReporter,
+    const TEmailEditParams& aParams,
+    TBool aAckReceipts)
+    :
+    CImumDiskSpaceObserverOperation(
+        aMailboxApi,
+        KEmailFetchAndEditOpPriority,
+        aObserverRequestStatus,
+        aReporter),
+    iState(EStateIdle),
+    iEditParams(aParams),
+    iAckReceipts(aAckReceipts)
+    {
+    IMUM_CONTEXT( CImumFetchAndEditOperation::CImumFetchAndEditOperation, 0, KImumMtmLog );
+    IMUM_IN();
+    IMUM_OUT();
+    
+    }
+
+// ----------------------------------------------------------------------------
+// NewL
+// ----------------------------------------------------------------------------
+CImumFetchAndEditOperation* CImumFetchAndEditOperation::NewL(
+    CImumInternalApi& aMailboxApi,
+    TRequestStatus& aObserverRequestStatus,
+    MMsvProgressReporter& aReporter,
+    const TEmailEditParams& aParams,
+    TBool aAckReceipts )
+    {
+    IMUM_STATIC_CONTEXT( CImumFetchAndEditOperation::NewL, 0, mtm, KImumMtmLog );
+    IMUM_IN();
+    IMUM_OUT();
+    
+    return new ( ELeave ) CImumFetchAndEditOperation(
+        aMailboxApi, aObserverRequestStatus,
+        aReporter, aParams, aAckReceipts );
+    }
+
+// ----------------------------------------------------------------------------
+// ~CImumFetchAndEditOperation
+// ----------------------------------------------------------------------------
+CImumFetchAndEditOperation::~CImumFetchAndEditOperation()
+    {
+    IMUM_CONTEXT( CImumFetchAndEditOperation::~CImumFetchAndEditOperation, 0, KImumMtmLog );
+    IMUM_IN();
+    IMUM_OUT();
+    
+    }
+
+// ----------------------------------------------------------------------------
+// GetErrorProgressL
+// ----------------------------------------------------------------------------
+const TDesC8& CImumFetchAndEditOperation::GetErrorProgressL( TInt aError )
+    {
+    IMUM_CONTEXT( CImumFetchAndEditOperation::GetErrorProgressL, 0, KImumMtmLog );
+    IMUM_IN();
+    
+    // DoRunL() left, failed to switch to launch editor state.
+    iLocalProgress().iType = TMsvLocalOperationProgress::ELocalNone;
+    iLocalProgress().iTotalNumberOfEntries = 0;
+    iLocalProgress().iNumberCompleted = 0;
+    iLocalProgress().iNumberFailed = 0;
+    iLocalProgress().iNumberRemaining = 0;
+    iLocalProgress().iError = aError;
+    iLocalProgress().iId = iEditParams.iEditorParams.iId;
+    IMUM_OUT();
+    return iLocalProgress;
+    }
+
+// ----------------------------------------------------------------------------
+// SetFetchOpL
+// ----------------------------------------------------------------------------
+void CImumFetchAndEditOperation::SetFetchOpL( CMsvOperation* aFetchOp )
+    {
+    IMUM_CONTEXT( CImumFetchAndEditOperation::SetFetchOpL, 0, KImumMtmLog );
+    IMUM_IN();
+    
+    __ASSERT_ALWAYS( aFetchOp, User::Panic( KImumMtmUiPanic, EPanicOpBadFetchOp ) );
+    __ASSERT_ALWAYS( !iOperation, User::Panic( KImumMtmUiPanic, EPanicAlreadySetFetchOp ) );
+    iOperation = aFetchOp;
+    iService = iOperation->Service();
+    BaseConstructL( iOperation->Mtm() );
+    iState = EStateFetching;
+    iStatus = KRequestPending;
+    SetActive();
+    IMUM_OUT();
+    }
+
+// ----------------------------------------------------------------------------
+// RequestStatus
+// ----------------------------------------------------------------------------
+TRequestStatus& CImumFetchAndEditOperation::RequestStatus()
+    {
+    IMUM_CONTEXT( CImumFetchAndEditOperation::RequestStatus, 0, KImumMtmLog );
+    IMUM_IN();
+    IMUM_OUT();
+    
+    return iStatus;
+    }
+
+// ----------------------------------------------------------------------------
+// DoRunL
+// ----------------------------------------------------------------------------
+void CImumFetchAndEditOperation::DoRunL()
+    {
+    IMUM_CONTEXT( CImumFetchAndEditOperation::DoRunL, 0, KImumMtmLog );
+    IMUM_IN();
+    
+    iActualMtm = iMtm;
+    iMtm = KUidMsvLocalServiceMtm;  // Error progress is local MTM.
+    switch(iState)
+        {
+        case EStateFetching:
+            // The fetch has completed.
+            {
+            if(KErrNone == GetOperationCompletionCodeL())
+                {
+                DoEditL();
+                }
+            else
+                {
+                CompleteObserver();
+                }
+            }
+            break;
+        case EStateEditing:
+            // Edit has completed.
+            CompleteObserver( iOperation->iStatus.Int() );
+            iState = EStateComplete;
+            break;
+
+        case EStateIdle:
+        case EStateComplete:
+        default:
+            break;
+        }
+    iMtm = iOperation->Mtm();   // Completed without error, reset MTM.
+    IMUM_OUT();
+    }
+
+// ----------------------------------------------------------------------------
+// DoEditL
+// ----------------------------------------------------------------------------
+void CImumFetchAndEditOperation::DoEditL()
+    {
+    IMUM_CONTEXT( CImumFetchAndEditOperation::DoEditL, 0, KImumMtmLog );
+    IMUM_IN();
+    
+    iReporter.MakeProgressVisibleL( EFalse );     // Get rid of the dialog.
+    iMtmUi->BaseMtm().SwitchCurrentEntryL( iEditParams.iEditorParams.iId );
+    delete iOperation;
+    iOperation = NULL;
+    iStatus = KRequestPending;
+
+    iOperation = CImumEditOperation::NewL(
+        iMailboxApi, iStatus, iActualMtm, iEditParams, iAckReceipts );
+
+    iState = EStateEditing;
+    SetActive();
+    IMUM_OUT();
+    }
+
+// End of File