mobilemessaging/unieditor/application/src/UniEditorSendOperation.cpp
changeset 0 72b543305e3a
equal deleted inserted replaced
-1:000000000000 0:72b543305e3a
       
     1 /*
       
     2 * Copyright (c) 2006,2007 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:   CUniEditorSendOperation, asynchronous object for message sending
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 // ========== INCLUDE FILES ================================
       
    21 #include <MsgEditorView.h>
       
    22 #include <MsgBodyControl.h>
       
    23 #include <MsgExpandableControl.h>
       
    24 
       
    25 #include <mmsconst.h>
       
    26 
       
    27 // Features
       
    28 #include <featmgr.h>    
       
    29 #include <bldvariant.hrh>
       
    30 #include <messagingvariant.hrh>
       
    31 
       
    32 #include <unidatautils.h>
       
    33 #include <MsgMimeTypes.h>
       
    34 #include <unismilmodel.h>
       
    35 #include <unismillist.h>
       
    36 #include <uniobjectlist.h>
       
    37 #include <MsgMediaInfo.h>
       
    38 #include <MsgTextInfo.h>
       
    39 #include <MsgImageInfo.h>
       
    40 #include <uniaddresshandler.h>
       
    41 
       
    42 #include "UniClientMtm.h"
       
    43 #include "UniPluginApi.h"
       
    44 #include "UniEditorHeader.h"
       
    45 #include "UniEditorSendOperation.h"
       
    46 
       
    47 // ========== EXTERNAL DATA STRUCTURES =====================
       
    48 
       
    49 // ========== EXTERNAL FUNCTION PROTOTYPES =================
       
    50 
       
    51 // ========== CONSTANTS ====================================
       
    52 
       
    53 // ========== MACROS =======================================
       
    54 
       
    55 // ========== LOCAL CONSTANTS AND MACROS ===================
       
    56 
       
    57 // ========== MODULE DATA STRUCTURES =======================
       
    58 
       
    59 // ========== LOCAL FUNCTION PROTOTYPES ====================
       
    60 
       
    61 // ========== LOCAL FUNCTIONS ==============================
       
    62 
       
    63 // ========== MEMBER FUNCTIONS =============================
       
    64 
       
    65 // ---------------------------------------------------------
       
    66 // CUniEditorSendOperation::NewL
       
    67 //
       
    68 // Factory method.
       
    69 // ---------------------------------------------------------
       
    70 //
       
    71 CUniEditorSendOperation* CUniEditorSendOperation::NewL(
       
    72         MUniEditorOperationObserver& aObserver,
       
    73         CUniEditorDocument& aDocument,
       
    74         CUniEditorHeader& aHeader,
       
    75         CUniEditorPlugin& aPlugin,
       
    76         CMsgEditorView& aView,
       
    77         RFs& aFs )
       
    78     {
       
    79     CUniEditorSendOperation* self = 
       
    80         new ( ELeave ) CUniEditorSendOperation( aObserver, aDocument, aHeader, aPlugin, aView, aFs );
       
    81     CleanupStack::PushL( self );
       
    82     self->ConstructL();
       
    83     CleanupStack::Pop( self );
       
    84     return self;
       
    85     }
       
    86 
       
    87 // ---------------------------------------------------------
       
    88 // CUniEditorSendOperation::CUniEditorSendOperation
       
    89 //
       
    90 // Constructor.
       
    91 // ---------------------------------------------------------
       
    92 //
       
    93 CUniEditorSendOperation::CUniEditorSendOperation(
       
    94         MUniEditorOperationObserver& aObserver,
       
    95         CUniEditorDocument& aDocument,
       
    96         CUniEditorHeader& aHeader,
       
    97         CUniEditorPlugin& aPlugin,
       
    98         CMsgEditorView& aView,
       
    99         RFs& aFs ) :
       
   100     CUniEditorOperation( aObserver, aDocument, aFs, EUniEditorOperationSend ),
       
   101     iHeader( aHeader ),
       
   102     iPlugin( aPlugin ),
       
   103     iView( aView ),
       
   104     iConvertedEntry( 0 )
       
   105     {
       
   106     }
       
   107 
       
   108 // ---------------------------------------------------------
       
   109 // CUniEditorSendOperation::ConstructL
       
   110 //
       
   111 // 2nd phase constructor.
       
   112 // ---------------------------------------------------------
       
   113 //
       
   114 void CUniEditorSendOperation::ConstructL()
       
   115     {
       
   116     BaseConstructL();
       
   117     iSaveOperation = CUniEditorSaveOperation::NewL( *this, iDocument, iHeader, iView, iFs );
       
   118     }
       
   119 
       
   120 
       
   121 // ---------------------------------------------------------
       
   122 // CUniEditorSendOperation::~CUniEditorSendOperation
       
   123 //
       
   124 // Destructor.
       
   125 // ---------------------------------------------------------
       
   126 //
       
   127 CUniEditorSendOperation::~CUniEditorSendOperation()
       
   128     {
       
   129     Cancel();
       
   130     delete iSaveOperation;
       
   131     }
       
   132 
       
   133 // ---------------------------------------------------------
       
   134 // CUniEditorSendOperation::Send
       
   135 // ---------------------------------------------------------
       
   136 //
       
   137 void CUniEditorSendOperation::Send()
       
   138     {
       
   139     ResetErrors();
       
   140     iOperationState = EUniEditorSendRemoveDuplicateAddresses;
       
   141     CompleteSelf( KErrNone );
       
   142     }
       
   143 
       
   144 // ---------------------------------------------------------
       
   145 // CUniEditorSendOperation::DoSendStepL
       
   146 // ---------------------------------------------------------
       
   147 //
       
   148 void CUniEditorSendOperation::DoSendStepL()
       
   149     {
       
   150     switch ( iOperationState )
       
   151         {
       
   152         case EUniEditorSendRemoveDuplicateAddresses:
       
   153             {
       
   154             DoRemoveDuplicateAddressesL();
       
   155             break;
       
   156             }
       
   157         case EUniEditorSendSave:
       
   158             {
       
   159             DoSave();
       
   160             break;
       
   161             }
       
   162         case EUniEditorSendConvert:
       
   163             {
       
   164             DoConvertL();
       
   165             break;
       
   166             }
       
   167         case EUniEditorSendPluginSend:
       
   168             {
       
   169             DoSendL();
       
   170             break;
       
   171             }
       
   172         case EUniEditorSendEnd:
       
   173             {
       
   174             iObserver.EditorOperationEvent(
       
   175                 EUniEditorOperationSend,
       
   176                 EUniEditorOperationComplete );
       
   177             break;
       
   178             }
       
   179         default:
       
   180             {
       
   181             iObserver.EditorOperationEvent(
       
   182                 EUniEditorOperationSend,
       
   183                 EUniEditorOperationError );
       
   184             break;
       
   185             }
       
   186         }
       
   187     }
       
   188 
       
   189 // ---------------------------------------------------------
       
   190 // CUniEditorSendOperation::DoRemoveDuplicateAddressesL
       
   191 // ---------------------------------------------------------
       
   192 //
       
   193 void CUniEditorSendOperation::DoRemoveDuplicateAddressesL()
       
   194     {
       
   195     if ( iHeader.RemoveDuplicateAddressesL() )
       
   196         {
       
   197         iDocument.SetHeaderModified( ETrue );
       
   198         }
       
   199     
       
   200     iOperationState = EUniEditorSendSave;
       
   201     CompleteSelf( KErrNone );
       
   202     }
       
   203 
       
   204 // ---------------------------------------------------------
       
   205 // CUniEditorSendOperation::DoSave
       
   206 // ---------------------------------------------------------
       
   207 //
       
   208 void CUniEditorSendOperation::DoSave()
       
   209     {
       
   210     iOperationState = EUniEditorSendConvert;
       
   211     iSaveOperation->Save( ESendingSave );
       
   212     SetPending();
       
   213     }
       
   214 
       
   215 // ---------------------------------------------------------
       
   216 // CUniEditorSendOperation::DoConvertL
       
   217 // ---------------------------------------------------------
       
   218 //
       
   219 void CUniEditorSendOperation::DoConvertL()
       
   220     {
       
   221     iOperationState = EUniEditorSendPluginSend;
       
   222     iConvertedEntry = iPlugin.ConvertToL( iDocument.Mtm().Entry().EntryId() );
       
   223     CompleteSelf( KErrNone );
       
   224     }
       
   225 
       
   226 // ---------------------------------------------------------
       
   227 // CUniEditorSendOperation::DoSendL
       
   228 // ---------------------------------------------------------
       
   229 //
       
   230 void CUniEditorSendOperation::DoSendL()
       
   231     {
       
   232     iOperationState = EUniEditorSendEnd;
       
   233     iPlugin.SendL( iConvertedEntry );
       
   234     CompleteSelf( KErrNone );
       
   235     }
       
   236 
       
   237 // ---------------------------------------------------------
       
   238 // CUniEditorSendOperation::DoCancelCleanup
       
   239 //
       
   240 // ---------------------------------------------------------
       
   241 //
       
   242 void CUniEditorSendOperation::DoCancelCleanup()
       
   243     {
       
   244     if ( iSaveOperation )
       
   245         {
       
   246         iSaveOperation->Cancel();
       
   247         }
       
   248     }
       
   249 
       
   250 // ---------------------------------------------------------
       
   251 // CUniEditorSendOperation::RunL
       
   252 // ---------------------------------------------------------
       
   253 //
       
   254 void CUniEditorSendOperation::RunL()
       
   255     {
       
   256     PrintOperationAndState();
       
   257     if ( !SetErrorAndReport( iStatus.Int() ) )
       
   258         {
       
   259         DoSendStepL();
       
   260         }
       
   261     }
       
   262 
       
   263 // ---------------------------------------------------------
       
   264 // CUniEditorSendOperation::HandleOperationEvent
       
   265 // ---------------------------------------------------------
       
   266 //
       
   267 void CUniEditorSendOperation::HandleOperationEvent(
       
   268     TUniEditorOperationType /*aOperation*/,
       
   269     TUniEditorOperationEvent /*aEvent*/ )
       
   270     {
       
   271     // Get errors from iSaveOperation
       
   272     CArrayFixFlat<TInt>* errors = iSaveOperation->GetErrors();
       
   273     for ( TInt i = 0; i < errors->Count(); i++ )
       
   274         {
       
   275         // if save operation has produced errors, the message
       
   276         // must not be sent because probably there is nothing to send!
       
   277         SetError( errors->At( i ) );
       
   278         iOperationState = EUniEditorSendEnd;
       
   279         }
       
   280         
       
   281     CompleteOperation( KErrNone );
       
   282     }
       
   283 
       
   284 // EOF