email/imum/Mtms/Src/ImumFetchAndEditOperation.cpp
changeset 0 72b543305e3a
equal deleted inserted replaced
-1:000000000000 0:72b543305e3a
       
     1 /*
       
     2 * Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description: 
       
    15 *       Common email MTM wrapper operation
       
    16 *
       
    17 */
       
    18 
       
    19 
       
    20 #include <eikenv.h>
       
    21 #include <eikrutil.h>
       
    22 #include <coehelp.h>
       
    23 #include <MsvPrgReporter.h>
       
    24 #include <MTMStore.h>
       
    25 #include <mtmuibas.h>
       
    26 #include <msvuids.h>    // KUidMsvLocalServiceMtm
       
    27 #include <miutmsg.h>    // CImEmailOperation
       
    28 #include <miutset.h>
       
    29 
       
    30 #include "ImumFetchAndEditOperation.h"
       
    31 #include "ImumEditOperation.h"
       
    32 #include "EmailUtils.H"
       
    33 #include "ImumPanic.h"
       
    34 #include "ImumMtmLogging.h"
       
    35 
       
    36 const TInt KEmailFetchAndEditOpPriority = CActive::EPriorityStandard;
       
    37 
       
    38 // ================= MEMBER FUNCTIONS =======================
       
    39 
       
    40 // ----------------------------------------------------------------------------
       
    41 // CImumFetchAndEditOperation
       
    42 // ----------------------------------------------------------------------------
       
    43 CImumFetchAndEditOperation::CImumFetchAndEditOperation(
       
    44     CImumInternalApi& aMailboxApi,
       
    45     TRequestStatus& aObserverRequestStatus,
       
    46     MMsvProgressReporter& aReporter,
       
    47     const TEmailEditParams& aParams,
       
    48     TBool aAckReceipts)
       
    49     :
       
    50     CImumDiskSpaceObserverOperation(
       
    51         aMailboxApi,
       
    52         KEmailFetchAndEditOpPriority,
       
    53         aObserverRequestStatus,
       
    54         aReporter),
       
    55     iState(EStateIdle),
       
    56     iEditParams(aParams),
       
    57     iAckReceipts(aAckReceipts)
       
    58     {
       
    59     IMUM_CONTEXT( CImumFetchAndEditOperation::CImumFetchAndEditOperation, 0, KImumMtmLog );
       
    60     IMUM_IN();
       
    61     IMUM_OUT();
       
    62     
       
    63     }
       
    64 
       
    65 // ----------------------------------------------------------------------------
       
    66 // NewL
       
    67 // ----------------------------------------------------------------------------
       
    68 CImumFetchAndEditOperation* CImumFetchAndEditOperation::NewL(
       
    69     CImumInternalApi& aMailboxApi,
       
    70     TRequestStatus& aObserverRequestStatus,
       
    71     MMsvProgressReporter& aReporter,
       
    72     const TEmailEditParams& aParams,
       
    73     TBool aAckReceipts )
       
    74     {
       
    75     IMUM_STATIC_CONTEXT( CImumFetchAndEditOperation::NewL, 0, mtm, KImumMtmLog );
       
    76     IMUM_IN();
       
    77     IMUM_OUT();
       
    78     
       
    79     return new ( ELeave ) CImumFetchAndEditOperation(
       
    80         aMailboxApi, aObserverRequestStatus,
       
    81         aReporter, aParams, aAckReceipts );
       
    82     }
       
    83 
       
    84 // ----------------------------------------------------------------------------
       
    85 // ~CImumFetchAndEditOperation
       
    86 // ----------------------------------------------------------------------------
       
    87 CImumFetchAndEditOperation::~CImumFetchAndEditOperation()
       
    88     {
       
    89     IMUM_CONTEXT( CImumFetchAndEditOperation::~CImumFetchAndEditOperation, 0, KImumMtmLog );
       
    90     IMUM_IN();
       
    91     IMUM_OUT();
       
    92     
       
    93     }
       
    94 
       
    95 // ----------------------------------------------------------------------------
       
    96 // GetErrorProgressL
       
    97 // ----------------------------------------------------------------------------
       
    98 const TDesC8& CImumFetchAndEditOperation::GetErrorProgressL( TInt aError )
       
    99     {
       
   100     IMUM_CONTEXT( CImumFetchAndEditOperation::GetErrorProgressL, 0, KImumMtmLog );
       
   101     IMUM_IN();
       
   102     
       
   103     // DoRunL() left, failed to switch to launch editor state.
       
   104     iLocalProgress().iType = TMsvLocalOperationProgress::ELocalNone;
       
   105     iLocalProgress().iTotalNumberOfEntries = 0;
       
   106     iLocalProgress().iNumberCompleted = 0;
       
   107     iLocalProgress().iNumberFailed = 0;
       
   108     iLocalProgress().iNumberRemaining = 0;
       
   109     iLocalProgress().iError = aError;
       
   110     iLocalProgress().iId = iEditParams.iEditorParams.iId;
       
   111     IMUM_OUT();
       
   112     return iLocalProgress;
       
   113     }
       
   114 
       
   115 // ----------------------------------------------------------------------------
       
   116 // SetFetchOpL
       
   117 // ----------------------------------------------------------------------------
       
   118 void CImumFetchAndEditOperation::SetFetchOpL( CMsvOperation* aFetchOp )
       
   119     {
       
   120     IMUM_CONTEXT( CImumFetchAndEditOperation::SetFetchOpL, 0, KImumMtmLog );
       
   121     IMUM_IN();
       
   122     
       
   123     __ASSERT_ALWAYS( aFetchOp, User::Panic( KImumMtmUiPanic, EPanicOpBadFetchOp ) );
       
   124     __ASSERT_ALWAYS( !iOperation, User::Panic( KImumMtmUiPanic, EPanicAlreadySetFetchOp ) );
       
   125     iOperation = aFetchOp;
       
   126     iService = iOperation->Service();
       
   127     BaseConstructL( iOperation->Mtm() );
       
   128     iState = EStateFetching;
       
   129     iStatus = KRequestPending;
       
   130     SetActive();
       
   131     IMUM_OUT();
       
   132     }
       
   133 
       
   134 // ----------------------------------------------------------------------------
       
   135 // RequestStatus
       
   136 // ----------------------------------------------------------------------------
       
   137 TRequestStatus& CImumFetchAndEditOperation::RequestStatus()
       
   138     {
       
   139     IMUM_CONTEXT( CImumFetchAndEditOperation::RequestStatus, 0, KImumMtmLog );
       
   140     IMUM_IN();
       
   141     IMUM_OUT();
       
   142     
       
   143     return iStatus;
       
   144     }
       
   145 
       
   146 // ----------------------------------------------------------------------------
       
   147 // DoRunL
       
   148 // ----------------------------------------------------------------------------
       
   149 void CImumFetchAndEditOperation::DoRunL()
       
   150     {
       
   151     IMUM_CONTEXT( CImumFetchAndEditOperation::DoRunL, 0, KImumMtmLog );
       
   152     IMUM_IN();
       
   153     
       
   154     iActualMtm = iMtm;
       
   155     iMtm = KUidMsvLocalServiceMtm;  // Error progress is local MTM.
       
   156     switch(iState)
       
   157         {
       
   158         case EStateFetching:
       
   159             // The fetch has completed.
       
   160             {
       
   161             if(KErrNone == GetOperationCompletionCodeL())
       
   162                 {
       
   163                 DoEditL();
       
   164                 }
       
   165             else
       
   166                 {
       
   167                 CompleteObserver();
       
   168                 }
       
   169             }
       
   170             break;
       
   171         case EStateEditing:
       
   172             // Edit has completed.
       
   173             CompleteObserver( iOperation->iStatus.Int() );
       
   174             iState = EStateComplete;
       
   175             break;
       
   176 
       
   177         case EStateIdle:
       
   178         case EStateComplete:
       
   179         default:
       
   180             break;
       
   181         }
       
   182     iMtm = iOperation->Mtm();   // Completed without error, reset MTM.
       
   183     IMUM_OUT();
       
   184     }
       
   185 
       
   186 // ----------------------------------------------------------------------------
       
   187 // DoEditL
       
   188 // ----------------------------------------------------------------------------
       
   189 void CImumFetchAndEditOperation::DoEditL()
       
   190     {
       
   191     IMUM_CONTEXT( CImumFetchAndEditOperation::DoEditL, 0, KImumMtmLog );
       
   192     IMUM_IN();
       
   193     
       
   194     iReporter.MakeProgressVisibleL( EFalse );     // Get rid of the dialog.
       
   195     iMtmUi->BaseMtm().SwitchCurrentEntryL( iEditParams.iEditorParams.iId );
       
   196     delete iOperation;
       
   197     iOperation = NULL;
       
   198     iStatus = KRequestPending;
       
   199 
       
   200     iOperation = CImumEditOperation::NewL(
       
   201         iMailboxApi, iStatus, iActualMtm, iEditParams, iAckReceipts );
       
   202 
       
   203     iState = EStateEditing;
       
   204     SetActive();
       
   205     IMUM_OUT();
       
   206     }
       
   207 
       
   208 // End of File