diff -r ebe688cedc25 -r 7fdbb852d323 email/mail/EditorSrc/MsgMailEditorDocument.cpp --- /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 +#include // for CClientMtmRegistry +#include // for CBaseMtmUi +#include +#include // CAknInputBlock +#include // CMuiuOperationWait +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// ================= 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; ccCount(); 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