ipsservices/ipssossettings/src/ipssetdatastorer.cpp
changeset 0 8466d47a6819
--- /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
+