email/imum/Mtms/Src/ImumEditOperation.cpp
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/imum/Mtms/Src/ImumEditOperation.cpp	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,205 @@
+/*
+* 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 operation for launching editors
+*
+*/
+
+
+
+#include <eikenv.h>
+#include <eikrutil.h>
+#include <coehelp.h>
+
+#include <MsvPrgReporter.h>
+#include <MTMStore.h>
+#include <mtmuibas.h>
+#include <mtmuidef.hrh>
+#include <msvuids.h>    // KUidMsvLocalServiceMtm
+#include <miutmsg.h>    // CImEmailOperation
+#include <miutset.h>
+
+#include "ImumEditOperation.h"
+#include "EmailUtils.H"
+#include "PROGTYPE.H"
+#include "ImumMtmLogging.h"
+
+const TInt KEmailEditOpPriority = CActive::EPriorityHigh;
+
+// ----------------------------------------------------------------------------
+// NewL
+// ----------------------------------------------------------------------------
+CImumEditOperation* CImumEditOperation::NewL(
+    CImumInternalApi& aMailboxApi,
+    TRequestStatus& aObserverRequestStatus,
+    TUid aMtmType,
+    const TEmailEditParams& aParams,
+    TBool aSendReceipts)
+    {
+    IMUM_STATIC_CONTEXT( CImumEditOperation::NewL, 0, mtm, KImumMtmLog );
+    IMUM_IN();
+     // static
+    CImumEditOperation* op = new(ELeave) CImumEditOperation(
+        aMailboxApi, aObserverRequestStatus, aMtmType, aParams);
+    CleanupStack::PushL(op);
+    op->ConstructL(aSendReceipts);
+    CleanupStack::Pop();
+    IMUM_OUT();
+    return op;
+    }
+
+// ----------------------------------------------------------------------------
+// ~CImumEditOperation
+// ----------------------------------------------------------------------------
+CImumEditOperation::~CImumEditOperation()
+    {
+    IMUM_CONTEXT( CImumEditOperation::~CImumEditOperation, 0, KImumMtmLog );
+    IMUM_IN();
+    
+    Cancel();
+    delete iOperation;
+    delete iMsgEntry;
+    IMUM_OUT();
+    }
+
+// ----------------------------------------------------------------------------
+// ProgressL
+// ----------------------------------------------------------------------------
+const TDesC8& CImumEditOperation::ProgressL()
+    {
+    IMUM_CONTEXT( CImumEditOperation::ProgressL, 0, KImumMtmLog );
+    IMUM_IN();
+    IMUM_OUT();
+    
+    return iProgress;
+    }
+
+// ----------------------------------------------------------------------------
+// DoCancel
+// ----------------------------------------------------------------------------
+void CImumEditOperation::DoCancel()
+    {
+    IMUM_CONTEXT( CImumEditOperation::DoCancel, 0, KImumMtmLog );
+    IMUM_IN();
+    
+    if(iOperation)
+        {
+        iOperation->Cancel();
+        }
+    iProgress().iError = KErrCancel;
+    TRequestStatus* status = &iObserverRequestStatus;
+    User::RequestComplete(status, KErrNone);
+    IMUM_OUT();
+    }
+
+// ----------------------------------------------------------------------------
+// RunL
+// ----------------------------------------------------------------------------
+void CImumEditOperation::RunL()
+    {
+    IMUM_CONTEXT( CImumEditOperation::RunL, 0, KImumMtmLog );
+    IMUM_IN();
+    
+    TRequestStatus* status = &iObserverRequestStatus;
+    switch(iState)
+        {
+        case EStateLaunching:
+            // Completed.
+            User::RequestComplete(status, iOperation->iStatus.Int() /*KErrNone*/);
+            break;
+        case EStateIdle:
+        default:
+            break;
+        }
+    IMUM_OUT();
+    }
+
+// ----------------------------------------------------------------------------
+// CImumEditOperation
+// ----------------------------------------------------------------------------
+CImumEditOperation::CImumEditOperation(
+    CImumInternalApi& aMailboxApi,
+    TRequestStatus& aObserverRequestStatus,
+    TUid aMtmType,
+    const TEmailEditParams& aParams)
+    :
+    CMsvOperation(aMailboxApi.MsvSession(), KEmailEditOpPriority, aObserverRequestStatus),
+    iState(EStateIdle),
+    iEditParams(aParams)
+    {
+    IMUM_CONTEXT( CImumEditOperation::CImumEditOperation, 0, KImumMtmLog );
+    IMUM_IN();
+    
+    CActiveScheduler::Add(this);
+    iMtm = aMtmType;
+
+    TEmailEditProgress& prog = iProgress();
+    prog.iError = KErrNone;
+    prog.iId = iEditParams.iEditorParams.iId;
+    IMUM_OUT();
+    }
+
+// ----------------------------------------------------------------------------
+// ConstructL
+// ----------------------------------------------------------------------------
+void CImumEditOperation::ConstructL(TBool /*aSendReceipts*/)
+    {
+    IMUM_CONTEXT( CImumEditOperation::ConstructL, 0, KImumMtmLog );
+    IMUM_IN();
+    
+    iMsgEntry = iMsvSession.GetEntryL(iEditParams.iEditorParams.iId);
+    TMsvEmailEntry entry(iMsgEntry->Entry());
+    iService = entry.iServiceId;
+
+    DoLaunchEditorL();
+    IMUM_OUT();
+
+    }
+
+// ----------------------------------------------------------------------------
+// DoLaunchEditorL
+// ----------------------------------------------------------------------------
+void CImumEditOperation::DoLaunchEditorL()
+    {
+    IMUM_CONTEXT( CImumEditOperation::DoLaunchEditorL, 0, KImumMtmLog );
+    IMUM_IN();
+    
+    if(iOperation)
+        {
+        delete iOperation;
+        iOperation = NULL;
+        }
+
+    TEditorParameters launchParams(iEditParams.iEditorParams);
+    launchParams.iFlags &= ~(EMtmUiFlagEditorPreferEmbedded | EMtmUiFlagEditorNoWaitForExit);
+    launchParams.iFlags |= (iEditParams.iPreferences & EMtmUiFlagEditorPreferEmbedded) ? (EMsgLaunchEditorEmbedded) : (0);
+    launchParams.iFlags |= (iEditParams.iPreferences & EMtmUiFlagEditorNoWaitForExit) ? (0) : (EMsgLaunchEditorThenWait);
+
+    iOperation = MsgEditorLauncher::LaunchEditorApplicationL(
+        iMsvSession,
+        iMtm,
+        iStatus,
+        launchParams,
+        iEditParams.
+        iEditorFileName,
+        KNullDesC8);
+
+    iObserverRequestStatus = KRequestPending;
+    iState = EStateLaunching;
+    SetActive();
+    IMUM_OUT();
+    }
+
+// end of file
+