diff -r 000000000000 -r 8466d47a6819 ipsservices/ipssossettings/src/ipssetdatastorer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ipsservices/ipssossettings/src/ipssetdatastorer.cpp Thu Dec 17 08:39:21 2009 +0200 @@ -0,0 +1,1035 @@ +/* +* Copyright (c) 2007 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: This file implements classes TIpsSetDataStorerParams, CIpsSetDataStorer. +* +*/ + + + +#include "emailtrace.h" +#include // CRepository +#include +#include +#include +#include +#include + +#include "ipssetutilsconsts.hrh" +#include "ipssetdatastorer.h" +#include "ipssetdataextension.h" +#include "ipssetdatactrlcenrep.h" +#include "ipssetutils.h" +#include "ipssetutilsconsts.h" +#include "ipssetdatactrlaccount.h" + +#include "ipsplgcommon.h" + +#ifdef _DEBUG +_LIT( KIpsSetDataStorer, "settings - storer"); +_LIT( KIpsSetDataCenRepKeyNotFound, "IpsSettings - cenrep key not found"); +#endif + +const TUint KIpsSetStorerAtChar = '@'; + +// ============================ TIpsSetDataStorerParams ======================= + +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- +// +TIpsSetDataStorerParams::TIpsSetDataStorerParams( + const TUint32& aAccountId, + const TUid& aMtmId ) + : + iAccountId( aAccountId ), + iMtmId( aMtmId ) + { + FUNC_LOG; + } + +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- +// +TUint32 TIpsSetDataStorerParams::AccountId() const + { + FUNC_LOG; + return iAccountId; + } + +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- +// +TUid TIpsSetDataStorerParams::MtmId() const + { + FUNC_LOG; + return iMtmId; + } + +// ============================ CIpsSetDataStorer ============================= + +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- +CIpsSetDataStorer::CIpsSetDataStorer() + : + iCenRepSmtp( NULL ), + iCenRepExtMail( NULL ), + iCenRepAlwaysOnline( NULL ), + iCenRepDefaultData( NULL ), + iAccounts( NULL ), + iCenRepControl( NULL ) + { + FUNC_LOG; + } + +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- +// +void CIpsSetDataStorer::ConstructL() + { + FUNC_LOG; + iCenRepControl = CIpsSetDataCtrlCenrep::NewL(); + iCenRepExtMail = CRepository::NewL( KCRUidExtendedSettingsUid ); + } + +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- +// +CIpsSetDataStorer::~CIpsSetDataStorer() + { + FUNC_LOG; + delete iCenRepSmtp; + delete iCenRepExtMail; + delete iCenRepAlwaysOnline; + delete iCenRepDefaultData; + delete iAccounts; + delete iCenRepControl; + } + +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- +// +CIpsSetDataStorer* CIpsSetDataStorer::NewL() + { + FUNC_LOG; + CIpsSetDataStorer* self = NewLC(); + CleanupStack::Pop( self ); + + return self; + } + +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- +// +CIpsSetDataStorer* CIpsSetDataStorer::NewLC() + { + FUNC_LOG; + CIpsSetDataStorer* self = + new ( ELeave ) CIpsSetDataStorer(); + CleanupStack::PushL( self ); + self->ConstructL(); + + return self; + } + +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- +// +TInt CIpsSetDataStorer::CreateExtendedSettings( + const TMsvId aMailboxId, + const TUint32 aAccountId, + const TUid& aProtocol, + CIpsSetDataExtension& aExtendedMailSettings, + const TBool /*aPopulateDefaults*/ ) + { + FUNC_LOG; + // Initialize the settings + aExtendedMailSettings.SetMailboxId( aMailboxId ); + aExtendedMailSettings.SetAccountId( aAccountId ); + aExtendedMailSettings.SetProtocol( aProtocol ); + aExtendedMailSettings.SetExtensionId( + IpsSetDataCtrlAccount::AccountIdToExtendedAccountId( + aAccountId, aProtocol ) ); + + TInt error = KErrNone; + + // If populating has not failed, continue with creating the settings + if ( error == KErrNone ) + { + // Create the settings + TRAP( error, CreateExtendedSettingsL( aExtendedMailSettings ) ); + + if ( error != KErrNone ) + { + __ASSERT_DEBUG(EFalse, User::Panic( + KIpsSetDataStorer , KErrNotFound ) ); + } + + } + + return error; + } + +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- +// +TInt CIpsSetDataStorer::DeleteExtendedSettingsL( + const TMsvEntry& aMailbox ) + { + FUNC_LOG; + TMsvId accountId; + + if ( aMailbox.iMtm == KSenduiMtmPop3Uid ) + { + TPopAccount popAccount; + AccountsL()->GetPopAccountL( aMailbox.iServiceId, popAccount ); + accountId = popAccount.iPopAccountId; + } + else + { + TImapAccount imapAccount; + AccountsL()->GetImapAccountL( aMailbox.iServiceId, imapAccount ); + accountId = imapAccount.iImapAccountId; + } + + TInt error = DeleteExtendedSettingsL( + accountId, aMailbox.iMtm ); + + return error; + } + +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- +// +TInt CIpsSetDataStorer::SaveExtendedSettings( + const CIpsSetDataExtension& aExtendedMailSettings ) + { + FUNC_LOG; + // Here it is good idea to make sure, that the settings are valid, so + // no corrupted data is going in. + if ( aExtendedMailSettings.IsSettingsValid() ) + { + TRAPD( error, SaveExtendedSettingsL( aExtendedMailSettings ) ); + + if ( error != KErrNone ) + { + __ASSERT_DEBUG(EFalse, User::Panic( + KIpsSetDataCenRepKeyNotFound , KErrNotFound ) ); + } + + return error; + } + else + { + return KErrNotReady; + } + } + +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- +// +TInt CIpsSetDataStorer::SaveImap4Settings( + const TUint32 aAccountId, + const CImImap4Settings& aImap4Settings ) + { + FUNC_LOG; + TImapAccount imapAccountId; + imapAccountId.iImapAccountId = aAccountId; + + TRAPD( error, + AccountsL()->SaveImapSettingsL( imapAccountId, aImap4Settings ) ); + + if ( error != KErrNone ) + { + __ASSERT_DEBUG(EFalse, User::Panic( + KIpsSetDataCenRepKeyNotFound , KErrNotFound ) ); + } + + return error; + } + +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- +// +TInt CIpsSetDataStorer::SavePop3Settings( + const TUint32 aAccountId, + const CImPop3Settings& aPop3Settings ) + { + FUNC_LOG; + TPopAccount popAccountId; + popAccountId.iPopAccountId = aAccountId; + + TRAPD( error, + AccountsL()->SavePopSettingsL( popAccountId, aPop3Settings ) ); + + if ( error != KErrNone ) + { + __ASSERT_DEBUG(EFalse, User::Panic( + KIpsSetDataCenRepKeyNotFound , KErrNotFound ) ); + } + + return error; + } + +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- +// +TInt CIpsSetDataStorer::SaveSmtpSettings( + const TUint32 aAccountId, + const CImSmtpSettings& aSmtpSettings ) + { + FUNC_LOG; + TSmtpAccount smtpAccountId; + smtpAccountId.iSmtpAccountId = aAccountId; + + TRAPD( error, + AccountsL()->SaveSmtpSettingsL( smtpAccountId, aSmtpSettings ) ); + + if ( error != KErrNone ) + { + __ASSERT_DEBUG(EFalse, User::Panic( + KIpsSetDataCenRepKeyNotFound , KErrNotFound ) ); + } + + return error; + } + +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- +// +TInt CIpsSetDataStorer::LoadExtendedSettings( + const TIpsSetDataStorerParams& aParams, + CIpsSetDataExtension& aExtendedMailSettings ) + { + FUNC_LOG; + // Make sure the mtm is valid email mtm + TBool ok = IpsSetUtils::IsMailMtm( aParams.MtmId() ); + + // Choose the right way to Load the settings + if ( ok && aParams.AccountId() != KErrNone ) + { + TRAPD( error, LoadExtendedSettingsL( + aParams.AccountId(), aParams.MtmId(), aExtendedMailSettings ) ); + + if ( error != KErrNone ) + { + // This happens in case when extended settings are not created. + // If mailbox is created via "creator" or there was been failure + // in mailbox creation... + //__ASSERT_DEBUG(EFalse, User::Panic( + // KIpsSetDataCenRepKeyNotFound , KErrNotFound ) ); + } + + return error; + } + else + { + return KErrNotSupported; + } + } + +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- +// +TInt CIpsSetDataStorer::LoadImap4Settings( + const TUint32 aAccountId, + CImImap4Settings& aImap4Settings ) + { + FUNC_LOG; + TImapAccount imapAccountId; + imapAccountId.iImapAccountId = aAccountId; + + TRAPD( error, + AccountsL()->LoadImapSettingsL( imapAccountId, aImap4Settings ) ); + + if ( error != KErrNone ) + { + __ASSERT_DEBUG(EFalse, User::Panic( + KIpsSetDataCenRepKeyNotFound , KErrNotFound ) ); + } + + + return error; + } + +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- +// +TInt CIpsSetDataStorer::LoadPop3Settings( + const TUint32 aAccountId, + CImPop3Settings& aPop3Settings ) + { + FUNC_LOG; + TPopAccount popAccountId; + popAccountId.iPopAccountId = aAccountId; + + TRAPD( error, + AccountsL()->LoadPopSettingsL( popAccountId, aPop3Settings ) ); + + if ( error != KErrNone ) + { + __ASSERT_DEBUG(EFalse, User::Panic( + KIpsSetDataCenRepKeyNotFound , KErrNotFound ) ); + } + + return error; + } + +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- +// +TInt CIpsSetDataStorer::LoadSmtpSettings( + const TUint32 aAccountId, + CImSmtpSettings& aSmtpSettings ) + { + FUNC_LOG; + + TSmtpAccount smtpAccountId; + smtpAccountId.iSmtpAccountId = aAccountId; + + TRAPD( error, + AccountsL()->LoadSmtpSettingsL( smtpAccountId, aSmtpSettings ) ); + + if ( error != KErrNone ) + { + __ASSERT_DEBUG(EFalse, User::Panic( + KIpsSetDataCenRepKeyNotFound , KErrNotFound ) ); + } + + return error; + } + +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- +// +void CIpsSetDataStorer::CreateExtendedSettingsL( + const CIpsSetDataExtension& aExtendedMailSettings ) + { + FUNC_LOG; + // Prepare account control + iCenRepControl->SetActiveCentralRepository( *iCenRepExtMail ); + iCenRepControl->SetActiveBaseKey( aExtendedMailSettings.ExtensionId() ); + + iCenRepControl->CreateToAccountL( EIpsSetDataCommonSetStatusFlagsH, + EIpsSetDataCommonSetStatusFlagsL, + aExtendedMailSettings.StatusFlags() ); + + iCenRepControl->CreateToAccountL( EIpsSetDataCommonSetMailboxId, + aExtendedMailSettings.MailboxId() ); + iCenRepControl->CreateToAccountL( EIpsSetDataCommonSetAccountId, + static_cast( aExtendedMailSettings.AccountId() ) ); + iCenRepControl->CreateToAccountL( EIpsSetDataCommonSetExtensionId, + static_cast( aExtendedMailSettings.ExtensionId() ) ); + iCenRepControl->CreateToAccountL( EIpsSetDataCommonSetProtocol, + aExtendedMailSettings.Protocol().iUid ); + iCenRepControl->CreateToAccountL( EIpsSetDataCommonSetEmailAddress, + aExtendedMailSettings.EmailAddress() ); + + // Extended mailbox settings + iCenRepControl->CreateToAccountL( EIpsSetDataExtSetEmailNotif, + static_cast( aExtendedMailSettings.EmailNotificationState() ) ); + iCenRepControl->CreateToAccountL( EIpsSetDataExtSetIndicators, + static_cast( aExtendedMailSettings.NewMailIndicators() ) ); + iCenRepControl->CreateToAccountL( EIpsSetDataExtSetHideMsgs, + static_cast( aExtendedMailSettings.HideMsgs() ) ); + iCenRepControl->CreateToAccountL( EIpsSetDataExtSetOpenHtmlMail, + static_cast( aExtendedMailSettings.OpenHtmlMail() ) ); + + // Always Online Settings + iCenRepControl->CreateToAccountL( EIpsSetDataAoVersion, + static_cast( aExtendedMailSettings.Version() ) ); + iCenRepControl->CreateToAccountL( EIpsSetDataAoOnlineState, + aExtendedMailSettings.AlwaysOnlineState() ); + iCenRepControl->CreateToAccountL( EIpsSetDataAoWeekDays, + aExtendedMailSettings.SelectedWeekDays() ); + iCenRepControl->CreateToAccountL( EIpsSetDataAoTimeStartH, EIpsSetDataAoTimeStartL, + aExtendedMailSettings.SelectedTimeStart().Int64() ); + iCenRepControl->CreateToAccountL( EIpsSetDataAoTimeStopH, EIpsSetDataAoTimeStopL, + aExtendedMailSettings.SelectedTimeStop().Int64() ); + iCenRepControl->CreateToAccountL( EIpsSetDataAoInboxRefreshTime, + aExtendedMailSettings.InboxRefreshTime() ); + iCenRepControl->CreateToAccountL( EIpsSetDataAoUpdateMode, + aExtendedMailSettings.UpdateMode() ); + // Create the last update AO info + TAOInfo aoInfo = aExtendedMailSettings.LastUpdateInfo(); + iCenRepControl->CreateToAccountL( + EIpsSetDataAoLastSuccessfulUpdateH, EIpsSetDataAoLastSuccessfulUpdateL, + aoInfo.iLastSuccessfulUpdate.Int64() ); + iCenRepControl->CreateToAccountL( + EIpsSetDataAoLastUpdateFailed, aoInfo.iLastUpdateFailed ); + iCenRepControl->CreateToAccountL( EIpsSetDataAoUpdateSuccessfulWithCurSettings, + aoInfo.iUpdateSuccessfulWithCurSettings ); + + // Extra items + iCenRepControl->CreateToAccountL( EIpsSetDataFsOutgoingLogin, + aExtendedMailSettings.OutgoingLogin() ); + + iCenRepControl->CreateToAccountL( + EIpsSetDataLastModifiedH, EIpsSetDataLastModifiedL, + aExtendedMailSettings.LastModified().Int64() ); + + iCenRepControl->CreateToAccountL( EIpsSetDataLastSyncStatus, + aExtendedMailSettings.LastSyncStatus() ); + + // + iCenRepControl->CreateToAccountL( EIpsSetDataHideUserNameAndAddress, + aExtendedMailSettings.DataHidden() ); + // + iCenRepControl->CreateToAccountL( + EIpsSetDateEmnReceivedButNotSyncedFlag, + aExtendedMailSettings.EmailNotificationState() ); + + iCenRepControl->CreateToAccountL( + EIpsSetDataFirstEMNReceivedFlag, + aExtendedMailSettings.FirstEmnReceived() ); + } + +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- +// +TInt CIpsSetDataStorer::DeleteExtendedSettingsL( + const TUint32 aAccountId, + const TUid& aMtmId ) + { + FUNC_LOG; + TInt error = KErrNone; + // Prepare account control + iCenRepControl->SetActiveCentralRepository( *iCenRepExtMail ); + iCenRepControl->SetActiveBaseKey( aAccountId, aMtmId ); + + // We don't care about errors in case of deletion + // seems that KErrNotFound appears often + iCenRepControl->DeleteFromAccount( EIpsSetDataCommonSetStatusFlagsH, + EIpsSetDataCommonSetStatusFlagsL ); + iCenRepControl->DeleteFromAccount( EIpsSetDataCommonSetMailboxId ); + iCenRepControl->DeleteFromAccount( EIpsSetDataCommonSetAccountId ); + iCenRepControl->DeleteFromAccount( EIpsSetDataCommonSetExtensionId ); + iCenRepControl->DeleteFromAccount( EIpsSetDataCommonSetProtocol ); + iCenRepControl->DeleteFromAccount( EIpsSetDataCommonSetEmailAddress ); + + // Extended mailbox settings + iCenRepControl->DeleteFromAccount( EIpsSetDataExtSetEmailNotif ); + iCenRepControl->DeleteFromAccount( EIpsSetDataExtSetIndicators ); + iCenRepControl->DeleteFromAccount( EIpsSetDataExtSetHideMsgs ); + iCenRepControl->DeleteFromAccount( EIpsSetDataExtSetOpenHtmlMail ); + + // Always Online Settings + iCenRepControl->DeleteFromAccount( EIpsSetDataAoVersion ); + iCenRepControl->DeleteFromAccount( EIpsSetDataAoOnlineState ); + iCenRepControl->DeleteFromAccount( EIpsSetDataAoWeekDays ); + iCenRepControl->DeleteFromAccount( EIpsSetDataAoTimeStartH, + EIpsSetDataAoTimeStartL ); + iCenRepControl->DeleteFromAccount( EIpsSetDataAoTimeStopH, + EIpsSetDataAoTimeStopL ); + iCenRepControl->DeleteFromAccount( EIpsSetDataAoInboxRefreshTime ); + iCenRepControl->DeleteFromAccount( EIpsSetDataAoUpdateMode ); + iCenRepControl->DeleteFromAccount( EIpsSetDataAoLastSuccessfulUpdateH, + EIpsSetDataAoLastSuccessfulUpdateL ); + iCenRepControl->DeleteFromAccount( EIpsSetDataAoLastUpdateFailed ); + iCenRepControl->DeleteFromAccount( + EIpsSetDataAoUpdateSuccessfulWithCurSettings ); + + // Extra items + iCenRepControl->DeleteFromAccount( EIpsSetDataFsOutgoingLogin ); + iCenRepControl->DeleteFromAccount( EIpsSetDataLastModifiedH, + EIpsSetDataLastModifiedL ); + iCenRepControl->DeleteFromAccount( EIpsSetDataLastSyncStatus ); + iCenRepControl->DeleteFromAccount( + EIpsSetDateEmnReceivedButNotSyncedFlag ); + + return error; + } +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- +// +void CIpsSetDataStorer::SaveExtendedSettingsL( + const CIpsSetDataExtension& aExtendedMailSettings ) + { + FUNC_LOG; + // Prepare account control + iCenRepControl->SetActiveCentralRepository( *iCenRepExtMail ); + iCenRepControl->SetActiveBaseKey( aExtendedMailSettings.ExtensionId() ); + + // Store the settings + // Common Settings + + iCenRepControl->SetToAccountL( EIpsSetDataCommonSetStatusFlagsH, + EIpsSetDataCommonSetStatusFlagsL, + aExtendedMailSettings.StatusFlags() ); + + iCenRepControl->SetToAccountL( EIpsSetDataCommonSetMailboxId, + aExtendedMailSettings.MailboxId() ); + iCenRepControl->SetToAccountL( EIpsSetDataCommonSetAccountId, + static_cast( aExtendedMailSettings.AccountId() ) ); + iCenRepControl->SetToAccountL( EIpsSetDataCommonSetExtensionId, + static_cast( aExtendedMailSettings.ExtensionId() ) ); + iCenRepControl->SetToAccountL( EIpsSetDataCommonSetProtocol, + aExtendedMailSettings.Protocol().iUid ); + iCenRepControl->SetToAccountL( EIpsSetDataCommonSetEmailAddress, + aExtendedMailSettings.EmailAddress() ); + + // Extended mailbox settings + iCenRepControl->SetToAccountL( EIpsSetDataExtSetEmailNotif, + static_cast( aExtendedMailSettings.EmailNotificationState() ) ); + iCenRepControl->SetToAccountL( EIpsSetDataExtSetIndicators, + static_cast( aExtendedMailSettings.NewMailIndicators() ) ); + iCenRepControl->SetToAccountL( EIpsSetDataExtSetHideMsgs, + static_cast( aExtendedMailSettings.HideMsgs() ) ); + iCenRepControl->SetToAccountL( EIpsSetDataExtSetOpenHtmlMail, + static_cast( aExtendedMailSettings.OpenHtmlMail() ) ); + + // Always Online Settings + iCenRepControl->SetToAccountL( EIpsSetDataAoVersion, + static_cast( aExtendedMailSettings.Version() ) ); + iCenRepControl->SetToAccountL( EIpsSetDataAoOnlineState, + aExtendedMailSettings.AlwaysOnlineState() ); + iCenRepControl->SetToAccountL( EIpsSetDataAoWeekDays, + aExtendedMailSettings.SelectedWeekDays() ); + iCenRepControl->SetToAccountL( EIpsSetDataAoTimeStartH, + EIpsSetDataAoTimeStartL, + aExtendedMailSettings.SelectedTimeStart().Int64() ); + iCenRepControl->SetToAccountL( EIpsSetDataAoTimeStopH, + EIpsSetDataAoTimeStopL, + aExtendedMailSettings.SelectedTimeStop().Int64() ); + iCenRepControl->SetToAccountL( EIpsSetDataAoInboxRefreshTime, + aExtendedMailSettings.InboxRefreshTime() ); + iCenRepControl->SetToAccountL( EIpsSetDataAoUpdateMode, + aExtendedMailSettings.UpdateMode() ); + + TAOInfo aoInfo = aExtendedMailSettings.LastUpdateInfo(); + iCenRepControl->SetToAccountL( + EIpsSetDataAoLastSuccessfulUpdateH, + EIpsSetDataAoLastSuccessfulUpdateL, + aoInfo.iLastSuccessfulUpdate.Int64() ); + iCenRepControl->SetToAccountL( + EIpsSetDataAoLastUpdateFailed, aoInfo.iLastUpdateFailed ); + iCenRepControl->SetToAccountL( + EIpsSetDataAoUpdateSuccessfulWithCurSettings, + aoInfo.iUpdateSuccessfulWithCurSettings ); + + iCenRepControl->SetToAccountL( EIpsSetDataFsOutgoingLogin, + aExtendedMailSettings.OutgoingLogin() ); + + iCenRepControl->SetToAccountL( + EIpsSetDataLastModifiedH, EIpsSetDataLastModifiedL, + aExtendedMailSettings.LastModified().Int64() ); + iCenRepControl->SetToAccountL( EIpsSetDataLastSyncStatus, + aExtendedMailSettings.LastSyncStatus() ); + + iCenRepControl->SetToAccountL( + EIpsSetDateEmnReceivedButNotSyncedFlag, + aExtendedMailSettings.EmnReceivedButNotSyncedFlag() ); + + iCenRepControl->SetToAccountL( + EIpsSetDataFirstEMNReceivedFlag, + aExtendedMailSettings.FirstEmnReceived() ); + } + +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- +// +void CIpsSetDataStorer::LoadExtendedSettingsL( + const TUint32 aAccountId, + const TUid& aMtmId, + CIpsSetDataExtension& aExtendedMailSettings ) + { + FUNC_LOG; + + // Prepare account control + iCenRepControl->SetActiveCentralRepository( *iCenRepExtMail ); + iCenRepControl->SetActiveBaseKey( aAccountId, aMtmId ); + + // Load the settings + // Common Settings + TInt error = KErrNone; + TInt value = 0; + + // EIpsSetDataCommonSetAccountId + // + error = iCenRepControl->GetFromAccount( + EIpsSetDataCommonSetAccountId, value ); + if ( error == KErrNone ) + { + aExtendedMailSettings.SetAccountId( value ); + } + else if ( error == KErrNotFound ) + { + // extended settings are not created at all + // create now + TMsvId service = 0; + TMsvId smtpServ = 0; + IpsSetUtils::GetServiceIdFromAccountIdL( + aAccountId, aMtmId, service, smtpServ ); + + aExtendedMailSettings.PopulateDefaults(); + CreateExtendedSettings( + service, aAccountId, aMtmId, + aExtendedMailSettings, EFalse ); + } + else + { + User::Leave( error ); + } + + // EIpsSetDataCommonSetMailboxId + // + error = iCenRepControl->GetFromAccount( EIpsSetDataCommonSetMailboxId, value ); + if ( error == KErrNone ) + { + aExtendedMailSettings.SetMailboxId( static_cast( value ) ); + } + else if ( error == KErrNotFound ) + { + // creating mailbox id to account settings if not found + TMsvId service = 0; + TMsvId smtpServ = 0; + IpsSetUtils::GetServiceIdFromAccountIdL( + aAccountId, aMtmId, service, smtpServ ); + aExtendedMailSettings.SetMailboxId( static_cast( service ) ); + + TRAP_IGNORE( iCenRepControl->CreateToAccountL( + EIpsSetDataCommonSetMailboxId, service ) ); + } + else + { + User::Leave( error ); + } + + // EIpsSetDataCommonSetExtensionId + // + error = iCenRepControl->GetFromAccount( + EIpsSetDataCommonSetExtensionId, value ); + if ( error == KErrNone ) + { + aExtendedMailSettings.SetExtensionId( value ); + } + else if ( error == KErrNotFound ) + { + // create extension id + TUint32 extId = IpsSetDataCtrlAccount::AccountIdToExtendedAccountId( + aAccountId, aMtmId ); + + TRAP_IGNORE( iCenRepControl->CreateToAccountL( + EIpsSetDataCommonSetExtensionId, extId ) ); + } + else + { + User::Leave( error ); + } + + // EIpsSetDataCommonSetProtocol + // + error = iCenRepControl->GetFromAccount( EIpsSetDataCommonSetProtocol, value ); + if ( error == KErrNone ) + { + aExtendedMailSettings.SetProtocol( TUid::Uid( value ) ); + } + else if ( error == KErrNotFound && + ( aMtmId == KSenduiMtmPop3Uid || + aMtmId == KSenduiMtmImap4Uid ) ) + { + TRAP_IGNORE( iCenRepControl->CreateToAccountL( + EIpsSetDataCommonSetProtocol, aMtmId.iUid ) ); + } + else + { + aExtendedMailSettings.SetProtocol( aMtmId ); + } + + // EIpsSetDataCommonSetStatusFlagsH, EIpsSetDataCommonSetStatusFlagsL + // + TInt64 flags = 0; + error = iCenRepControl->GetFromAccountAndCreateIfNotFound( + EIpsSetDataCommonSetStatusFlagsH, EIpsSetDataCommonSetStatusFlagsL, + KIpsSetExtDefaultStatusFlags, flags ); + aExtendedMailSettings.SetStatusFlags( flags ); + + // EIpsSetDataCommonSetEmailAddress + // + TIpsSetUtilsTextPlain text; + error = iCenRepControl->GetTextFromAccount( + EIpsSetDataCommonSetEmailAddress, text ); + TInt atPos = text.Locate( KIpsSetStorerAtChar ); + if ( error == KErrNone && atPos > 0 ) + { + aExtendedMailSettings.SetEmailAddress( text ); + } + else + { + CImSmtpSettings* smtpSet = IpsSetUtils::GetSmtpSettingsFromAccountIdL( + aAccountId, aMtmId ); + text.Copy( smtpSet->EmailAddress() ); + delete smtpSet; + smtpSet = NULL; + aExtendedMailSettings.SetEmailAddress( text ); + + if ( error == KErrNotFound ) + { + TRAP_IGNORE( iCenRepControl->CreateToAccountL( + EIpsSetDataCommonSetEmailAddress, text ) ); + } + else if ( atPos == KErrNotFound ) + { + TRAP_IGNORE( iCenRepControl->SetToAccountL( + EIpsSetDataCommonSetEmailAddress, text ) ); + } + } + + // EIpsSetDataExtSetEmailNotif + // + error = iCenRepControl->GetFromAccountAndCreateIfNotFound( + EIpsSetDataExtSetEmailNotif, + KIpsSetExtDefaultEmailNotificationState, value ); + aExtendedMailSettings.SetEmailNotificationState( + static_cast( value ) ); + + // EIpsSetDataExtSetIndicators + // + TBool result = ETrue; + error = iCenRepControl->GetFromAccountAndCreateIfNotFound( + EIpsSetDataExtSetIndicators, KIpsSetExtDefaultNewMailIndicators, + result ); + aExtendedMailSettings.SetNewMailIndicators( result ); + + // EIpsSetDataExtSetHideMsgs + // + error = iCenRepControl->GetFromAccountAndCreateIfNotFound( + EIpsSetDataExtSetHideMsgs, KIpsSetExtDefaultHideMsgs, + result ); + aExtendedMailSettings.SetHideMsgs( result ); + + // EIpsSetDataExtSetOpenHtmlMail + // + error = iCenRepControl->GetFromAccountAndCreateIfNotFound( + EIpsSetDataExtSetOpenHtmlMail, + KIpsSetExtDefaultOpenHtmlMail, value); + aExtendedMailSettings.SetOpenHtmlMail( value ); + + // EIpsSetDataAoOnlineState + // + error = iCenRepControl->GetFromAccountAndCreateIfNotFound( + EIpsSetDataAoOnlineState, KIpsSetExtDefaultAlwaysOnlineState + ,value ); + aExtendedMailSettings.SetAlwaysOnlineState( + static_cast( value ) ); + + // EIpsSetDataAoWeekDays + // + error = iCenRepControl->GetFromAccountAndCreateIfNotFound( + EIpsSetDataAoWeekDays, KIpsSetExtDefaultSelectedWeekDays + ,value ); + aExtendedMailSettings.SetSelectedWeekDays( value ); + + // EIpsSetDataAoTimeStartH, EIpsSetDataAoTimeStartL + // + TInt64 value64 = 0; + error = iCenRepControl->GetFromAccountAndCreateIfNotFound( + EIpsSetDataAoTimeStartH, EIpsSetDataAoTimeStartL, + KIpsSetExtDefaultSelectedTimeStart, value64 ); + aExtendedMailSettings.SetSelectedTimeStart( value64 ); + + // EIpsSetDataAoTimeStopH, EIpsSetDataAoTimeStopL + // + error = iCenRepControl->GetFromAccountAndCreateIfNotFound( + EIpsSetDataAoTimeStopH, EIpsSetDataAoTimeStopL, + KIpsSetExtDefaultSelectedTimeStop, value64 ); + aExtendedMailSettings.SetSelectedTimeStop( value64 ); + + // EIpsSetDataAoInboxRefreshTime + // + error = iCenRepControl->GetFromAccountAndCreateIfNotFound( + EIpsSetDataAoInboxRefreshTime, + KIpsSetExtDefaultInboxRefreshTime ,value ); + aExtendedMailSettings.SetInboxRefreshTime( value ); + + // EIpsSetDataAoUpdateMode + // + error = iCenRepControl->GetFromAccountAndCreateIfNotFound( + EIpsSetDataAoUpdateMode, + KIpsSetExtDefaultUpdateMode, value ); + aExtendedMailSettings.SetUpdateMode( + static_cast( value ) ); + + TAOInfo aoInfo; + // Load the last update info + + // EIpsSetDataAoLastSuccessfulUpdateH, EIpsSetDataAoLastSuccessfulUpdateL + // + error = iCenRepControl->GetFromAccountAndCreateIfNotFound( + EIpsSetDataAoLastSuccessfulUpdateH, EIpsSetDataAoLastSuccessfulUpdateL, + KIpsSetExtDefaultTAOInfoLastSuccessfulUpdate , value64 ); + aoInfo.iLastSuccessfulUpdate = value64; + + // EIpsSetDataAoLastUpdateFailed + // + error = iCenRepControl->GetFromAccountAndCreateIfNotFound( + EIpsSetDataAoLastUpdateFailed, + KIpsSetExtDefaultTAOInfoLastUpdateFailed, result ); + aoInfo.iLastUpdateFailed = result; + + // EIpsSetDataAoUpdateSuccessfulWithCurSettings + // + error = iCenRepControl->GetFromAccountAndCreateIfNotFound( + EIpsSetDataAoUpdateSuccessfulWithCurSettings, + KIpsSetExtDefaultTAOInfoUpdateSuccessfulWithCurSettings, result ); + aoInfo.iUpdateSuccessfulWithCurSettings = result; + + aExtendedMailSettings.SetLastUpdateInfo( aoInfo ); + + // EIpsSetDataFsOutgoingLogin + // + value = KIpsSetExtDefaultOutgoingLogin; + error = iCenRepControl->GetFromAccount( + EIpsSetDataFsOutgoingLogin, value ); + if ( error == KErrNotFound ) + { + TRAP_IGNORE( value = SolveOutgoingLoginMethodL( + aAccountId, aMtmId ) ); + TRAP_IGNORE( iCenRepControl->CreateToAccountL( + EIpsSetDataFsOutgoingLogin, value ) ); + } + aExtendedMailSettings.SetOutgoingLogin( value ); + + // EIpsSetDataLastModifiedH, EIpsSetDataLastModifiedL + // + error = iCenRepControl->GetFromAccountAndCreateIfNotFound( + EIpsSetDataLastModifiedH, EIpsSetDataLastModifiedL, + KIpsSetExtDefaultLastModified, value64 ); + aExtendedMailSettings.SetLastModified( value64 ); + + // EIpsSetDataLastSyncStatus + // + error = iCenRepControl->GetFromAccountAndCreateIfNotFound( + EIpsSetDataLastSyncStatus, + KIpsSetExtDefaultSyncStatus, value ); + aExtendedMailSettings.SetSyncStatus( value ); + + // + error = iCenRepControl->GetFromAccountAndCreateIfNotFound( + EIpsSetDataHideUserNameAndAddress, + KIpsSetExtDefaultHiddenData, result ); + aExtendedMailSettings.SetDataHidden( result ); + // + + // EIpsSetDateEmnReceivedButNotSyncedFlag + // + error = iCenRepControl->GetFromAccountAndCreateIfNotFound( + EIpsSetDateEmnReceivedButNotSyncedFlag, + KIpsSetExtDefaultEmnReceivedButNotSyncedFlag, value ); + aExtendedMailSettings.SetEmnReceivedButNotSyncedFlag( value ); + + error = iCenRepControl->GetFromAccountAndCreateIfNotFound( + EIpsSetDataFirstEMNReceivedFlag, + KIpsSetExtDefaultFirstEMNReceived ,value ); + aExtendedMailSettings.SetFirstEmnReceived( value ); + } + +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- +// +CEmailAccounts* CIpsSetDataStorer::AccountsL() + { + FUNC_LOG; + if ( !iAccounts ) + { + iAccounts = CEmailAccounts::NewL(); + } + + return iAccounts; + } + +// ---------------------------------------------------------------------------- +// function sets EIpsSetDataFsOutgoingLogin setting to correct value if +// it not set in cenrep (situation with old imum mailboxes) +// ---------------------------------------------------------------------------- +// +TInt CIpsSetDataStorer::SolveOutgoingLoginMethodL( + const TUint32 aAccountId, + const TUid& aMtmId ) + { + FUNC_LOG; + TInt ret = CIpsSetData::EOwnOutgoing; + TMsvId serviceId = 0; + TMsvId smtpId = 0; + IpsSetUtils::GetServiceIdFromAccountIdL( + aAccountId, aMtmId, serviceId, smtpId ); + + TBuf8 incPass; + TBuf8 incUser; + TBuf8 outPass; + TBuf8 outUser; + + CEmailAccounts* accounts = CEmailAccounts::NewLC( ); + if ( aMtmId == KSenduiMtmPop3Uid ) + { + TPopAccount popAccount; + accounts->GetPopAccountL( serviceId, popAccount ); + CImPop3Settings* popSettings = new ( ELeave ) CImPop3Settings; + CleanupStack::PushL( popSettings ); + accounts->LoadPopSettingsL( popAccount, *popSettings ); + incUser.Copy( popSettings->LoginName() ); + incPass.Copy( popSettings->Password() ); + CleanupStack::PopAndDestroy( popSettings ); + popSettings = NULL; + } + else if ( aMtmId == KSenduiMtmImap4Uid ) + { + TImapAccount imapAccount; + accounts->GetImapAccountL( serviceId, imapAccount ); + CImImap4Settings* imapSettings = new ( ELeave ) CImImap4Settings; + CleanupStack::PushL( imapSettings ); + accounts->LoadImapSettingsL( imapAccount, *imapSettings ); + incUser.Copy( imapSettings->LoginName() ); + incPass.Copy( imapSettings->Password() ); + CleanupStack::PopAndDestroy( imapSettings ); + imapSettings = NULL; + } + else + { + User::Leave( KErrArgument ); + } + + TSmtpAccount smtpAccount; + accounts->GetSmtpAccountL( smtpId, smtpAccount ); + CImSmtpSettings* smtpSettings = new ( ELeave ) CImSmtpSettings; + CleanupStack::PushL( smtpSettings ); + accounts->LoadSmtpSettingsL( smtpAccount, *smtpSettings ); + outUser.Copy( smtpSettings->LoginName() ); + outPass.Copy( smtpSettings->Password() ); + CleanupStack::PopAndDestroy( 2, accounts ); + smtpSettings = NULL; + accounts = NULL; + + if ( outUser.Length() == 0 && outPass.Length() == 0 ) + { + // if outgoing pass and username missing, + // set value to CIpsSetData::ENoAuth + ret = CIpsSetData::ENoAuth; + } + else if ( outUser.Compare(incUser) == 0 && outPass.Compare(incPass) == 0 ) + { + // if outgoing loging are same as incoming + // from smtp settings, + // then use value CIpsSetData::EUseIncoming + ret = CIpsSetData::EUseIncoming; + } + else + { + // if outgoing pass and username are same as incoming, + // use value CIpsSetData::EOwnOutgoing + ret = CIpsSetData::EOwnOutgoing; + } + return ret; + } + +// End of File +