diff -r ebe688cedc25 -r 7fdbb852d323 email/imum/Utils/Src/ImumMboxSettingsCtrl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/email/imum/Utils/Src/ImumMboxSettingsCtrl.cpp Wed Sep 01 12:31:54 2010 +0100 @@ -0,0 +1,1916 @@ +/* +* 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: ImumMboxSettingsCtrl.cpp +* +*/ + + + +// INCLUDE FILES +#include +#include // CRepository +#include // CEmailAccounts +#include // KUidMsgTypeSMTP +#include // CImSmtpSettings +#include // CImPop3Settings +#include // CImImap4Settings +#include // CImIAPPreferences +#include // KCRUidAOSettings +#include // CCommsDatabase +#include "MuiuDynamicSettingItemBase.h" // CMuiuDynamicSettingsItemBase +#include +#include + +#include "ImumMboxSettingsCtrl.h" +#include "ImumMboxDefaultData.h" +#include "ImumMboxManager.h" +#include "ImumPrivateCRKeys.h" // Predefined mailbox keys +#include "ImumMboxDataExtension.h" +#include "IMASCenRepControl.h" +#include "ImumUtilsLogging.h" +#include "EmailUtils.H" +#include "ImumInternalApiImpl.h" +#include "ImumInMailboxUtilitiesImpl.h" +#include "ImumPanic.h" +#include "ImumInSettingsKeys.h" +#include "ImumConstants.h" + +// EXTERNAL DATA STRUCTURES +// EXTERNAL FUNCTION PROTOTYPES +// CONSTANTS +const TUint64 KIMASLastFlag = 64; + +enum TISPErrors + { + EISPNoError = 0, + EISPMailboxIdUnderflowFailure, + EISPAccountIdUnderflowFailure, + EISPAccountIdOverflowFailure, + EISPMtmIdParameterFailure + }; + +// MACROS +// LOCAL CONSTANTS AND MACROS +// MODULE DATA STRUCTURES +// LOCAL FUNCTION PROTOTYPES +// FORWARD DECLARATIONS + +// ============================ MEMBER FUNCTIONS =============================== + +// ---------------------------------------------------------------------------- +// TIMAStorerParams::TIMAStorerParams() +// ---------------------------------------------------------------------------- +// +TIMAStorerParams::TIMAStorerParams( + const TUid& aMtmId, + const TMsvId aMailboxId ) + : + iMailboxId( aMailboxId ), + iAccountId( 0 ), + iMtmId( aMtmId ) + { + __ASSERT_DEBUG( aMailboxId > 0, + User::Panic( KIMSStorerParamsPanic, EISPMailboxIdUnderflowFailure ) ); + __ASSERT_DEBUG( + ( aMtmId == KSenduiMtmImap4Uid || + aMtmId == KSenduiMtmPop3Uid ), + User::Panic( KIMSStorerParamsPanic, EISPMtmIdParameterFailure ) ); + } + +// ---------------------------------------------------------------------------- +// TIMAStorerParams::TIMAStorerParams() +// ---------------------------------------------------------------------------- +// +TIMAStorerParams::TIMAStorerParams( + const TUint32 aAccountId, + const TUid& aMtmId ) + : + iMailboxId( 0 ), + iAccountId( aAccountId ), + iMtmId( aMtmId ) + { + __ASSERT_DEBUG( iAccountId <= KIMASMaxAccounts, + User::Panic( KIMSStorerParamsPanic, EISPAccountIdOverflowFailure ) ); + __ASSERT_DEBUG( + ( aMtmId == KSenduiMtmImap4Uid || + aMtmId == KSenduiMtmPop3Uid ), + User::Panic( KIMSStorerParamsPanic, EISPMtmIdParameterFailure ) ); + + } + +// ---------------------------------------------------------------------------- +// TIMAStorerParams::TIMAStorerParams() +// ---------------------------------------------------------------------------- +// +TIMAStorerParams::TIMAStorerParams( + const TMsvEntry& aEntry ) + : + iMailboxId( aEntry.Id() ), + iAccountId( aEntry.iMtmData2 ), + iMtmId( aEntry.iMtm ) + { + __ASSERT_DEBUG( iAccountId > 0, + User::Panic( KIMSStorerParamsPanic, EISPAccountIdUnderflowFailure ) ); + __ASSERT_DEBUG( iAccountId <= KIMASMaxAccounts, + User::Panic( KIMSStorerParamsPanic, EISPAccountIdOverflowFailure ) ); + __ASSERT_DEBUG( + ( aEntry.iMtm == KSenduiMtmImap4Uid || + aEntry.iMtm == KSenduiMtmPop3Uid ), + User::Panic( KIMSStorerParamsPanic, EISPMtmIdParameterFailure ) ); + + } + +// ---------------------------------------------------------------------------- +// TIMAStorerParams::MailboxId() +// ---------------------------------------------------------------------------- +// +TMsvId TIMAStorerParams::MailboxId() const + { + return iMailboxId; + } + +// ---------------------------------------------------------------------------- +// TIMAStorerParams::AccountId() +// ---------------------------------------------------------------------------- +// +TUint32 TIMAStorerParams::AccountId() const + { + return iAccountId; + } + +// ---------------------------------------------------------------------------- +// TIMAStorerParams::MtmId() +// ---------------------------------------------------------------------------- +// +TUid TIMAStorerParams::MtmId() const + { + return iMtmId; + } + +// ============================ MEMBER FUNCTIONS =============================== + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::CImumMboxSettingsCtrl() +// ---------------------------------------------------------------------------- +CImumMboxSettingsCtrl::CImumMboxSettingsCtrl( + CImumInternalApiImpl& aMailboxApi ) + : + iMailboxApi( aMailboxApi ), + iUtils( NULL ), + iCenRepSmtp( NULL ), + iCenRepExtMail( NULL ), + iCenRepAlwaysOnline( NULL ), + iCenRepDefaultData( NULL ), + iAccounts( NULL ), + iCenRepControl( NULL ) + { + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::ConstructL() +// ---------------------------------------------------------------------------- +// +void CImumMboxSettingsCtrl::ConstructL() + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::ConstructL, 0, KLogData ); + IMUM_IN(); + + iCenRepControl = CIMASCenRepControl::NewL(); + iUtils = const_cast( + &iMailboxApi.MailboxUtilitiesL() ); + + FeatureManager::InitializeLibL(); + iFFEmailVariation = + FeatureManager::FeatureSupported( KFeatureIdFfEmailFramework ); + FeatureManager::UnInitializeLib(); + + IMUM_OUT(); + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::~CImumMboxSettingsCtrl() +// ---------------------------------------------------------------------------- +// +CImumMboxSettingsCtrl::~CImumMboxSettingsCtrl() + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::~CImumMboxSettingsCtrl, 0, KLogData ); + IMUM_IN(); + + delete iCenRepSmtp; + iCenRepSmtp = NULL; + delete iCenRepExtMail; + iCenRepExtMail = NULL; + delete iCenRepAlwaysOnline; + iCenRepAlwaysOnline = NULL; + delete iCenRepDefaultData; + iCenRepDefaultData = NULL; + delete iAccounts; + iAccounts = NULL; + delete iCenRepControl; + iCenRepControl = NULL; + iUtils = NULL; + + IMUM_OUT(); + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::NewL() +// ---------------------------------------------------------------------------- +// +CImumMboxSettingsCtrl* CImumMboxSettingsCtrl::NewL( + CImumInternalApiImpl& aMailboxApi ) + { + IMUM_STATIC_CONTEXT( CImumMboxSettingsCtrl::NewL, 0, utils, KLogData ); + IMUM_IN(); + + CImumMboxSettingsCtrl* self = NewLC( aMailboxApi ); + CleanupStack::Pop( self ); + + IMUM_OUT(); + return self; + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::NewLC() +// ---------------------------------------------------------------------------- +// +CImumMboxSettingsCtrl* CImumMboxSettingsCtrl::NewLC( + CImumInternalApiImpl& aMailboxApi ) + { + IMUM_STATIC_CONTEXT( CImumMboxSettingsCtrl::NewLC, 0, utils, KLogData ); + + CImumMboxSettingsCtrl* self = + new ( ELeave ) CImumMboxSettingsCtrl( aMailboxApi ); + CleanupStack::PushL( self ); + self->ConstructL(); + + IMUM_OUT(); + return self; + } + +/****************************************************************************** + + PUBLIC: CREATING NEW ACCOUNT + +******************************************************************************/ + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::CreateSettings() +// ---------------------------------------------------------------------------- +// +TInt CImumMboxSettingsCtrl::CreateSettings( + const TMsvId aMailboxId, + const TUint32 aAccountId, + const TUid& aProtocol, + CImumMboxDataExtension& aExtendedMailSettings, + const TBool aPopulateDefaults ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::CreateSettings, 0, KLogData ); + IMUM_IN(); + + // Initialize the settings + PreInitializeExtendedSettings( + aMailboxId, aAccountId, aProtocol, aExtendedMailSettings ); + + TInt error = KErrNone; + + // Populate defaults + if ( aPopulateDefaults ) + { + error = PopulateDefaultExtSettings( aExtendedMailSettings ); + } + + // If populating has not failed, continue with creating the settings + if ( error == KErrNone ) + { + // Create the settings + TRAP( error, CreateSettingsL( aExtendedMailSettings ) ); + } + + IMUM_OUT(); + return error; + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::CreateSettings() +// ---------------------------------------------------------------------------- +// +TInt CImumMboxSettingsCtrl::CreateSettings( + const CImumMboxDataExtension& aExtendedMailSettings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::CreateSettings, 0, KLogData ); + IMUM_IN(); + + TInt error = KErrNotReady; + + if ( aExtendedMailSettings.IsSettingsValid() ) + { + TRAP( error, CreateSettingsL( aExtendedMailSettings ) ); + } + + IMUM_OUT(); + return error; + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::PreInitializeExtendedSettings() +// ---------------------------------------------------------------------------- +// +void CImumMboxSettingsCtrl::PreInitializeExtendedSettings( + const TMsvId aMailboxId, + const TUint32 aAccountId, + const TUid& aProtocol, + CImumMboxDataExtension& aExtendedMailSettings ) const + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::PreInitializeExtendedSettings, 0, KLogData ); + IMUM_IN(); + + // Pre-initialize the extended settings + aExtendedMailSettings.SetMailboxId( aMailboxId ); + aExtendedMailSettings.SetAccountId( aAccountId ); + aExtendedMailSettings.SetProtocol( aProtocol ); + aExtendedMailSettings.SetExtensionId( + IMASAccountControl::AccountIdToExtendedAccountId( + aAccountId, aProtocol ) ); + + IMUM_OUT(); + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::PopulateDefaultExtSettings() +// ---------------------------------------------------------------------------- +// +TInt CImumMboxSettingsCtrl::PopulateDefaultExtSettings( + CImumMboxDataExtension& aExtendedMailSettings ) const + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::PopulateDefaultExtSettings, 0, KLogData ); + IMUM_IN(); + + // Before setting default settings, make sure the settings is properly + // initialized + if ( !aExtendedMailSettings.IsSettingsValid() ) + { + // The setting information is not stored properly, using + // the settings cannot be continued safely + // PreInitializeExtendedSettings should be called before this + IMUM0( 0, " *** MAILBOX EXTENDED SETTINGS FAILURE *** " ); + + __ASSERT_DEBUG( EFalse, + User::Panic( KImumMtmUiPanic, KErrNotReady ) ); + return KErrNotReady; + } + + //emailnotificationstate is not set to default since its already done + aExtendedMailSettings.SetNewMailIndicators( ETrue ); + aExtendedMailSettings.SetHideMsgs( EFalse ); + aExtendedMailSettings.SetOpenHtmlMail( EFalse ); + aExtendedMailSettings.SetAlwaysOnlineState( EMailAoHomeOnly ); + aExtendedMailSettings.SetSelectedWeekDays( KImumMboxDefaultAutoRetrievalDays ); + aExtendedMailSettings.SetSelectedTimeStart( 0 ); + aExtendedMailSettings.SetSelectedTimeStop( 0 ); + aExtendedMailSettings.SetInboxRefreshTime( KIMASAoInterval1Hour ); + aExtendedMailSettings.SetUpdateMode( EMailAoHeadersOnly ); + aExtendedMailSettings.SetMailDeletion( EIMASMailDeletionAlwaysAsk ); + TAOInfo emptyInfo = { EFalse, Time::NullTTime(), EFalse }; + aExtendedMailSettings.SetLastUpdateInfo( emptyInfo ); + aExtendedMailSettings.SetIsPredefined( KImumMboxDefaultIsPredefinedMailbox ); + + IMUM_OUT(); + return KErrNone; + } + +/****************************************************************************** + + PUBLIC: DELETING EXISTING ACCOUNT + +******************************************************************************/ + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::DeleteExtendedSettings() +// ---------------------------------------------------------------------------- +// +TInt CImumMboxSettingsCtrl::DeleteExtendedSettings( + const TIMAStorerParams& aParams ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::DeleteExtendedSettings, 0, KLogData ); + IMUM_IN(); + // Make sure the mtm is valid email mtm + TBool ok = iUtils->IsMailMtm( aParams.MtmId(), ETrue ); + TInt error = KErrNotSupported; + + // Choose the right way to Create the settings + if ( ok && aParams.AccountId() != KErrNone ) + { + TRAP( error, DeleteExtendedSettingsL( + aParams.AccountId(), aParams.MtmId() ) ); + } + else if ( ok && aParams.MailboxId() != KErrNone ) + { + TRAP( error, DeleteExtendedSettingsL( + aParams.MailboxId(), aParams.MtmId() ) ); + } + + IMUM_OUT(); + return error; + } + + +/****************************************************************************** + + PUBLIC: SAVING CURRENT ACCOUNT + +******************************************************************************/ + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::SaveSettings() +// ---------------------------------------------------------------------------- +// +TInt CImumMboxSettingsCtrl::SaveSettings( + const CImumMboxDataExtension& aExtendedMailSettings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::SaveSettings, 0, KLogData ); + IMUM_IN(); + TInt error = KErrNotReady; + + // Here it is good idea to make sure, that the settings are valid, so + // no corrupted data is going in. + if ( aExtendedMailSettings.IsSettingsValid() ) + { + TRAP( error, SaveSettingsL( aExtendedMailSettings ) ); + } + else + { + __ASSERT_DEBUG( EFalse, + User::Panic( KImumMtmUiPanic, KErrNotReady ) ); + } + + IMUM_OUT(); + return error; + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::SaveSettings() +// ---------------------------------------------------------------------------- +// +TInt CImumMboxSettingsCtrl::SaveSettings( + const TUint32 aAccountId, + const CImImap4Settings& aImap4Settings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::SaveSettings, 0, KLogData ); + IMUM_IN(); + + TRAPD( error, SaveSettingsL( aAccountId, aImap4Settings ) ); + + IMUM_OUT(); + return error; + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::SaveSettings() +// ---------------------------------------------------------------------------- +// +TInt CImumMboxSettingsCtrl::SaveSettings( + const TUint32 aAccountId, + const CImPop3Settings& aPop3Settings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::SaveSettings, 0, KLogData ); + IMUM_IN(); + + TRAPD( error, SaveSettingsL( aAccountId, aPop3Settings ) ); + + IMUM_OUT(); + return error; + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::SaveSettings() +// ---------------------------------------------------------------------------- +// +TInt CImumMboxSettingsCtrl::SaveSettings( + const TUint32 aAccountId, + const CImSmtpSettings& aSmtpSettings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::SaveSettings, 0, KLogData ); + IMUM_IN(); + + TRAPD( error, SaveSettingsL( aAccountId, aSmtpSettings ) ); + + IMUM_OUT(); + return error; + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::SaveSettings() +// ---------------------------------------------------------------------------- +// +TInt CImumMboxSettingsCtrl::SaveSettings( + const TMsvId aMailboxId, + const CImImap4Settings& aImap4Settings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::SaveSettings, 0, KLogData ); + IMUM_IN(); + + TRAPD( error, SaveSettingsL( aMailboxId, aImap4Settings ) ); + + IMUM_OUT(); + return error; + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::SaveSettings() +// ---------------------------------------------------------------------------- +// +TInt CImumMboxSettingsCtrl::SaveSettings( + const TMsvId aMailboxId, + const CImPop3Settings& aPop3Settings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::SaveSettings, 0, KLogData ); + IMUM_IN(); + + TRAPD( error, SaveSettingsL( aMailboxId, aPop3Settings ) ); + + IMUM_OUT(); + return error; + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::SaveSettings() +// ---------------------------------------------------------------------------- +// +TInt CImumMboxSettingsCtrl::SaveSettings( + const TMsvId aMailboxId, + const CImSmtpSettings& aSmtpSettings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::SaveSettings, 0, KLogData ); + IMUM_IN(); + + TRAPD( error, SaveSettingsL( aMailboxId, aSmtpSettings ) ); + + IMUM_OUT(); + return error; + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::SaveSettings() +// ---------------------------------------------------------------------------- +// +TInt CImumMboxSettingsCtrl::SaveSettings( + const TMsvEntry& aEntry, + CImBaseEmailSettings& aBaseSettings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::SaveSettings, 0, KLogData ); + IMUM_IN(); + + TRAPD( error, SaveSettingsL( aEntry, aBaseSettings ) ); + + IMUM_OUT(); + return error; + } + +/****************************************************************************** + + PUBLIC: LOADING EXISTING ACCOUNT + +******************************************************************************/ + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::LoadSettings() +// ---------------------------------------------------------------------------- +// +TInt CImumMboxSettingsCtrl::LoadSettings( + const TIMAStorerParams& aParams, + CImumMboxDataExtension& aExtendedMailSettings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::LoadSettings, 0, KLogData ); + IMUM3_IN( "aParams.iMtmId = 0x%x, aParams.iAccountId = 0x%x, aParams.iMailboxId = 0x%x", + aParams.MtmId(), aParams.AccountId(), aParams.MailboxId() ); + + // Make sure the mtm is valid email mtm + TBool ok = iUtils->IsMailMtm( aParams.MtmId(), ETrue ); + + // Choose the right way to Load the settings + if ( ok && aParams.AccountId() != KErrNone ) + { + TRAPD( error, LoadSettingsL( + aParams.AccountId(), aParams.MtmId(), aExtendedMailSettings ) ); + IMUM_OUT(); + return error; + } + else if ( ok && aParams.MailboxId() != KErrNone ) + { + TRAPD( error, LoadSettingsL( + aParams.MailboxId(), aParams.MtmId(), aExtendedMailSettings ) ); + IMUM_OUT(); + return error; + } + else + { + IMUM_OUT(); + return KErrNotSupported; + } + + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::LoadSettings() +// ---------------------------------------------------------------------------- +// +TInt CImumMboxSettingsCtrl::LoadSettings( + const TUint32 aAccountId, + CImImap4Settings& aImap4Settings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::LoadSettings, 0, KLogData ); + IMUM_IN(); + + TRAPD( error, LoadSettingsL( aAccountId, aImap4Settings ) ); + + IMUM_OUT(); + return error; + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::LoadSettings() +// ---------------------------------------------------------------------------- +// +TInt CImumMboxSettingsCtrl::LoadSettings( + const TUint32 aAccountId, + CImPop3Settings& aPop3Settings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::LoadSettings, 0, KLogData ); + IMUM_IN(); + + TRAPD( error, LoadSettingsL( aAccountId, aPop3Settings ) ); + + IMUM_OUT(); + return error; + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::LoadSettings() +// ---------------------------------------------------------------------------- +// +TInt CImumMboxSettingsCtrl::LoadSettings( + const TUint32 aAccountId, + CImSmtpSettings& aSmtpSettings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::LoadSettings, 0, KLogData ); + IMUM_IN(); + + TRAPD( error, LoadSettingsL( aAccountId, aSmtpSettings ) ); + + IMUM_OUT(); + return error; + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::LoadSettings() +// ---------------------------------------------------------------------------- +// +TInt CImumMboxSettingsCtrl::LoadSettings( + const TMsvId aMailboxId, + CImImap4Settings& aImap4Settings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::LoadSettings, 0, KLogData ); + IMUM_IN(); + + TRAPD( error, LoadSettingsL( aMailboxId, aImap4Settings ) ); + + IMUM_OUT(); + return error; + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::LoadSettings() +// ---------------------------------------------------------------------------- +// +TInt CImumMboxSettingsCtrl::LoadSettings( + const TMsvId aMailboxId, + CImPop3Settings& aPop3Settings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::LoadSettings, 0, KLogData ); + IMUM_IN(); + + TRAPD( error, LoadSettingsL( aMailboxId, aPop3Settings ) ); + + IMUM_OUT(); + return error; + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::LoadSettings() +// ---------------------------------------------------------------------------- +// +TInt CImumMboxSettingsCtrl::LoadSettings( + const TMsvId aMailboxId, + CImSmtpSettings& aSmtpSettings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::LoadSettings, 0, KLogData ); + IMUM_IN(); + + TRAPD( error, LoadSettingsL( aMailboxId, aSmtpSettings ) ); + + IMUM_OUT(); + return error; + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::LoadSettings() +// ---------------------------------------------------------------------------- +// +TInt CImumMboxSettingsCtrl::LoadSettings( + const TMsvEntry& aEntry, + CImBaseEmailSettings& aBaseSettings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::LoadSettings, 0, KLogData ); + IMUM_IN(); + + TRAPD( error, LoadSettingsL( aEntry, aBaseSettings ) ); + + IMUM_OUT(); + return error; + } +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::AccountId2ExtensionId() +// ---------------------------------------------------------------------------- +// +TUint32 CImumMboxSettingsCtrl::AccountId2ExtensionId( + const TUint32 aAccountId, + const TUid& aMtmId ) const + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::AccountId2ExtensionId, 0, KLogData ); + IMUM_IN(); + + IMUM_OUT(); + return IMASAccountControl::AccountIdToExtendedAccountId( + aAccountId, aMtmId ); + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::ExtensionId2AccountId() +// ---------------------------------------------------------------------------- +// +TUint32 CImumMboxSettingsCtrl::ExtensionId2AccountId( + const TUint32 aExtension, + const TUid& aMtmId ) const + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::ExtensionId2AccountId, 0, KLogData ); + IMUM_IN(); + + IMUM_OUT(); + return IMASAccountControl::ExtendedAccountIdToAccountId( + aExtension, aMtmId ); + } + +/****************************************************************************** + + PUBLIC: RESTORE DEFAULT DATA + +******************************************************************************/ + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::RestoreDefaultSettingsDataL() +// ---------------------------------------------------------------------------- +// +void CImumMboxSettingsCtrl::RestoreDefaultSettingsDataL( + CImumMboxDefaultData& aDefaultData ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::RestoreDefaultSettingsDataL, 0, KLogData ); + IMUM_IN(); + + // Make sure there is connection to repository + MsvEmailMtmUiUtils::CreateCenRepConnectionL( + iCenRepDefaultData, KCRUidImum ); + + // Prepare default data reading + iCenRepControl->SetActiveCentralRepository( *iCenRepDefaultData ); + iCenRepControl->SetActiveDefaultDataKey(); + + // Begin filling the value + TInt value = iCenRepControl->GetFromAccountL( + KImumDownloadBufferSizeOther ); + aDefaultData.SetAttr( + TImumInSettings::EKeyDownloadBufferGprs, value ); + + value = iCenRepControl->GetFromAccountL( + KImumDownloadBufferSizeWlan ); + aDefaultData.SetAttr( + TImumInSettings::EKeyDownloadBufferWlan, value ); + + IMUM_OUT(); + } + +/****************************************************************************** + + PRIVATE: CREATING NEW ACCOUNT + +******************************************************************************/ + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::CreateSettingsL() +// ---------------------------------------------------------------------------- +// +void CImumMboxSettingsCtrl::CreateSettingsL( + const CImumMboxDataExtension& aExtendedMailSettings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::CreateSettingsL, 0, KLogData ); + IMUM_IN(); + + // Make sure there is connection to repository + MsvEmailMtmUiUtils::CreateCenRepConnectionL( + iCenRepExtMail, KCRUidImumSettings ); + + // Prepare account control + iCenRepControl->SetActiveCentralRepository( *iCenRepExtMail ); + iCenRepControl->SetActiveBaseKey( aExtendedMailSettings.ExtensionId() ); + + // Create the settings + // Common Settings + CreateExtendedSettingsStatusFlagsL( aExtendedMailSettings ); + iCenRepControl->CreateToAccountL( EImaCommonSetMailboxId, + aExtendedMailSettings.MailboxId() ); + iCenRepControl->CreateToAccountL( EImaCommonSetAccountId, + static_cast( aExtendedMailSettings.AccountId() ) ); + iCenRepControl->CreateToAccountL( EImaCommonSetExtensionId, + static_cast( aExtendedMailSettings.ExtensionId() ) ); + iCenRepControl->CreateToAccountL( EImaCommonSetProtocol, + aExtendedMailSettings.Protocol().iUid ); + iCenRepControl->CreateToAccountL( EImaCommonSetEmailAddress, + *aExtendedMailSettings.EmailAddress() ); + + // Extended mailbox settings + iCenRepControl->CreateToAccountL( EImaExtSetEmailNotif, + static_cast( aExtendedMailSettings.EmailNotificationState() ) ); + iCenRepControl->CreateToAccountL( EImaExtSetIndicators, + static_cast( aExtendedMailSettings.NewMailIndicators() ) ); + iCenRepControl->CreateToAccountL( EImaExtSetHideMsgs, + static_cast( aExtendedMailSettings.HideMsgs() ) ); + iCenRepControl->CreateToAccountL( EImaExtSetOpenHtmlMail, + static_cast( aExtendedMailSettings.OpenHtmlMail() ) ); + iCenRepControl->CreateToAccountL( EImaExtSetMailDeletion, + static_cast( aExtendedMailSettings.MailDeletion() ) ); + iCenRepControl->CreateToAccountL( EImaExtIsPredefined, + static_cast( aExtendedMailSettings.IsPredefined() ) ); + + // Always Online Settings + iCenRepControl->CreateToAccountL( EImaAoVersion, + aExtendedMailSettings.Version() ); + iCenRepControl->CreateToAccountL( EImaAoOnlineState, + aExtendedMailSettings.AlwaysOnlineState() ); + iCenRepControl->CreateToAccountL( EImaAoWeekDays, + aExtendedMailSettings.SelectedWeekDays() ); + iCenRepControl->CreateToAccountL( EImaAoTimeStartH, EImaAoTimeStartL, + aExtendedMailSettings.SelectedTimeStart().Int64() ); + iCenRepControl->CreateToAccountL( EImaAoTimeStopH, EImaAoTimeStopL, + aExtendedMailSettings.SelectedTimeStop().Int64() ); + iCenRepControl->CreateToAccountL( EImaAoInboxRefreshTime, + aExtendedMailSettings.InboxRefreshTime() ); + iCenRepControl->CreateToAccountL( EImaAoUpdateMode, + aExtendedMailSettings.UpdateMode() ); + + CreateLastUpdateInfoL( aExtendedMailSettings.LastUpdateInfo() ); + + IMUM_OUT(); + } + +/****************************************************************************** + + PRIVATE: DELETING EXISTING ACCOUNT + +******************************************************************************/ + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::DeleteExtendedSettingsL() +// ---------------------------------------------------------------------------- +// +void CImumMboxSettingsCtrl::DeleteExtendedSettingsL( + const TMsvId aMailboxId, + const TUid& aMtmId ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::DeleteExtendedSettingsL, 0, KLogData ); + IMUM_IN(); + + // Get the correct accountId and continue opening the settings + TUint32 accountId = + IMASAccountControl::MailboxIdToAccountIdL( aMailboxId, aMtmId ); + DeleteExtendedSettingsL( accountId, aMtmId ); + IMUM_OUT(); + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::DeleteExtendedSettingsL() +// ---------------------------------------------------------------------------- +// +void CImumMboxSettingsCtrl::DeleteExtendedSettingsL( + const TUint32 aAccountId, + const TUid& aMtmId ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::DeleteExtendedSettingsL, 0, KLogData ); + IMUM_IN(); + + // Make sure there is connection to repository + MsvEmailMtmUiUtils::CreateCenRepConnectionL( + iCenRepExtMail, KCRUidImumSettings ); + + // Prepare account control + iCenRepControl->SetActiveCentralRepository( *iCenRepExtMail ); + iCenRepControl->SetActiveBaseKey( aAccountId, aMtmId ); + + // Create the settings + // Common Settings + iCenRepControl->DeleteFromAccountL( + EImaCommonSetStatusFlagsH, EImaCommonSetStatusFlagsL ); + iCenRepControl->DeleteFromAccountL( EImaCommonSetMailboxId ); + iCenRepControl->DeleteFromAccountL( EImaCommonSetAccountId ); + iCenRepControl->DeleteFromAccountL( EImaCommonSetExtensionId ); + iCenRepControl->DeleteFromAccountL( EImaCommonSetProtocol ); + iCenRepControl->DeleteFromAccountL( EImaCommonSetEmailAddress ); + + // Extended mailbox settings + iCenRepControl->DeleteFromAccountL( EImaExtSetEmailNotif ); + iCenRepControl->DeleteFromAccountL( EImaExtSetIndicators ); + iCenRepControl->DeleteFromAccountL( EImaExtSetHideMsgs ); + iCenRepControl->DeleteFromAccountL( EImaExtSetOpenHtmlMail ); + iCenRepControl->DeleteFromAccountL( EImaExtSetMailDeletion ); + iCenRepControl->DeleteFromAccountL( EImaExtIsPredefined ); + + // Always Online Settings + iCenRepControl->DeleteFromAccountL( EImaAoVersion ); + iCenRepControl->DeleteFromAccountL( EImaAoOnlineState ); + iCenRepControl->DeleteFromAccountL( EImaAoWeekDays ); + iCenRepControl->DeleteFromAccountL( EImaAoTimeStartH, EImaAoTimeStartL ); + iCenRepControl->DeleteFromAccountL( EImaAoTimeStopH, EImaAoTimeStopL ); + iCenRepControl->DeleteFromAccountL( EImaAoInboxRefreshTime ); + iCenRepControl->DeleteFromAccountL( EImaAoUpdateMode ); + DeleteLastUpdateInfo(); + + IMUM_OUT(); + } + +/****************************************************************************** + + PRIVATE: SAVING CURRENT ACCOUNT + +******************************************************************************/ + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::SaveSettingsL() +// ---------------------------------------------------------------------------- +// +void CImumMboxSettingsCtrl::SaveSettingsL( + const CImumMboxDataExtension& aExtendedMailSettings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::SaveSettingsL, 0, KLogData ); + IMUM_IN(); + + // Make sure there is connection to repository + MsvEmailMtmUiUtils::CreateCenRepConnectionL( + iCenRepExtMail, KCRUidImumSettings ); + + // Prepare account control + iCenRepControl->SetActiveCentralRepository( *iCenRepExtMail ); + iCenRepControl->SetActiveBaseKey( aExtendedMailSettings.ExtensionId() ); + + // Store the settings + // Common Settings + SaveExtendedSettingsStatusFlagsL( aExtendedMailSettings ); + iCenRepControl->SetToAccountL( EImaCommonSetMailboxId, + aExtendedMailSettings.MailboxId() ); + iCenRepControl->SetToAccountL( EImaCommonSetAccountId, + static_cast( aExtendedMailSettings.AccountId() ) ); + iCenRepControl->SetToAccountL( EImaCommonSetExtensionId, + static_cast( aExtendedMailSettings.ExtensionId() ) ); + iCenRepControl->SetToAccountL( EImaCommonSetProtocol, + aExtendedMailSettings.Protocol().iUid ); + iCenRepControl->SetToAccountL( EImaCommonSetEmailAddress, + *aExtendedMailSettings.EmailAddress() ); + + // Extended mailbox settings + iCenRepControl->SetToAccountL( EImaExtSetEmailNotif, + static_cast( aExtendedMailSettings.EmailNotificationState() ) ); + iCenRepControl->SetToAccountL( EImaExtSetIndicators, + static_cast( aExtendedMailSettings.NewMailIndicators() ) ); + iCenRepControl->SetToAccountL( EImaExtSetHideMsgs, + static_cast( aExtendedMailSettings.HideMsgs() ) ); + iCenRepControl->SetToAccountL( EImaExtSetOpenHtmlMail, + static_cast( aExtendedMailSettings.OpenHtmlMail() ) ); + iCenRepControl->SetToAccountL( EImaExtSetMailDeletion, + static_cast( aExtendedMailSettings.MailDeletion() ) ); + iCenRepControl->SetToAccountL( EImaExtIsPredefined, + static_cast( aExtendedMailSettings.IsPredefined() ) ); + + // Always Online Settings + iCenRepControl->SetToAccountL( EImaAoVersion, + aExtendedMailSettings.Version() ); + iCenRepControl->SetToAccountL( EImaAoOnlineState, + aExtendedMailSettings.AlwaysOnlineState() ); + iCenRepControl->SetToAccountL( EImaAoWeekDays, + aExtendedMailSettings.SelectedWeekDays() ); + iCenRepControl->SetToAccountL( EImaAoTimeStartH, EImaAoTimeStartL, + aExtendedMailSettings.SelectedTimeStart().Int64() ); + iCenRepControl->SetToAccountL( EImaAoTimeStopH, EImaAoTimeStopL, + aExtendedMailSettings.SelectedTimeStop().Int64() ); + iCenRepControl->SetToAccountL( EImaAoInboxRefreshTime, + aExtendedMailSettings.InboxRefreshTime() ); + iCenRepControl->SetToAccountL( EImaAoUpdateMode, + aExtendedMailSettings.UpdateMode() ); + + SaveLastUpdateInfo( aExtendedMailSettings.LastUpdateInfo() ); + + IMUM_OUT(); + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::SaveSettingsL() +// ---------------------------------------------------------------------------- +// +void CImumMboxSettingsCtrl::SaveSettingsL( + const TUint32 aAccountId, + const CImImap4Settings& aImap4Settings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::SaveSettingsL, 0, KLogData ); + IMUM_IN(); + + TImapAccount imapAccountId; + imapAccountId.iImapAccountId = aAccountId; + + AccountsL()->SaveImapSettingsL( imapAccountId, aImap4Settings ); + + IMUM_OUT(); + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::SaveSettingsL() +// ---------------------------------------------------------------------------- +// +void CImumMboxSettingsCtrl::SaveSettingsL( + const TUint32 aAccountId, + const CImPop3Settings& aPop3Settings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::SaveSettingsL, 0, KLogData ); + IMUM_IN(); + + TPopAccount popAccountId; + popAccountId.iPopAccountId = aAccountId; + + AccountsL()->SavePopSettingsL( popAccountId, aPop3Settings ); + + IMUM_OUT(); + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::SaveSettingsL() +// ---------------------------------------------------------------------------- +// +void CImumMboxSettingsCtrl::SaveSettingsL( + const TUint32 aAccountId, + const CImSmtpSettings& aSmtpSettings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::SaveSettingsL, 0, KLogData ); + IMUM_IN(); + + TSmtpAccount smtpAccountId; + smtpAccountId.iSmtpAccountId = aAccountId; + + AccountsL()->SaveSmtpSettingsL( smtpAccountId, aSmtpSettings ); + + IMUM_OUT(); + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::SaveSettingsL() +// ---------------------------------------------------------------------------- +// +void CImumMboxSettingsCtrl::SaveSettingsL( + const TMsvId aMailboxId, + const CImImap4Settings& aImap4Settings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::SaveSettingsL, 0, KLogData ); + IMUM_IN(); + + TImapAccount imapAccountId; + AccountsL()->GetImapAccountL( aMailboxId, imapAccountId ); + iAccounts->SaveImapSettingsL( imapAccountId, aImap4Settings ); + + IMUM_OUT(); + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::SaveSettingsL() +// ---------------------------------------------------------------------------- +// +void CImumMboxSettingsCtrl::SaveSettingsL( + const TMsvId aMailboxId, + const CImPop3Settings& aPop3Settings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::SaveSettingsL, 0, KLogData ); + IMUM_IN(); + + TPopAccount popAccountId; + AccountsL()->GetPopAccountL( aMailboxId, popAccountId ); + iAccounts->SavePopSettingsL( popAccountId, aPop3Settings ); + + IMUM_OUT(); + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::SaveSettingsL() +// ---------------------------------------------------------------------------- +// +void CImumMboxSettingsCtrl::SaveSettingsL( + const TMsvId aMailboxId, + const CImSmtpSettings& aSmtpSettings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::SaveSettingsL, 0, KLogData ); + IMUM_IN(); + + TSmtpAccount smtpAccountId; + AccountsL()->GetSmtpAccountL( aMailboxId, smtpAccountId ); + iAccounts->SaveSmtpSettingsL( smtpAccountId, aSmtpSettings ); + + IMUM_OUT(); + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::SaveSettingsL() +// ---------------------------------------------------------------------------- +// +void CImumMboxSettingsCtrl::SaveSettingsL( + const TMsvEntry& aEntry, + CImBaseEmailSettings& aBaseSettings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::SaveSettingsL, 0, KLogData ); + IMUM_IN(); + + // Save the correct settings based on the MTM uid + switch( aEntry.iMtm.iUid ) + { + // SMTP + case KSenduiMtmSmtpUidValue: + SaveSettingsL( aEntry.Id(), + *static_cast( &aBaseSettings ) ); + break; + + // POP3 + case KSenduiMtmPop3UidValue: + SaveSettingsL( aEntry.Id(), + *static_cast( &aBaseSettings ) ); + break; + + // IMAP4 + case KSenduiMtmImap4UidValue: + SaveSettingsL( aEntry.Id(), + *static_cast( &aBaseSettings ) ); + break; + + default: + User::Leave( KErrUnknown ); + break; + } + IMUM_OUT(); + } + +/****************************************************************************** + + PRIVATE: LOADING EXISTING ACCOUNT + +******************************************************************************/ + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::LoadSettings() +// ---------------------------------------------------------------------------- +// +void CImumMboxSettingsCtrl::LoadSettingsL( + const TUint32 aAccountId, + const TUid& aMtmId, + CImumMboxDataExtension& aExtendedMailSettings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::LoadSettingsL, 0, KLogData ); + IMUM_IN(); + + // Try to open the settings + TRAPD( error, OpenExtendedSettingsL( + TIMAStorerParams( aAccountId, aMtmId ), aExtendedMailSettings ) ); + + // It's possible to create the email settings without defining the + // extended settings. If that is the case, create the extended mailsettings + // for the mailbox. CMail will handle initialization of extended settings + // if it's installed. + if ( !iFFEmailVariation && error == KErrNotFound ) + { + TMsvId mailboxId = IMASAccountControl::AccountIdToMailboxId( + *AccountsL(), aAccountId, aMtmId ); + error = CreateSettings( + mailboxId, aAccountId, aMtmId, aExtendedMailSettings ); + //If AlwaysOnline or EmailNotification is switched on we need to activate it + if ( error == KErrNone && ( + EMailAoOff != aExtendedMailSettings.AlwaysOnlineState() || + EMailEmnOff != aExtendedMailSettings.EmailNotificationState() )) + { + MsvEmailMtmUiUtils::SendAOCommandL( EServerAPIEmailTurnOn, mailboxId ); + } + } + + User::LeaveIfError( error ); + IMUM_OUT(); + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::LoadSettings() +// ---------------------------------------------------------------------------- +// +void CImumMboxSettingsCtrl::LoadSettingsL( + const TMsvId aMailboxId, + const TUid& aMtmId, + CImumMboxDataExtension& aExtendedMailSettings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::LoadSettingsL, 0, KLogData ); + IMUM_IN(); + + // Get the account id and continue opening + TUint32 accountId = + IMASAccountControl::MailboxIdToAccountIdL( aMailboxId, aMtmId ); + LoadSettingsL( accountId, aMtmId, aExtendedMailSettings ); + IMUM_OUT(); + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::LoadSettingsL() +// ---------------------------------------------------------------------------- +// +void CImumMboxSettingsCtrl::LoadSettingsL( + const TUint32 aAccountId, + CImImap4Settings& aImap4Settings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::LoadSettingsL, 0, KLogData ); + IMUM_IN(); + + TImapAccount imapAccountId; + imapAccountId.iImapAccountId = aAccountId; + + AccountsL()->LoadImapSettingsL( imapAccountId, aImap4Settings ); + + IMUM_OUT(); + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::LoadSettingsL() +// ---------------------------------------------------------------------------- +// +void CImumMboxSettingsCtrl::LoadSettingsL( + const TUint32 aAccountId, + CImPop3Settings& aPop3Settings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::LoadSettingsL, 0, KLogData ); + IMUM_IN(); + + TPopAccount popAccountId; + popAccountId.iPopAccountId = aAccountId; + + AccountsL()->LoadPopSettingsL( popAccountId, aPop3Settings ); + + IMUM_OUT(); + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::LoadSettingsSmtpL() +// ---------------------------------------------------------------------------- +// +void CImumMboxSettingsCtrl::LoadSettingsL( + const TUint32 aAccountId, + CImSmtpSettings& aSmtpSettings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::LoadSettingsL, 0, KLogData ); + IMUM_IN(); + + TSmtpAccount smtpAccountId; + smtpAccountId.iSmtpAccountId = aAccountId; + + AccountsL()->LoadSmtpSettingsL( smtpAccountId, aSmtpSettings ); + + IMUM_OUT(); + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::LoadSettingsL() +// ---------------------------------------------------------------------------- +// +void CImumMboxSettingsCtrl::LoadSettingsL( + const TMsvId aServiceId, + CImImap4Settings& aImap4Settings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::LoadSettingsL, 0, KLogData ); + IMUM_IN(); + + TImapAccount imapAccountId; + AccountsL()->GetImapAccountL( aServiceId, imapAccountId ); + iAccounts->LoadImapSettingsL( imapAccountId, aImap4Settings ); + + IMUM_OUT(); + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::LoadSettingsL() +// ---------------------------------------------------------------------------- +// +void CImumMboxSettingsCtrl::LoadSettingsL( + const TMsvId aServiceId, + CImPop3Settings& aPop3Settings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::LoadSettingsL, 0, KLogData ); + IMUM_IN(); + + TPopAccount popAccountId; + AccountsL()->GetPopAccountL( aServiceId, popAccountId ); + iAccounts->LoadPopSettingsL( popAccountId, aPop3Settings ); + + IMUM_OUT(); + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::LoadSettingsL() +// ---------------------------------------------------------------------------- +// +void CImumMboxSettingsCtrl::LoadSettingsL( + const TMsvId aServiceId, + CImSmtpSettings& aSmtpSettings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::LoadSettingsL, 0, KLogData ); + IMUM_IN(); + + TSmtpAccount smtpAccountId; + AccountsL()->GetSmtpAccountL( aServiceId, smtpAccountId ); + iAccounts->LoadSmtpSettingsL( smtpAccountId, aSmtpSettings ); + + IMUM_OUT(); + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::LoadSettingsL() +// ---------------------------------------------------------------------------- +// +void CImumMboxSettingsCtrl::LoadSettingsL( + const TMsvEntry& aEntry, + CImBaseEmailSettings& aBaseSettings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::LoadSettingsL, 0, KLogData ); + IMUM_IN(); + + // Load the correct settings based on the MTM uid + switch( aEntry.iMtm.iUid ) + { + // SMTP + case KSenduiMtmSmtpUidValue: + LoadSettingsL( aEntry.Id(), + *static_cast( &aBaseSettings ) ); + break; + + // POP3 + case KSenduiMtmPop3UidValue: + LoadSettingsL( aEntry.Id(), + *static_cast( &aBaseSettings ) ); + break; + + // IMAP4 + case KSenduiMtmImap4UidValue: + LoadSettingsL( aEntry.Id(), + *static_cast( &aBaseSettings ) ); + break; + + default: + User::Leave( KErrUnknown ); + break; + } + IMUM_OUT(); + } + +/****************************************************************************** + + Special storers + +******************************************************************************/ + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::CreateLastUpdateInfoL() +// ---------------------------------------------------------------------------- +// +void CImumMboxSettingsCtrl::CreateLastUpdateInfoL( + const TAOInfo& aAoInfo ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::CreateLastUpdateInfoL, 0, KLogData ); + IMUM_IN(); + + // Create the last update info + iCenRepControl->CreateToAccountL( + EImaAoLastSuccessfulUpdateH, EImaAoLastSuccessfulUpdateL, + aAoInfo.iLastSuccessfulUpdate.Int64() ); + iCenRepControl->CreateToAccountL( + EImaAoLastUpdateFailed, aAoInfo.iLastUpdateFailed ); + iCenRepControl->CreateToAccountL( EImaAoUpdateSuccessfulWithCurSettings, + aAoInfo.iUpdateSuccessfulWithCurSettings ); + IMUM_OUT(); + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::DeleteLastUpdateInfo() +// ---------------------------------------------------------------------------- +// +TInt CImumMboxSettingsCtrl::DeleteLastUpdateInfo() + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::DeleteLastUpdateInfo, 0, KLogData ); + IMUM_IN(); + + // Save the last update info + + TRAPD( error, + iCenRepControl->DeleteFromAccountL( + EImaAoLastSuccessfulUpdateH, EImaAoLastSuccessfulUpdateL ); + iCenRepControl->DeleteFromAccountL( EImaAoLastUpdateFailed ); + iCenRepControl->DeleteFromAccountL( + EImaAoUpdateSuccessfulWithCurSettings ); ); + + IMUM_OUT(); + return error; + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::SaveLastUpdateInfo() +// ---------------------------------------------------------------------------- +// +TInt CImumMboxSettingsCtrl::SaveLastUpdateInfo( + const TAOInfo& aAoInfo ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::SaveLastUpdateInfo, 0, KLogData ); + IMUM_IN(); + + // Save the last update info and ignore any error. + TRAPD( error, + iCenRepControl->SetToAccountL( + EImaAoLastSuccessfulUpdateH, EImaAoLastSuccessfulUpdateL, + aAoInfo.iLastSuccessfulUpdate.Int64() ); + iCenRepControl->SetToAccountL( + EImaAoLastUpdateFailed, aAoInfo.iLastUpdateFailed ); + iCenRepControl->SetToAccountL( EImaAoUpdateSuccessfulWithCurSettings, + aAoInfo.iUpdateSuccessfulWithCurSettings ); ); + + + IMUM_OUT(); + return error; + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::LoadLastUpdateInfo() +// ---------------------------------------------------------------------------- +// +TAOInfo CImumMboxSettingsCtrl::LoadLastUpdateInfo() + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::LoadLastUpdateInfo, 0, KLogData ); + IMUM_IN(); + + TAOInfo aoInfo; + + // Failing to load the info can be ignored + TRAP_IGNORE( + // Load the last update info + aoInfo.iLastSuccessfulUpdate = iCenRepControl->GetFromAccountL( + EImaAoLastSuccessfulUpdateH, EImaAoLastSuccessfulUpdateL ); + aoInfo.iLastUpdateFailed = iCenRepControl->GetFromAccountL( + EImaAoLastUpdateFailed ); + aoInfo.iUpdateSuccessfulWithCurSettings = iCenRepControl->GetFromAccountL( + EImaAoUpdateSuccessfulWithCurSettings ); ); + + IMUM_OUT(); + return aoInfo; + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::OpenExtendedSettingsL() +// ---------------------------------------------------------------------------- +// +void CImumMboxSettingsCtrl::OpenExtendedSettingsL( + const TIMAStorerParams& aParams, + CImumMboxDataExtension& aExtendedMailSettings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::OpenExtendedSettingsL, 0, KLogData ); + IMUM3_IN( "aParams.iMtmId = 0x%x, aParams.iAccountId = 0x%x, aParams.iMailboxId = 0x%x", + aParams.MtmId(), aParams.AccountId(), aParams.MailboxId() ); + + // Make sure there is connection to repository + MsvEmailMtmUiUtils::CreateCenRepConnectionL( + iCenRepExtMail, KCRUidImumSettings ); + + // Prepare account control + iCenRepControl->SetActiveCentralRepository( *iCenRepExtMail ); + iCenRepControl->SetActiveBaseKey( aParams.AccountId(), aParams.MtmId() ); + + // Load the settings + // Common Settings + LoadExtendedSettingsStatusFlagsL( aExtendedMailSettings ); + TInt value = iCenRepControl->GetFromAccountL( EImaCommonSetMailboxId ); + aExtendedMailSettings.SetMailboxId( static_cast( value ) ); + value = iCenRepControl->GetFromAccountL( EImaCommonSetAccountId ); + aExtendedMailSettings.SetAccountId( value ); + value = iCenRepControl->GetFromAccountL( EImaCommonSetExtensionId ); + aExtendedMailSettings.SetExtensionId( value ); + value = iCenRepControl->GetFromAccountL( EImaCommonSetProtocol ); + aExtendedMailSettings.SetProtocol( TUid::Uid( value ) ); + TMuiuSettingsText text; + iCenRepControl->GetTextFromAccountL( text, EImaCommonSetEmailAddress ); + aExtendedMailSettings.SetEmailAddress( text ); + + // Common settings are now loaded. If the following settings are found to be + // missing, they are populated with the default values during the load + // process. + PopulateDefaultExtSettings( aExtendedMailSettings ); + + // Extended mailbox settings + // + value = iCenRepControl->GetFromAccountOrCreateL( + EImaExtSetEmailNotif, aExtendedMailSettings.EmailNotificationState() ); + aExtendedMailSettings.SetEmailNotificationState( + static_cast( value ) ); + + TBool result = iCenRepControl->GetFromAccountOrCreateL( + EImaExtSetIndicators, aExtendedMailSettings.NewMailIndicators() ); + aExtendedMailSettings.SetNewMailIndicators( result ); + + result = iCenRepControl->GetFromAccountOrCreateL( + EImaExtSetHideMsgs, aExtendedMailSettings.HideMsgs() ); + aExtendedMailSettings.SetHideMsgs( result ); + + value = iCenRepControl->GetFromAccountOrCreateL( + EImaExtSetOpenHtmlMail, aExtendedMailSettings.OpenHtmlMail() ); + aExtendedMailSettings.SetOpenHtmlMail( value ); + + value = iCenRepControl->GetFromAccountOrCreateL( + EImaExtSetMailDeletion, aExtendedMailSettings.MailDeletion() ); + aExtendedMailSettings.SetMailDeletion( + static_cast( value ) ); + + result = iCenRepControl->GetFromAccountOrCreateL( + EImaExtIsPredefined, aExtendedMailSettings.IsPredefined() ); + aExtendedMailSettings.SetIsPredefined( result ); + + // Always Online Settings + // + value = iCenRepControl->GetFromAccountOrCreateL( + EImaAoOnlineState, aExtendedMailSettings.AlwaysOnlineState() ); + aExtendedMailSettings.SetAlwaysOnlineState( + static_cast( value ) ); + + value = iCenRepControl->GetFromAccountOrCreateL( + EImaAoWeekDays, aExtendedMailSettings.SelectedWeekDays() ); + aExtendedMailSettings.SetSelectedWeekDays( value ); + + TInt64 value64 = iCenRepControl->GetFromAccountOrCreateL( + EImaAoTimeStartH, EImaAoTimeStartL, + aExtendedMailSettings.SelectedTimeStart().Int64() ); + aExtendedMailSettings.SetSelectedTimeStart( value64 ); + + value64 = iCenRepControl->GetFromAccountOrCreateL( + EImaAoTimeStopH, EImaAoTimeStopL, + aExtendedMailSettings.SelectedTimeStop().Int64() ); + aExtendedMailSettings.SetSelectedTimeStop( value64 ); + + value = iCenRepControl->GetFromAccountOrCreateL( + EImaAoInboxRefreshTime, aExtendedMailSettings.InboxRefreshTime() ); + aExtendedMailSettings.SetInboxRefreshTime( value ); + + value = iCenRepControl->GetFromAccountOrCreateL( + EImaAoUpdateMode, aExtendedMailSettings.UpdateMode() ); + aExtendedMailSettings.SetUpdateMode( + static_cast( value ) ); + + aExtendedMailSettings.SetLastUpdateInfo( LoadLastUpdateInfo() ); + + IMUM_OUT(); + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::AccountsL() +// ---------------------------------------------------------------------------- +// +CEmailAccounts* CImumMboxSettingsCtrl::AccountsL() + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::AccountsL, 0, KLogData ); + IMUM_IN(); + + if ( !iAccounts ) + { + iAccounts = CEmailAccounts::NewL(); + } + + IMUM_OUT(); + return iAccounts; + } + + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::LoadExtendedSettingsStatusFlagsL() +// ---------------------------------------------------------------------------- +// +void CImumMboxSettingsCtrl::LoadExtendedSettingsStatusFlagsL( + CImumMboxDataExtension& aExtendedSettings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::LoadExtendedSettingsStatusFlagsL, 0, KLogData ); + IMUM_IN(); + + TMuiuFlags flags; + flags = iCenRepControl->GetFromAccountL( + EImaCommonSetStatusFlagsH, EImaCommonSetStatusFlagsL ); + aExtendedSettings.SetStatusFlags( flags ); + IMUM_OUT(); + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::SaveExtendedSettingsStatusFlagsL() +// ---------------------------------------------------------------------------- +// +void CImumMboxSettingsCtrl::SaveExtendedSettingsStatusFlagsL( + const CImumMboxDataExtension& aExtendedSettings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::SaveExtendedSettingsStatusFlagsL, 0, KLogData ); + IMUM_IN(); + + // Get the flags in correct order from flag class and store to settings + TInt64 flags = 0; + const TMuiuFlags muiuFlags = aExtendedSettings.StatusFlags(); + + for ( TInt flag = KIMASLastFlag; --flag >= 0; ) + { + flags |= muiuFlags.Flag( flag ) << flag; + } + + iCenRepControl->SetToAccountL( EImaCommonSetStatusFlagsH, + EImaCommonSetStatusFlagsL, flags ); + IMUM_OUT(); + } + +// ---------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::CreateExtendedSettingsStatusFlagsL() +// ---------------------------------------------------------------------------- +// +void CImumMboxSettingsCtrl::CreateExtendedSettingsStatusFlagsL( + const CImumMboxDataExtension& aExtendedSettings ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::CreateExtendedSettingsStatusFlagsL, 0, KLogData ); + IMUM_IN(); + + // Get the flags in correct order from flag class and store to settings + TInt64 flags = 0; + const TMuiuFlags muiuFlags = aExtendedSettings.StatusFlags(); + + for ( TInt flag = KIMASLastFlag; --flag >= 0; ) + { + flags |= muiuFlags.Flag( flag ) << flag; + } + + iCenRepControl->CreateToAccountL( EImaCommonSetStatusFlagsH, + EImaCommonSetStatusFlagsL, flags ); + IMUM_OUT(); + } + +// --------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::LoadAlwaysOnlineSettingsL() +// --------------------------------------------------------------------------- +// +void CImumMboxSettingsCtrl::LoadAlwaysOnlineSettingsL( + const TUint32 aAccountId, + const TUid& aMtmId, + TInt64& aDays, + TInt64& aStartTime, + TInt64& aStopTime, + TInt& aActive ) + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::LoadAlwaysOnlineSettingsL, 0, KLogData ); + IMUM_IN(); + + // Always Online Settings + + // Make sure there is connection to repository + MsvEmailMtmUiUtils::CreateCenRepConnectionL( + iCenRepExtMail, KCRUidImumSettings ); + + // Prepare account control + iCenRepControl->SetActiveCentralRepository( *iCenRepExtMail ); + iCenRepControl->SetActiveBaseKey( aAccountId, aMtmId ); + + aActive = iCenRepControl->GetFromAccountL( EImaAoOnlineState ); + aDays = iCenRepControl->GetFromAccountL( EImaAoWeekDays ); + aStartTime = iCenRepControl->GetFromAccountL( + EImaAoTimeStartH, EImaAoTimeStartL ); + aStopTime = iCenRepControl->GetFromAccountL( + EImaAoTimeStopH, EImaAoTimeStopL ); + IMUM_OUT(); + } + +// --------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::CheckMailboxNameImap() +// --------------------------------------------------------------------------- +// +TIMDErrors CImumMboxSettingsCtrl::CheckMailboxNameImap( + TMsvEntry& aMailboxEntry ) const + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::CheckMailboxNameImap, 0, KLogData ); + IMUM_IN(); + + //Mailboxname is located in the iDetails variable and can't be over 30 + //This method checks the length of mailboxname, if it is over 30 + //we cut off the mailboxname + TIMDErrors result = EIMDNoError; + if( aMailboxEntry.iDetails.Length() > KIMASMaxMailboxNameLength ) + { + TRAPD( error, FixMailboxNameImapL( aMailboxEntry ) ); + if( error ) + { + // all errors cause account failure + result = EIMDImap4AccountFailure; + } + } + + IMUM_OUT(); + return result; + } + +// --------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::CheckMailboxNamePop() +// --------------------------------------------------------------------------- +// +TIMDErrors CImumMboxSettingsCtrl::CheckMailboxNamePop( + TMsvEntry& aMailboxEntry ) const + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::CheckMailboxNamePop, 0, KLogData ); + IMUM_IN(); + + //Mailboxname is located in the iDetails variable and can't be over 30 + //This method checks the length of mailboxname, if it is over 30 + //we cut off the mailboxname + TIMDErrors result = EIMDNoError; + if( aMailboxEntry.iDetails.Length() > KIMASMaxMailboxNameLength ) + { + TRAPD( error, FixMailboxNamePopL( aMailboxEntry )); + if( error ) + { + // all errors cause account failure + result = EIMDPop3AccountFailure; + } + } + IMUM_OUT(); + return result; + } + +// --------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::CheckMailboxNameSmtp() +// --------------------------------------------------------------------------- +// +TIMDErrors CImumMboxSettingsCtrl::CheckMailboxNameSmtp( + TMsvEntry& aMailboxEntry ) const + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::CheckMailboxNameSmtp, 0, KLogData ); + IMUM_IN(); + + //Mailboxname is located in the iDetails variable and can't be over 30 + //This method checks the length of mailboxname, if it is over 30 + //we cut off the mailboxname + TIMDErrors result = EIMDNoError; + if ( aMailboxEntry.iDetails.Length() > KIMASMaxMailboxNameLength ) + { + TRAPD( error, FixMailboxNameSmtpL( aMailboxEntry ) ) + if( error ) + { + // all errors cause account failure + result = EIMDSmtpAccountFailure; + } + } + + IMUM_OUT(); + return result; + } + +// --------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::SetLastUpdateInfoL() +// --------------------------------------------------------------------------- +// +void CImumMboxSettingsCtrl::SetLastUpdateInfoL( TUint32 aAccountId, + const TUid& aMtmId, TBool aSuccess, const TTime& aTime ) + { + // This function is performance optimization as settings are + // not converted to CImumInSettingsData format. + IMUM_CONTEXT( CImumMboxSettingsCtrl::SetLastUpdateInfoL, 0, KLogData ); + + // Make sure there is connection to repository + MsvEmailMtmUiUtils::CreateCenRepConnectionL( + iCenRepExtMail, KCRUidImumSettings ); + + // Prepare account control + iCenRepControl->SetActiveCentralRepository( *iCenRepExtMail ); + iCenRepControl->SetActiveBaseKey( aAccountId, aMtmId ); + + TAOInfo taoInfo; + taoInfo.iLastUpdateFailed = aSuccess; + taoInfo.iLastSuccessfulUpdate = aTime; + taoInfo.iUpdateSuccessfulWithCurSettings = aSuccess; + SaveLastUpdateInfo( taoInfo ); + + IMUM_OUT(); + } + +// --------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::FixMailboxNameSmtpL() +// --------------------------------------------------------------------------- +// +void CImumMboxSettingsCtrl::FixMailboxNameSmtpL( + TMsvEntry& aMailboxEntry ) const + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::FixMailboxNameStmpL, 0, KLogData ); + + // get settings + TSmtpAccount smtpAccount; + iMailboxApi.EmailAccountsL().GetSmtpAccountL( + aMailboxEntry.Id(), smtpAccount ); + CImSmtpSettings *smtpSet = new (ELeave) CImSmtpSettings; + CleanupStack::PushL( smtpSet ); + iMailboxApi.EmailAccountsL().LoadSmtpSettingsL( smtpAccount, *smtpSet ); + + // shorten mailbox name + TPtrC16 ptrSmtp = smtpAccount.iSmtpAccountName.Left( + KIMASMaxMailboxNameLength ); + smtpAccount.iSmtpAccountName.Copy( ptrSmtp ); + + // save settings + iMailboxApi.EmailAccountsL().SaveSmtpSettingsL( smtpAccount, *smtpSet ); + CleanupStack::PopAndDestroy( smtpSet ); + + IMUM_OUT(); + } + +// --------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::FixMailboxNameImapL() +// --------------------------------------------------------------------------- +// +void CImumMboxSettingsCtrl::FixMailboxNameImapL( + TMsvEntry& aMailboxEntry ) const + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::FixMailboxNameImapL, 0, KLogData ); + + // get settings + TImapAccount imapAccount; + iMailboxApi.EmailAccountsL().GetImapAccountL( + aMailboxEntry.Id(), imapAccount ); + CImImap4Settings *imap4Set = new (ELeave) CImImap4Settings; + CleanupStack::PushL( imap4Set ); + iMailboxApi.EmailAccountsL().LoadImapSettingsL( imapAccount, *imap4Set ); + + // shorten mailbox name + TPtrC16 ptrImap = imapAccount.iImapAccountName.Left( + KIMASMaxMailboxNameLength); + imapAccount.iImapAccountName.Copy( ptrImap ); + + // store changes + iMailboxApi.EmailAccountsL().SaveImapSettingsL( imapAccount, *imap4Set ); + CleanupStack::PopAndDestroy(imap4Set); + + IMUM_OUT(); + } + +// --------------------------------------------------------------------------- +// CImumMboxSettingsCtrl::FixMailboxNamePopL() +// --------------------------------------------------------------------------- +// +void CImumMboxSettingsCtrl::FixMailboxNamePopL( + TMsvEntry& aMailboxEntry ) const + { + IMUM_CONTEXT( CImumMboxSettingsCtrl::FixMailboxNamePopL, 0, KLogData ); + + // get settings + TPopAccount popAccount; + iMailboxApi.EmailAccountsL().GetPopAccountL( + aMailboxEntry.Id(), popAccount ); + CImPop3Settings *popSet = new (ELeave) CImPop3Settings; + CleanupStack::PushL( popSet ); + iMailboxApi.EmailAccountsL().LoadPopSettingsL( popAccount, *popSet ); + + // shorten mailbox name + TPtrC16 ptrPop = popAccount.iPopAccountName.Left( + KIMASMaxMailboxNameLength); + popAccount.iPopAccountName.Copy( ptrPop ); + + // store changes + iMailboxApi.EmailAccountsL().SavePopSettingsL( popAccount, *popSet ); + CleanupStack::PopAndDestroy( popSet ); + + IMUM_OUT(); + } + +// End of File +