--- /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 <centralrepository.h> // CRepository
+#include <SendUiConsts.h>
+#include <smtpset.h>
+#include <imapset.h>
+#include <pop3set.h>
+#include <cemailaccounts.h>
+
+#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<TInt>( aExtendedMailSettings.AccountId() ) );
+ iCenRepControl->CreateToAccountL( EIpsSetDataCommonSetExtensionId,
+ static_cast<TInt>( aExtendedMailSettings.ExtensionId() ) );
+ iCenRepControl->CreateToAccountL( EIpsSetDataCommonSetProtocol,
+ aExtendedMailSettings.Protocol().iUid );
+ iCenRepControl->CreateToAccountL( EIpsSetDataCommonSetEmailAddress,
+ aExtendedMailSettings.EmailAddress() );
+
+ // Extended mailbox settings
+ iCenRepControl->CreateToAccountL( EIpsSetDataExtSetEmailNotif,
+ static_cast<TInt>( aExtendedMailSettings.EmailNotificationState() ) );
+ iCenRepControl->CreateToAccountL( EIpsSetDataExtSetIndicators,
+ static_cast<TBool>( aExtendedMailSettings.NewMailIndicators() ) );
+ iCenRepControl->CreateToAccountL( EIpsSetDataExtSetHideMsgs,
+ static_cast<TInt>( aExtendedMailSettings.HideMsgs() ) );
+ iCenRepControl->CreateToAccountL( EIpsSetDataExtSetOpenHtmlMail,
+ static_cast<TInt>( aExtendedMailSettings.OpenHtmlMail() ) );
+
+ // Always Online Settings
+ iCenRepControl->CreateToAccountL( EIpsSetDataAoVersion,
+ static_cast<TInt>( 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() );
+
+ //<cmail>
+ iCenRepControl->CreateToAccountL( EIpsSetDataHideUserNameAndAddress,
+ aExtendedMailSettings.DataHidden() );
+ //</cmail>
+ 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<TInt>( aExtendedMailSettings.AccountId() ) );
+ iCenRepControl->SetToAccountL( EIpsSetDataCommonSetExtensionId,
+ static_cast<TInt>( aExtendedMailSettings.ExtensionId() ) );
+ iCenRepControl->SetToAccountL( EIpsSetDataCommonSetProtocol,
+ aExtendedMailSettings.Protocol().iUid );
+ iCenRepControl->SetToAccountL( EIpsSetDataCommonSetEmailAddress,
+ aExtendedMailSettings.EmailAddress() );
+
+ // Extended mailbox settings
+ iCenRepControl->SetToAccountL( EIpsSetDataExtSetEmailNotif,
+ static_cast<TInt>( aExtendedMailSettings.EmailNotificationState() ) );
+ iCenRepControl->SetToAccountL( EIpsSetDataExtSetIndicators,
+ static_cast<TBool>( aExtendedMailSettings.NewMailIndicators() ) );
+ iCenRepControl->SetToAccountL( EIpsSetDataExtSetHideMsgs,
+ static_cast<TInt>( aExtendedMailSettings.HideMsgs() ) );
+ iCenRepControl->SetToAccountL( EIpsSetDataExtSetOpenHtmlMail,
+ static_cast<TBool>( aExtendedMailSettings.OpenHtmlMail() ) );
+
+ // Always Online Settings
+ iCenRepControl->SetToAccountL( EIpsSetDataAoVersion,
+ static_cast<TInt>( 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<TMsvId>( 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<TMsvId>( 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<TIpsSetDataEmnStates>( 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<TIpsSetDataAoStates>( 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<TIpsSetDataAoUpdateModes>( 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 );
+
+ //<cmail>
+ error = iCenRepControl->GetFromAccountAndCreateIfNotFound(
+ EIpsSetDataHideUserNameAndAddress,
+ KIpsSetExtDefaultHiddenData, result );
+ aExtendedMailSettings.SetDataHidden( result );
+ //</cmail>
+
+ // 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<KIpsSetUiMaxPasswordLength> incPass;
+ TBuf8<KIpsSetUiMaxPasswordLength> incUser;
+ TBuf8<KIpsSetUiMaxPasswordLength> outPass;
+ TBuf8<KIpsSetUiMaxPasswordLength> 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
+