email/mail/EditorSrc/MsgMailEditorDocument.cpp
branchRCL_3
changeset 27 7fdbb852d323
parent 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/mail/EditorSrc/MsgMailEditorDocument.cpp	Wed Sep 01 12:31:54 2010 +0100
@@ -0,0 +1,313 @@
+/*
+* Copyright (c) 2002 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:  Implements document class of Mail Editor
+*
+*/
+
+
+// INCLUDE FILES
+#include "MsgMailEditorDocument.h"
+#include "MsgMailEditorAppUi.h"
+#include "MsgMailPreferences.h"
+#include "MsgMailDRMHandler.h"
+#include "MailUtils.h"
+#include "CMailCRHandler.h"
+
+#include <cntdef.h>
+#include <mtclreg.h>                 // for CClientMtmRegistry
+#include <mtmuibas.h>                // for CBaseMtmUi
+#include <miutmsg.h>
+#include <akninputblock.h>           // CAknInputBlock
+#include <MuiuOperationWait.h> // CMuiuOperationWait
+#include <MuiuMsgEditorLauncher.h>
+#include <MuiuMsvUiServiceUtilities.h>
+#include <mmsvattachmentmanager.h>
+#include <coeutils.h>
+#include <featmgr.h>
+#include <bldvariant.hrh>
+#include <MsgEditor.hrh>
+#include <MsgAttachmentInfo.h>
+#include <MsgAttachmentModel.h>
+#include <MsgMailEditor.rsg>
+#include <mtmuibas.h>
+#include <MTMStore.h>
+#include <SendUiConsts.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+// Constructor
+CMsgMailEditorDocument::CMsgMailEditorDocument( CEikApplication& aApp )
+    : CMsgMailDocument( aApp )
+    { 
+    }
+
+// destructor
+CMsgMailEditorDocument::~CMsgMailEditorDocument()
+    {
+    delete iPrefs;
+    iPrefs = NULL; // owned by CMsgMailDocument
+    delete iMailCRHandler;
+    delete iEmailApi;
+    iEmailApi = NULL;
+    iMailboxArray.Close();    
+    }
+// ----------------------------------------------------------------------------
+// CMsgMailEditorDocument::ConstructL()
+// Symbian OS constructor can leave.
+// ----------------------------------------------------------------------------
+//
+void CMsgMailEditorDocument::ConstructL()
+    {
+    CMsgEditorDocument::ConstructL();
+    iMailCRHandler = CMailCRHandler::NewL( this );
+    iEmailApi = CreateEmailApiL( &(Session()) );
+
+    iPrefs = new (ELeave) CMsgMailPreferences();
+    iPrefs->SetEncodingSupport( iMailCRHandler->MailEncodingSetting() );
+    
+    PrepareMtmL( KSenduiMtmSmtpUid );
+    }
+
+// ----------------------------------------------------------------------------
+// CMsgMailEditorDocument::NewL()
+// ----------------------------------------------------------------------------
+//
+CMsgMailEditorDocument* CMsgMailEditorDocument::NewL( 
+        CEikApplication& aApp )     // CMsgMailEditorApp reference
+    {
+    CMsgMailEditorDocument* self = 
+        new (ELeave) CMsgMailEditorDocument( aApp );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+
+    return self;
+    }
+   
+// ----------------------------------------------------------------------------
+// CMsgMailEditorDocument::CreateAppUiL()
+// ----------------------------------------------------------------------------
+//
+CEikAppUi* CMsgMailEditorDocument::CreateAppUiL()
+    {
+    return new(ELeave) CMsgMailEditorAppUi;
+    }
+
+// ----------------------------------------------------------------------------
+// CMsgMailEditorDocument::NotifyChanges()
+// ----------------------------------------------------------------------------
+//
+void CMsgMailEditorDocument::NotifyChanges(TMsgAttachmentCommand aCommand, 
+                                           CMsgAttachmentInfo* aAttachmentInfo)
+    { 
+    TRAP_IGNORE(NotifyChangesL(aCommand, aAttachmentInfo));
+    }
+
+// ----------------------------------------------------------------------------
+// CMsgMailEditorDocument::GetAttachmentFileL()
+// ----------------------------------------------------------------------------
+//
+RFile CMsgMailEditorDocument::GetAttachmentFileL( TMsvAttachmentId aId )
+	{
+	return GetAttachmentManagerL().GetAttachmentFileL( aId );
+	}
+// ----------------------------------------------------------------------------
+// CMsgMailEditorDocument::NotifyChangesL()
+// ----------------------------------------------------------------------------
+//
+void CMsgMailEditorDocument::NotifyChangesL(TMsgAttachmentCommand aCommand, 
+                                           CMsgAttachmentInfo* aAttachmentInfo)
+    {
+    // block key events while handling with attachments.
+    CAknInputBlock::NewLC();
+    switch (aCommand)
+        {
+        case EMsgAttachmentAdded:
+            {
+            // don't show confirmation when restoring message
+            if (ShowConfirmation())
+                {             
+                SetChanged(ETrue);
+                }            
+            break;
+            }
+        case EMsgAttachmentRemoved:
+            {  
+            CMuiuOperationWait* wait = CMuiuOperationWait::NewLC();
+			
+			TMsvAttachmentId attachmentId = aAttachmentInfo->AttachmentId();
+			MMsvAttachmentManager& manager = MessageL().AttachmentManager();
+			manager.RemoveAttachmentL(attachmentId, wait->iStatus);
+            
+            wait->Start();
+            CleanupStack::PopAndDestroy( wait );
+            SetChanged(ETrue);
+            break;
+            }
+        default:
+
+        break;
+        }   
+    CleanupStack::PopAndDestroy();  // CSI: 12 # CAknInputBlock    
+    }
+
+// ----------------------------------------------------------------------------
+// CMsgMailEditorDocument::IsNewMessage()
+// ----------------------------------------------------------------------------
+//    
+TBool CMsgMailEditorDocument::IsNewMessage() const
+    {
+    return (!CurrentEntry().Entry().Visible());
+    }
+
+// ----------------------------------------------------------------------------
+// CMsgMailEditorDocument::IsReplyMessage()
+// ----------------------------------------------------------------------------
+//
+TBool CMsgMailEditorDocument::IsReplyMessage() const
+    {
+    return ( (LaunchFlags() & EMsgReplyToMessageSender) ||
+        (LaunchFlags() & EMsgReplyToMessageAll));
+    }
+
+// ----------------------------------------------------------------------------
+// CMsgMailEditorDocument::IsForwardMessage()
+// ----------------------------------------------------------------------------
+//
+TBool CMsgMailEditorDocument::IsForwardMessage() const
+	{
+	return ( LaunchFlags() & EMsgForwardMessage );
+	}
+
+void CMsgMailEditorDocument::ReadSendOptionsL()
+    {
+    if (!CurrentEntry().Entry().Visible())
+        {
+        // get default send options from default account
+        SendOptions().DefaultAccountSettingsL(
+            CurrentEntry().Entry().iServiceId,
+            Session());
+        }
+    else
+        {
+        // opening old message
+        SendOptions().ExportSendOptionsL(Entry());
+        }        
+    }
+
+// ----------------------------------------------------------------------------
+// CMsgMailEditorDocument::IsOnlineL()
+// ----------------------------------------------------------------------------
+//
+TBool CMsgMailEditorDocument::IsOnlineL()
+    {
+    CMsvEntrySelection* accounts = MsvUiServiceUtilities::GetListOfAccountsL(
+        Session() );
+    CleanupStack::PushL(accounts);
+
+    CMsvEntry* rootEntry = Session().GetEntryL(KMsvRootIndexEntryId);
+    CleanupStack::PushL(rootEntry);
+
+    TBool active = EFalse;
+    for (TInt cc=0; cc<accounts->Count(); cc++)
+        {
+        TMsvEntry tentry;
+        TRAPD( err, tentry=rootEntry->ChildDataL(accounts->At(cc)) );
+
+        if ( err==KErrNone && tentry.Connected() )
+            {
+            active = ETrue;
+            break;
+            }
+        }
+    CleanupStack::PopAndDestroy( 2, accounts );				// CSI: 47,12 # rootEntry, accounts
+    return active;
+    }
+
+// ----------------------------------------------------------------------------
+// CMsgMailEditorDocument::OpenMailMessageEntryL()
+// ----------------------------------------------------------------------------
+//
+void CMsgMailEditorDocument::OpenMailMessageEntryL( TMsvEntry aEntry )
+    {
+    CMtmStore* store = CMtmStore::NewL( Session() );
+    CleanupStack::PushL(store);
+    CBaseMtmUi& mtmUi=store->GetMtmUiAndSetContextLC( aEntry );
+    CMuiuOperationWait* wait = CMuiuOperationWait::NewLC();
+    CMsvOperation* op=mtmUi.EditL( wait->iStatus );
+    wait->Start();
+    CleanupStack::PopAndDestroy( 3, store );				// CSI: 47,12 # store, ContextLC, wait
+    delete op;    
+    }
+
+// ----------------------------------------------------------------------------
+// CMsgMailEditorDocument::SendImmediatelyL()
+// ----------------------------------------------------------------------------
+//
+void CMsgMailEditorDocument::SendImmediatelyL( const TMsvId aMsgId )
+    {
+    CMsvEntrySelection* selection = new (ELeave) CMsvEntrySelection;
+    CleanupStack::PushL(selection);
+    selection->AppendL( aMsgId );
+
+    CMuiuOperationWait* wait = CMuiuOperationWait::NewLC();
+
+    // Switch MTM context to the service to send to.
+    const TMsvEntry entry( Entry() );
+    Mtm().SwitchCurrentEntryL( entry.iServiceId );
+
+    CBaseMtmUi& ui= MtmUi();
+    CMsvOperation* op=ui.CopyToL(*selection, wait->iStatus);
+
+    CleanupStack::PushL( op );
+    wait->Start(); // wait for asynch operation
+
+    const TDesC8& finalBuf = op->ProgressL();
+
+    ui.DisplayProgressSummary(finalBuf);
+
+    CleanupStack::PopAndDestroy(3, selection);				// CSI: 47,12 # op, wait, selection
+    }
+    
+// ----------------------------------------------------------------------------
+// CMsgMailEditorDocument::GetHealthyMailboxListL()
+// ----------------------------------------------------------------------------
+//  
+MImumInHealthServices::RMailboxIdArray 
+        CMsgMailEditorDocument::GetHealthyMailboxListL(
+        const TInt64& aFlags )
+    {    
+    // The list of mailboxes must be updated. 
+    User::LeaveIfError( 
+        iEmailApi->HealthServicesL().GetMailboxList( 
+            iMailboxArray, aFlags ) );
+    
+    return iMailboxArray;
+    }
+        
+// ----------------------------------------------------------------------------
+// CMsgMailEditorDocument::GetAttachmentManagerL()
+// ----------------------------------------------------------------------------
+//
+MMsvAttachmentManager& CMsgMailEditorDocument::GetAttachmentManagerL()
+    {
+	// Load Attachment list
+	MessageL().GetAttachmentsListL(iMessageID, 
+		CImEmailMessage::EAllAttachments, 
+		CImEmailMessage::EThisMessageAndEmbeddedMessages);
+	
+	return MessageL().AttachmentManager();       
+    }
+    
+// End of File