diff -r 000000000000 -r 8466d47a6819 ipsservices/ipssossettings/src/ipssetdatamanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ipsservices/ipssossettings/src/ipssetdatamanager.cpp Thu Dec 17 08:39:21 2009 +0200 @@ -0,0 +1,857 @@ +/* +* 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: +* Encapsulates saving and removing email accounts +* Version : %version: 12.1.2 % +* +*/ + +#include "emailtrace.h" +#include // CEmailAccounts +#include // CImImap4Settings +#include +#include + +#include "ipssetdatamanager.h" +#include "ipssetdata.h" +// +#include "ipssetutilsconsts.h" +// +#include "ipssetdatastorer.h" +#include "ipssetutils.h" +#include "ipssetdatasignature.h" +#include "ipssetdataapi.h" +#include "ipsplgpropertywatcher.h" +#include "ipsplgcommon.h" +#include "CFSMailCommon.h" + + +const TInt KIpsSetManagerMaxCreTry = 10; + +/* #ifdef _DEBUG +_LIT( KMailboxCreationFailed, "IpsSettings - mbox creation failed"); +#endif */ + +// +const TInt KMaxBodyFetchSize = 999; +// + +// ============================ MEMBER FUNCTIONS =============================== + +// ---------------------------------------------------------------------------- +// CIpsSetDataManager::CIpsSetDataManager() +// ---------------------------------------------------------------------------- +// +CIpsSetDataManager::CIpsSetDataManager( + CMsvSession& aSession ) + : + iSession( aSession ), + iStorer( NULL ), + iAccounts( NULL ) + { + FUNC_LOG; + } + +// ---------------------------------------------------------------------------- +// CIpsSetDataManager::ConstructL() +// ---------------------------------------------------------------------------- +// +void CIpsSetDataManager::ConstructL() + { + FUNC_LOG; + iAccounts = CEmailAccounts::NewL(); + iStorer = CIpsSetDataStorer::NewL(); + } + +// ---------------------------------------------------------------------------- +// CIpsSetDataManager::~CIpsSetDataManager() +// ---------------------------------------------------------------------------- +// +CIpsSetDataManager::~CIpsSetDataManager() + { + FUNC_LOG; + delete iStorer; + delete iAccounts; + } + +// ---------------------------------------------------------------------------- +// CIpsSetDataManager::NewL() +// ---------------------------------------------------------------------------- +// +CIpsSetDataManager* CIpsSetDataManager::NewL( + CMsvSession& aSession ) + { + FUNC_LOG; + CIpsSetDataManager* self = NewLC( aSession ); + CleanupStack::Pop( self ); + return self; + } + +// ---------------------------------------------------------------------------- +// CIpsSetDataManager::NewLC() +// ---------------------------------------------------------------------------- +// +CIpsSetDataManager* CIpsSetDataManager::NewLC( + CMsvSession& aSession ) + { + FUNC_LOG; + CIpsSetDataManager* self = + new ( ELeave ) CIpsSetDataManager( aSession ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +/****************************************************************************** + + Manager tools + +******************************************************************************/ + + +// ---------------------------------------------------------------------------- +// CIpsSetDataManager::RemoveAccountL() +// ---------------------------------------------------------------------------- +// +void CIpsSetDataManager::RemoveAccountL( + const TMsvEntry& aMailbox ) + { + FUNC_LOG; + // First remove the extended settings, as this cannot leave + TInt error = iStorer->DeleteExtendedSettingsL( aMailbox ); + + // Cleanup all global folders that might have entries belonging to the + CleanGlobalFoldersL( aMailbox ); + + // Determine the account type + if ( aMailbox.iMtm == KSenduiMtmImap4Uid ) + { + // Remove the Imap4 account + TImapAccount imap; + iAccounts->GetImapAccountL( aMailbox.iServiceId, imap); + iAccounts->DeleteImapAccountL( imap ); + } + else + { + // Remove the Pop3 account + TPopAccount pop; + iAccounts->GetPopAccountL( aMailbox.iServiceId, pop); + iAccounts->DeletePopAccountL( pop ); + } + TSmtpAccount smtp; + iAccounts->GetSmtpAccountL( aMailbox.iRelatedId, smtp); + iAccounts->DeleteSmtpAccountL( smtp ); + } + +// ---------------------------------------------------------------------------- +// CIpsSetDataManager::CleanGlobalFoldersL() +// ---------------------------------------------------------------------------- +// +void CIpsSetDataManager::CleanGlobalFoldersL( const TMsvEntry& aMailbox ) + { + FUNC_LOG; + CleanGlobalFolderL( KMsvGlobalOutBoxIndexEntryId, aMailbox ); + CleanGlobalFolderL( KMsvDraftEntryId, aMailbox ); + CleanGlobalFolderL( KMsvSentEntryId, aMailbox ); + } + +// ---------------------------------------------------------------------------- +// CIpsSetDataManager::CleanGlobalFolderL() +// ---------------------------------------------------------------------------- +// +void CIpsSetDataManager::CleanGlobalFolderL( const TMsvId& aFolderId, const TMsvEntry& aMailbox ) + { + FUNC_LOG; + // delete possible entries from this folder that are related to the given mailbox + CMsvEntry* cEntry = iSession.GetEntryL( aFolderId ); + CleanupStack::PushL( cEntry ); + CMsvEntrySelection* selection = cEntry->ChildrenL(); + CleanupStack::PushL( selection ); + for ( TInt ii = 0; ii < selection->Count(); ii++ ) + { + TMsvEntry tEntry; + TMsvId service; + User::LeaveIfError( iSession.GetEntry( selection->At(ii), service, tEntry ) ); + if( tEntry.iServiceId == aMailbox.iRelatedId ) + { + iSession.RemoveEntry( selection->At(ii) ); + } + } + CleanupStack::PopAndDestroy( selection ); + CleanupStack::PopAndDestroy( cEntry ); + } + +/****************************************************************************** + + Account creation + +******************************************************************************/ + +// ---------------------------------------------------------------------------- +// CIpsSetDataManager::CreateEmailAccount() +// ---------------------------------------------------------------------------- +// +TInt CIpsSetDataManager::CreateEmailAccount( + CIpsSetData& aSettings , + const TBool aPopulateDefaults ) + { + FUNC_LOG; + TInt error = KErrNone; + // If settings not ready, don't try to create + if ( aSettings.IsOk() ) + { + TBool creReady = EFalse; + for ( TInt i = 0; i < KIpsSetManagerMaxCreTry && !creReady; i++ ) + { + // Attempt to create the mailaccount + error = KErrNone; + TRAP( error, DoCreateEmailAccountL( + aSettings, aPopulateDefaults ) ); + + if ( error == KErrNone ) + { + creReady = VerifyMailboxCreation( aSettings ); + } + else + { + CleanInvalidMailbox( aSettings ); + } + } + if ( error == KErrNone && !creReady ) + { + // mailbox not good, set return error; + error = KErrGeneral; + } + // Creating mailbox has failed, delete entries and cenrep settings + if ( error != KErrNone ) + { + CleanInvalidMailbox( aSettings ); + } + } + return error; + } + +// ---------------------------------------------------------------------------- +// CIpsSetDataManager::CleanInvalidMailbox() +// ---------------------------------------------------------------------------- +// +TBool CIpsSetDataManager::VerifyMailboxCreation( const CIpsSetData& aSettings ) + { + FUNC_LOG; + TInt error = KErrNotFound; + + TMsvId mboxId = 0; + TMsvId smtpId = 0; + TUid mtmId = aSettings.Protocol(); + if ( mtmId == KSenduiMtmImap4Uid ) + { + mboxId = aSettings.ImapAccount().iImapService; + smtpId = aSettings.ImapAccount().iSmtpService; + } + else + { + mboxId = aSettings.PopAccount().iPopService; + smtpId = aSettings.PopAccount().iSmtpService; + } + + + TMsvEntry mboxEntry; + TMsvEntry smtpEntry; + TMsvId dummy; + + error = iSession.GetEntry( mboxId, dummy, mboxEntry ); + + if ( error == KErrNone ) + { + error = iSession.GetEntry( smtpId, dummy, smtpEntry ); + } + + if ( error == KErrNone ) + { + // check that related id is set + if ( mboxEntry.iRelatedId != smtpEntry.Id() ) + { + TRAP( error, SetRelatedIdL( mboxEntry.Id(), smtpEntry.Id() ) ); + } + if ( error == KErrNone && + smtpEntry.iRelatedId != mboxEntry.Id() ) + { + TRAP( error, SetRelatedIdL( smtpEntry.Id(), mboxEntry.Id() ) ); + } + } + + TBool ret = EFalse; + if ( error == KErrNone ) + { + ret = ETrue; + } + else + { + CleanInvalidMailbox( aSettings ); + ret = EFalse; + } + return ret; + } + +// ---------------------------------------------------------------------------- +// CIpsSetDataManager::SetRelatedIdL() +// ---------------------------------------------------------------------------- +// +void CIpsSetDataManager::SetRelatedIdL( TMsvId aEntryId, TMsvId aRelatedId ) + { + FUNC_LOG; + CMsvEntry* centry = iSession.GetEntryL( aEntryId ); + CleanupStack::PushL( centry ); + + TMsvEntry tentry = centry->Entry(); + tentry.iRelatedId = aRelatedId; + centry->ChangeL( tentry ); + + CleanupStack::PopAndDestroy( centry ); + centry = NULL; + + // make sure that id is really changed + TMsvId dummy; + TInt error = iSession.GetEntry( aEntryId, dummy, tentry ); + if ( error != KErrNone || tentry.iRelatedId != aRelatedId ) + { + User::Leave( KErrNotFound ); + } + } + +// ---------------------------------------------------------------------------- +// CIpsSetDataManager::CleanInvalidMailbox() +// ---------------------------------------------------------------------------- +// +void CIpsSetDataManager::CleanInvalidMailbox( const CIpsSetData& aSettings ) + { + FUNC_LOG; + // Determine the account type + TMsvId mboxId = 0; + TUid mtmId = aSettings.Protocol(); + // TUint32 accountId = 0; + if ( mtmId == KSenduiMtmImap4Uid ) + { + // Remove the Imap4 account + TImapAccount imap = aSettings.ImapAccount(); + mboxId = imap.iImapService; + // accountId = imap.iImapAccountId; + TRAP_IGNORE( iAccounts->DeleteImapAccountL( imap ) ); + } + else + { + // Remove the Pop3 account + TPopAccount pop = aSettings.PopAccount(); + mboxId = pop.iPopService; + // accountId = pop.iPopAccountId; + TRAP_IGNORE( iAccounts->DeletePopAccountL( pop ) ); + } + TRAP_IGNORE( TInt error = iStorer->DeleteExtendedSettingsL( + mboxId, mtmId ) ); + + TRAP_IGNORE( iAccounts->DeleteSmtpAccountL( aSettings.SmtpAccount() ) ); + } + +// ---------------------------------------------------------------------------- +// CIpsSetDataManager::DoCreateEmailAccountL() +// ---------------------------------------------------------------------------- +// +void CIpsSetDataManager::DoCreateEmailAccountL( + CIpsSetData& aSettings, + const TBool aPopulateDefaults ) + { + FUNC_LOG; + TUint32 id = 0; + TUid mtmId; + TMsvId mailboxId; + + // Check for imap4 + if ( aSettings.Protocol() == KSenduiMtmImap4Uid ) + { + // Catch all the problems with account creation + id = CreateImap4AccountL( aSettings, aPopulateDefaults ); + mtmId = KSenduiMtmImap4Uid; + mailboxId = aSettings.ImapAccount().iImapService; + } + else + { + id = CreatePop3AccountL( aSettings, aPopulateDefaults ); + mtmId = KSenduiMtmPop3Uid; + mailboxId = aSettings.PopAccount().iPopService; + } + CreateExtendedSettingsL( mailboxId, id, mtmId, aSettings ); + + TRAPD( signerr, StoreSignatureL( aSettings ) ); + if ( signerr != KErrNone ) + { + } + StoreIMEIToMailbox( mailboxId ); + + } + +// ---------------------------------------------------------------------------- +// CIpsSetDataManager::CreateImap4AccountL() +// ---------------------------------------------------------------------------- +// +TUint32 CIpsSetDataManager::CreateImap4AccountL( + CIpsSetData& aSettings, + const TBool aPopulateDefaults, + const TBool aReadOnly ) + { + FUNC_LOG; + // Populate defaults + if ( aPopulateDefaults ) + { + iAccounts->PopulateDefaultImapSettingsL( + *aSettings.Imap4Settings(), *aSettings.IncomingIapPref() ); + iAccounts->PopulateDefaultSmtpSettingsL( + *aSettings.SmtpSettings(), *aSettings.OutgoingIapPref() ); + } + + aSettings.Imap4Settings()->SetPathSeparator( '/' ); + aSettings.Imap4Settings()->SetUpdatingSeenFlags(ETrue); + + // Create the account + aSettings.ImapAccount() = iAccounts->CreateImapAccountL( + aSettings.MailboxName(), + *aSettings.Imap4Settings(), *aSettings.IncomingIapPref(), aReadOnly ); + aSettings.SmtpAccount() = iAccounts->CreateSmtpAccountL( + aSettings.ImapAccount(), + *aSettings.SmtpSettings(), *aSettings.OutgoingIapPref(), aReadOnly ); + + return aSettings.ImapAccount().iImapAccountId; + } + +// ---------------------------------------------------------------------------- +// CIpsSetDataManager::CreatePop3AccountL() +// ---------------------------------------------------------------------------- +// +TUint32 CIpsSetDataManager::CreatePop3AccountL( + CIpsSetData& aSettings, + const TBool aPopulateDefaults, + const TBool aReadOnly ) + { + FUNC_LOG; + // Populate defaults + if ( aPopulateDefaults ) + { + iAccounts->PopulateDefaultPopSettingsL( + *aSettings.Pop3Settings(), *aSettings.IncomingIapPref() ); + iAccounts->PopulateDefaultSmtpSettingsL( + *aSettings.SmtpSettings(), *aSettings.OutgoingIapPref() ); + } + + // Create the account + aSettings.PopAccount() = iAccounts->CreatePopAccountL( + aSettings.MailboxName(), + *aSettings.Pop3Settings(), *aSettings.IncomingIapPref(), aReadOnly ); + aSettings.SmtpAccount() = iAccounts->CreateSmtpAccountL( + aSettings.PopAccount(), + *aSettings.SmtpSettings(), *aSettings.OutgoingIapPref(), aReadOnly ); + return aSettings.PopAccount().iPopAccountId; + } + +// ---------------------------------------------------------------------------- +// CIpsSetDataManager::CreateExtendedSettingsL() +// ---------------------------------------------------------------------------- +// +void CIpsSetDataManager::CreateExtendedSettingsL( + const TMsvId aMailboxId, + const TUint32 aAccountId, + const TUid& aProtocol, + CIpsSetData& aSettings, + const TBool aPopulateDefaults ) + { + FUNC_LOG; + // If populating has been successful + User::LeaveIfError( iStorer->CreateExtendedSettings( + aMailboxId, aAccountId, aProtocol, + *aSettings.ExtendedSettings(), aPopulateDefaults ) ); + } + +// ---------------------------------------------------------------------------- +// CIpsSetDataManager::StoreIMEIToMailbox() +// ---------------------------------------------------------------------------- +// +TInt CIpsSetDataManager::StoreIMEIToMailbox( + const TMsvId aMailboxId ) const + { + FUNC_LOG; + // Get available mailbox entries + TMsvEntry entry; + TInt result = IpsSetUtils::GetMailboxEntry( iSession, aMailboxId, entry ); + + // Imap4 & Pop3 & Smtp protocols contain two entries + if ( result == KErrNone ) + { + // Attempt to store the IMEI code to the entry + result = StoreIMEIToEntry( entry.Id() ); + } + + // Imap4 / Pop3 protocols have two different entries + if ( IpsSetUtils::IsMailMtm( entry.iMtm ) ) + { + TMsvEntry secondaryEntry; + result = IpsSetUtils::GetMailboxEntry( iSession, entry.iRelatedId, entry ); + + if ( result == KErrNone ) + { + // Attempt to store the IMEI code to the entry + result = StoreIMEIToEntry( entry.Id() ); + } + } + + return result; + } + +// ---------------------------------------------------------------------------- +// CIpsSetDataManager::StoreIMEIToEntry() +// ---------------------------------------------------------------------------- +// +TInt CIpsSetDataManager::StoreIMEIToEntry( const TMsvId aMailboxId ) const + { + FUNC_LOG; + TRAPD( error, GetAndStoreIMEIToEntryL( aMailboxId ) ); + return ( error == KErrNone ) ? KErrNone : KErrGeneral; + } + +// ---------------------------------------------------------------------------- +// CIpsSetDataManager::GetAndStoreIMEIToEntryL() +// ---------------------------------------------------------------------------- +// +void CIpsSetDataManager::GetAndStoreIMEIToEntryL( + const TMsvId aMailboxId ) const + { + FUNC_LOG; + TBuf imei; + + CIpsSetDataApi* setApi = CIpsSetDataApi::NewL( iSession ); + CleanupStack::PushL( setApi ); + + setApi->GetIMEIFromThePhoneL( imei ); + + CMsvEntry* centry = iSession.GetEntryL( aMailboxId ); + CleanupStack::PushL( centry ); + + TMsvEntry tentry = centry->Entry(); + tentry.iDescription.Set( imei ); + centry->ChangeL( tentry ); + + CleanupStack::PopAndDestroy( 2, setApi ); + centry = NULL; + } + +/****************************************************************************** + + Account Saving + +******************************************************************************/ + +// ---------------------------------------------------------------------------- +// CIpsSetDataManager::SaveEmailSettingsL() +// ---------------------------------------------------------------------------- +// +TInt CIpsSetDataManager::SaveEmailSettingsL( + CIpsSetData& aSettings ) + { + FUNC_LOG; + // If settings not ready, don't try to create + if ( !aSettings.IsOk() ) + { + return KErrNotFound; + } + + TInt error = KErrNone; + TBool isImap = ( aSettings.Protocol() == KSenduiMtmImap4Uid ); + // Check for imap4 + if ( isImap ) + { + // Catch all the problems with account creation + TRAP( error, SaveImap4SettingsL( aSettings ) ); + } + // It's a pop + else + { + // Catch all the problems with account creation + TRAP( error, SavePop3SettingsL( aSettings ) ); + } + + // Attempt to save the extended settings, even if other settings have + // failed to save + error = iStorer->SaveExtendedSettings( *aSettings.ExtendedSettings() ); + TRAP_IGNORE( StoreSignatureL( aSettings ) ); + + //settings have been saved, signal email plugins + SendPropertyEventL( (isImap ? + aSettings.ImapAccount().iImapService : + aSettings.PopAccount().iPopService), isImap ); + return error; + } + +// ---------------------------------------------------------------------------- +// CIpsSetDataManager::SavePop3SettingsL() +// ---------------------------------------------------------------------------- +// +void CIpsSetDataManager::SavePop3SettingsL( + CIpsSetData& aSettings ) + { + FUNC_LOG; + // Store the mailbox name + aSettings.PopAccount().iPopAccountName.Copy( + aSettings.MailboxName() ); + aSettings.SmtpAccount().iSmtpAccountName.Copy( + aSettings.MailboxName() ); + + // Load mailbox settings + iAccounts->SavePopSettingsL( + aSettings.PopAccount(), *aSettings.Pop3Settings() ); + iAccounts->SavePopIapSettingsL( + aSettings.PopAccount(), *aSettings.IncomingIapPref() ); + iAccounts->SaveSmtpSettingsL( + aSettings.SmtpAccount(), *aSettings.SmtpSettings() ); + iAccounts->SaveSmtpIapSettingsL( + aSettings.SmtpAccount(), *aSettings.OutgoingIapPref() ); + } + +// ---------------------------------------------------------------------------- +// CIpsSetDataManager::SaveImap4SettingsL() +// ---------------------------------------------------------------------------- +// +void CIpsSetDataManager::SaveImap4SettingsL( + CIpsSetData& aSettings ) + { + FUNC_LOG; + // Store the mailbox name + aSettings.ImapAccount().iImapAccountName.Copy( + aSettings.MailboxName() ); + aSettings.SmtpAccount().iSmtpAccountName.Copy( + aSettings.MailboxName() ); + + // Load mailbox settings + iAccounts->SaveImapSettingsL( + aSettings.ImapAccount(), *aSettings.Imap4Settings() ); + iAccounts->SaveImapIapSettingsL( + aSettings.ImapAccount(), *aSettings.IncomingIapPref() ); + iAccounts->SaveSmtpSettingsL( + aSettings.SmtpAccount(), *aSettings.SmtpSettings() ); + iAccounts->SaveSmtpIapSettingsL( + aSettings.SmtpAccount(), *aSettings.OutgoingIapPref() ); + } + +/****************************************************************************** + + Account Loading + +******************************************************************************/ + +// ---------------------------------------------------------------------------- +// CIpsSetDataManager::LoadEmailSettingsL() +// ---------------------------------------------------------------------------- +// +void CIpsSetDataManager::LoadEmailSettingsL( + const TMsvEntry& aEntry, + CIpsSetData& aSettings ) + { + FUNC_LOG; + // Get both of the entries + TMsvEntry smtpEntry; + TMsvEntry relatedEntry; + TUid mtmId = IpsSetUtils::GetMailboxEntriesL( + aEntry, iSession, smtpEntry, relatedEntry ); + + // Store the id and protocol + aSettings.SetProtocol( mtmId ); + + // Load settings based on the protocol + if ( aSettings.Protocol() == KSenduiMtmImap4Uid ) + { + iAccounts->GetImapAccountL( + relatedEntry.Id(), aSettings.ImapAccount() ); + LoadImap4SettingsL( aSettings ); + + // Load extended settings + TUint32 accountId = aSettings.ImapAccount().iImapAccountId; + TInt error = iStorer->LoadExtendedSettings( + TIpsSetDataStorerParams( accountId, mtmId ), + *aSettings.ExtendedSettings() ); + } + else + { + iAccounts->GetPopAccountL( + relatedEntry.Id(), aSettings.PopAccount() ); + LoadPop3SettingsL( aSettings ); + + // Load extended settings + TUint32 accountId = aSettings.PopAccount().iPopAccountId; + TInt error = iStorer->LoadExtendedSettings( + TIpsSetDataStorerParams( accountId, mtmId ), + *aSettings.ExtendedSettings() ); + } + + // Attempt to read the signature + TRAP_IGNORE( RestoreSignatureL( aSettings ) ); + } + +// ---------------------------------------------------------------------------- +// CIpsSetDataManager::LoadPop3SettingsL() +// ---------------------------------------------------------------------------- +// +void CIpsSetDataManager::LoadPop3SettingsL( + CIpsSetData& aSettings ) + { + FUNC_LOG; + iAccounts->GetSmtpAccountL( + aSettings.PopAccount().iSmtpService, aSettings.SmtpAccount() ); + + // Load mailbox settings + iAccounts->LoadPopSettingsL( + aSettings.PopAccount(), *aSettings.Pop3Settings() ); + iAccounts->LoadPopIapSettingsL( + aSettings.PopAccount(), *aSettings.IncomingIapPref() ); + iAccounts->LoadSmtpSettingsL( + aSettings.SmtpAccount(), *aSettings.SmtpSettings() ); + iAccounts->LoadSmtpIapSettingsL( + aSettings.SmtpAccount(), *aSettings.OutgoingIapPref() ); + + aSettings.SetMailboxName( aSettings.PopAccount().iPopAccountName ); + } + +// ---------------------------------------------------------------------------- +// CIpsSetDataManager::LoadImap4SettingsL() +// ---------------------------------------------------------------------------- +// +void CIpsSetDataManager::LoadImap4SettingsL( + CIpsSetData& aSettings ) + { + FUNC_LOG; + iAccounts->GetSmtpAccountL( + aSettings.ImapAccount().iSmtpService, aSettings.SmtpAccount() ); + + // Load mailbox settings + iAccounts->LoadImapSettingsL( + aSettings.ImapAccount(), *aSettings.Imap4Settings() ); + + // + TInt szLimit = aSettings.Imap4Settings()->BodyTextSizeLimit(); + + if( szLimit < KIpsSetDataFullBodyOnly || + szLimit > KMaxBodyFetchSize ) + { + //body size limit value not set properly, so setting a default value. + aSettings.Imap4Settings()->SetBodyTextSizeLimitL( + KIpsSetDataDefaultDownloadSizeKb ); + + iAccounts->SaveImapSettingsL( + aSettings.ImapAccount(), *aSettings.Imap4Settings() ); + } + // + + iAccounts->LoadImapIapSettingsL( + aSettings.ImapAccount(), *aSettings.IncomingIapPref() ); + iAccounts->LoadSmtpSettingsL( + aSettings.SmtpAccount(), *aSettings.SmtpSettings() ); + iAccounts->LoadSmtpIapSettingsL( + aSettings.SmtpAccount(), *aSettings.OutgoingIapPref() ); + + aSettings.SetMailboxName( aSettings.ImapAccount().iImapAccountName ); + } + +/****************************************************************************** + + MISC TOOLS + +******************************************************************************/ + +// ---------------------------------------------------------------------------- +// CIpsSetDataManager::StoreSignatureL() +// ---------------------------------------------------------------------------- +// +void CIpsSetDataManager::StoreSignatureL( + const CIpsSetData& aSettings ) + { + FUNC_LOG; + // Get Signature + CMsvEntry* entry = + iSession.GetEntryL( aSettings.SmtpAccount().iSmtpService ); + CleanupStack::PushL( entry ); + CMsvStore* msvStore = entry->EditStoreL(); + CleanupStack::PushL( msvStore ); + + msvStore->StoreBodyTextL( *( aSettings.Signature().iRichText ) ); + msvStore->CommitL(); + + CleanupStack::PopAndDestroy( msvStore ); + msvStore = NULL; + CleanupStack::PopAndDestroy( entry ); + entry = NULL; + } + +// ---------------------------------------------------------------------------- +// CIpsSetDataManager::RestoreSignatureL() +// ---------------------------------------------------------------------------- +// +void CIpsSetDataManager::RestoreSignatureL( + CIpsSetData& aSettings ) + { + FUNC_LOG; + // Get Signature + CMsvEntry* entry = + iSession.GetEntryL( aSettings.SmtpAccount().iSmtpService ); + CleanupStack::PushL( entry ); + CMsvStore* msvStore = entry->ReadStoreL(); + CleanupStack::PushL( msvStore ); + + aSettings.Signature().CreateEmptyRichTextL(); + msvStore->RestoreBodyTextL( *( aSettings.Signature().iRichText ) ); + + CleanupStack::PopAndDestroy( msvStore ); + msvStore = NULL; + CleanupStack::PopAndDestroy( entry ); + entry = NULL; + } + +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- +TInt CIpsSetDataManager::SendPropertyEventL( TInt aMailbox, TBool aIsImap ) + { + FUNC_LOG; + TInt error = RProperty::Define( + KIpsPlgPropertyCatUid, + KIPSSosEventPropertyKey, RProperty::EByteArray, + KAllowAllPolicy, + KAllowWriteDeviceDataPolicy ); + + TUid plugin = (aIsImap ? KIpsPlgImap4PluginUid : KIpsPlgPop3PluginUid); + TIpsPlgPropertyEvent pEvent( + EIPSSosSettingsChanged, + aMailbox , + plugin.iUid, + KErrNone ); + + TPckgBuf propertyBuf = pEvent; + + // if definition was success + if ( error == KErrNone || error == KErrAlreadyExists || + error == KErrPermissionDenied ) + { + error = RProperty::Set( + KIpsPlgPropertyCatUid, + KIPSSosEventPropertyKey, propertyBuf ); + + } + return error; + } + +// End Of File +