diff -r 000000000000 -r 72b543305e3a email/mail/EditorSrc/cmsgmailremotemailboxsetting.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/email/mail/EditorSrc/cmsgmailremotemailboxsetting.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,227 @@ +/* +* 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: Remote mailbox setting item and setting page +* +*/ + + +#include "cmsgmailremotemailboxsetting.h" +#include "MsgMailEditorDocument.h" +#include "MailLog.h" +#include +#include +#include +#include +#include +#include // CEmailAccounts + +inline void CMsgMailEditorRemoteMailboxSettingItem::ConstructL() + { + SetSettingValueL(); + } + +CMsgMailEditorRemoteMailboxSettingItem* + CMsgMailEditorRemoteMailboxSettingItem::NewL( + TInt aIdentifier, CMsgMailEditorDocument& aDocument ) + { + CMsgMailEditorRemoteMailboxSettingItem* self = + new( ELeave ) CMsgMailEditorRemoteMailboxSettingItem( + aIdentifier, aDocument ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(self); // self + return self; + } + + +CMsgMailEditorRemoteMailboxSettingItem::CMsgMailEditorRemoteMailboxSettingItem( + TInt aIdentifier, + CMsgMailEditorDocument& aDocument ): + CAknTextSettingItem( aIdentifier, iSettingValue ), + iDocument( aDocument ) + { + // iSettingValue is set later + } + +CMsgMailEditorRemoteMailboxSettingItem::~CMsgMailEditorRemoteMailboxSettingItem() + { + iSettingValue.Close(); + delete iMailBoxIdArray; + delete iServiceArray; + } + +// ---------------------------------------------------------------------------- +// // From CAknTextSettingItem +// ---------------------------------------------------------------------------- +// +void CMsgMailEditorRemoteMailboxSettingItem::EditItemL( + TBool /* aCalledFromMenu */ ) + { + TPtrC settingName = SettingName(); + TInt currentSelection( KErrNotFound ); + NameArrayL( currentSelection ); + + CAknSettingPage* dlg = new( ELeave )CAknRadioButtonSettingPage( + &settingName, + SettingNumber(), + EEikCtTextButton, + SettingEditorResourceId(), + SettingPageResourceId(), + currentSelection, + iMailBoxIdArray ); + SetSettingPage( dlg ); + SettingPage()->SetSettingPageObserver( this ); + SettingPage()->ExecuteLD( CAknSettingPage::EUpdateWhenAccepted ); + + SaveSettingValueL( currentSelection ); + SetSettingValueL(); + LoadL(); // update setting value to listbox + UpdateListBoxTextL(); + SetSettingPage( 0 ); // it is deleted now + } + + +// ---------------------------------------------------------------------------- +// Create name array +// ---------------------------------------------------------------------------- +// +void CMsgMailEditorRemoteMailboxSettingItem::NameArrayL( + TInt& aSelected ) + { + LOG("CMsgMailEditorRemoteMailboxSettingItem::NameArrayL"); + + // TImumInMboxListRequest does not work so we need to do this hard way + // POP & IMAP service iRelatedId points to STMP service, so we use that + TInt64 flags = MImumInHealthServices::EFlagSetHealthyReceiving; + MImumInHealthServices::RMailboxIdArray mbox = + iDocument.GetHealthyMailboxListL( flags ); + TInt itemCount = mbox.Count(); + + //+1 if itemCount=0 + delete iMailBoxIdArray; + iMailBoxIdArray = NULL; + iMailBoxIdArray = new(ELeave)CDesCArrayFlat(itemCount+1); + + delete iServiceArray; + iServiceArray = NULL; + iServiceArray = new(ELeave) CMsvEntrySelection; + + TMsvId id; + TMsvEntry entry; + CMsvSession& session = iDocument.Session(); + for(TInt i=0; iAppendL(entry.iDetails); + if ( entry.iDetails == SettingTextL() ) + { + // set selection index + aSelected = iMailBoxIdArray->Count() - 1; + } + iServiceArray->AppendL( entry.iRelatedId ); + } + ASSERT( iServiceArray->Count() == iMailBoxIdArray->Count() ); + } + +// ---------------------------------------------------------------------------- +// Save selected mbox id to settings +// ---------------------------------------------------------------------------- +// +void CMsgMailEditorRemoteMailboxSettingItem::SaveSettingValueL( + TInt aSelected ) + { + ASSERT( iServiceArray ); + if( aSelected != KErrNotFound ) + { + ASSERT( aSelected >= 0 && aSelected < iServiceArray->Count() ); + iDocument.SendOptions().SetServiceId( (*iServiceArray)[aSelected] ); + iDocument.SetChanged( ETrue ); + + //Update header because mailbox is selected. + UpdateReplyToL(aSelected); + } + } + +// ---------------------------------------------------------------------------- +// Updates Reply-to value for mail header. +// ---------------------------------------------------------------------------- +// +void CMsgMailEditorRemoteMailboxSettingItem::UpdateReplyToL( + TInt aSelected ) + { + //Get smtp account and load smtp settings + CEmailAccounts* smtpAccount = CEmailAccounts::NewLC(); + CImSmtpSettings* smtpSet=new(ELeave)CImSmtpSettings(); + CleanupStack::PushL(smtpSet); + + TInt tempArrayCount = iServiceArray->Count(); + + + // Checks that a aSelected is in the leagal range. + if( !( aSelected >= 0 && aSelected < tempArrayCount ) ) + { + return; + } + + const TMsvId smtpSetId = (*iServiceArray)[aSelected]; + + TSmtpAccount accountParams; + smtpAccount->GetSmtpAccountL( smtpSetId, accountParams ); + smtpAccount->LoadSmtpSettingsL(accountParams, *smtpSet); + + //Check that if reply to address is same as mailbox address + //do not add "reply to" field for header. Otherwise "reply to" field + //would always be visible. + if(smtpSet->ReplyToAddress().Compare(smtpSet->EmailAddress() ) != 0) + { + CImHeader& header = iDocument.HeaderL(); + header.SetReplyToL( smtpSet->ReplyToAddress() ); + } + else + { + CImHeader& header = iDocument.HeaderL(); + header.SetReplyToL( KNullDesC16 ); + } + CleanupStack::PopAndDestroy(2, smtpAccount); // CSI: 47,12 # smtpAccount, smtpSet + + } + +// ---------------------------------------------------------------------------- +// Set current mailbox name to setting list +// ---------------------------------------------------------------------------- +// +void CMsgMailEditorRemoteMailboxSettingItem::SetSettingValueL() + { + CMsgMailPreferences& prefs = iDocument.SendOptions(); + // set current remote mailbox name to listbox + TMsvId service( prefs.ServiceId() ); //get current Service id + TMsvId parent(0); + TMsvEntry child; + + TInt err( iDocument.Session().GetEntry(service, parent, child) ); + + iSettingValue.Close(); + if (!err) + { + iSettingValue.CreateL( child.iDetails ); + } + else + { + HBufC* noRmBox = StringLoader::LoadLC(R_TEXT_NO_RMBOX); + iSettingValue.CreateL( *noRmBox ); + CleanupStack::PopAndDestroy(noRmBox); //noRmBox + } + } + +// End of File