diff -r ebe688cedc25 -r 7fdbb852d323 email/imum/Utils/Src/IMASAccountControl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/email/imum/Utils/Src/IMASAccountControl.cpp Wed Sep 01 12:31:54 2010 +0100 @@ -0,0 +1,317 @@ +/* +* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: IMASAccountControl.cpp +* +*/ + + +// INCLUDE FILES +#include +#include +#include + +#include "IMASAccountControl.h" +#include "EmailUtils.H" +#include "ImumPrivateCRKeys.h" // Predefined mailbox keys +#include "ImumPanic.h" +#include "ImumUtilsLogging.h" + +// EXTERNAL DATA STRUCTURES +// EXTERNAL FUNCTION PROTOTYPES +// CONSTANTS +enum TIACErrors + { + EIACNoError = 0, + EIACMboxToAccIdMtmError, + EIACAccIdToExtIdMtmError, + EIACExtIdToAccIdMtmError + }; + +// Account Id conversion to Extension Id +enum TIACKeyShifts + { + EIACKeyShiftImap4 = 0, + EIACKeyShiftPop3 = 8 + }; + +const TInt KImasShiftAccountId = 8; + +// MACROS +// LOCAL CONSTANTS AND MACROS +// MODULE DATA STRUCTURES +// LOCAL FUNCTION PROTOTYPES +// FORWARD DECLARATIONS + +// ============================ MEMBER FUNCTIONS =============================== + +// ---------------------------------------------------------------------------- +// IMASAccountControl::CreateBaseKeyFromAccountId() +// ---------------------------------------------------------------------------- +// +TUint32 IMASAccountControl::CreateBaseKeyFromAccountId( + const TUint32 aAccountId, + const TUid& aProtocol ) + { + IMUM_STATIC_CONTEXT( IMASAccountControl::CreateBaseKeyFromAccountId, 0, utils, KLogData ); + + TUint32 extendedAccountId = + AccountIdToExtendedAccountId( aAccountId, aProtocol ); + return ( extendedAccountId << KImasShiftAccountId ); + } + +// ---------------------------------------------------------------------------- +// IMASAccountControl::CreateBaseKeyFromExtendedAccountId() +// ---------------------------------------------------------------------------- +// +TUint32 IMASAccountControl::CreateBaseKeyFromExtendedAccountId( + const TUint32 aExtendedAccountId ) + { + IMUM_STATIC_CONTEXT( IMASAccountControl::CreateBaseKeyFromExtendedAccountId, 0, utils, KLogData ); + + return ( aExtendedAccountId << KImasShiftAccountId ); + } + +// ---------------------------------------------------------------------------- +// IMASAccountControl::MailboxIdToAccountIdL() +// ---------------------------------------------------------------------------- +// +TUint32 IMASAccountControl::MailboxIdToAccountIdL( + const TMsvId aMailboxId, + const TUid& aMtmId ) + { + IMUM_STATIC_CONTEXT( IMASAccountControl::MailboxIdToAccountIdL, 0, utils, KLogData ); + + TUint32 accountId = 0; + + switch ( aMtmId.iUid ) + { + case KSenduiMtmSmtpUidValue: + accountId = IMASAccountControl::GetSmtpAccountIdL( + aMailboxId ).iSmtpAccountId; + break; + + case KSenduiMtmPop3UidValue: + accountId = IMASAccountControl::GetPopAccountIdL( + aMailboxId ).iPopAccountId; + break; + + case KSenduiMtmImap4UidValue: + accountId = IMASAccountControl::GetImapAccountIdL( + aMailboxId ).iImapAccountId; + break; + + default: + __ASSERT_DEBUG( EFalse, User::Panic( + KIMASAccountControlPanic, EIACMboxToAccIdMtmError ) ); + User::Leave( KErrNotSupported ); + break; + } + + return accountId; + } + +// ---------------------------------------------------------------------------- +// IMASAccountControl::AccountIdToMailboxId() +// ---------------------------------------------------------------------------- +// +TMsvId IMASAccountControl::AccountIdToMailboxId( + CEmailAccounts& aAccounts, + const TUint32 aAccountId, + const TUid& aMtmId ) + { + IMUM_STATIC_CONTEXT( IMASAccountControl::AccountIdToMailboxId, 0, utils, KLogData ); + + TMsvId mailboxId = KErrNotFound; + + // Get the correct accounts according to the protocol + if ( aMtmId.iUid == KSenduiMtmImap4UidValue ) + { + // IMAP4 + TImapAccount imapAccount; + RArray accountArray; + TRAPD( error, aAccounts.GetImapAccountsL( accountArray ) ); + + TInt account = ( error == KErrNone ) ? + accountArray.Count() : KErrNotFound; + + while ( mailboxId < 0 && --account >= 0 ) + { + imapAccount = accountArray[account]; + + // Check if the id's match + if ( imapAccount.iImapAccountId == aAccountId ) + { + mailboxId = imapAccount.iImapService; + } + } + } + else + { + // POP3 + TPopAccount popAccount; + RArray accountArray; + TRAPD( error, aAccounts.GetPopAccountsL( accountArray ) ); + + TInt account = ( error == KErrNone ) ? + accountArray.Count() : KErrNotFound; + + while ( mailboxId < 0 && --account >= 0 ) + { + popAccount = accountArray[account]; + + // Check if the id's match + if ( popAccount.iPopAccountId == aAccountId ) + { + mailboxId = popAccount.iPopService; + } + } + } + + return mailboxId; + } + + +// ---------------------------------------------------------------------------- +// IMASAccountControl::AccountIdToExtendedAccountId() +// ---------------------------------------------------------------------------- +// +TUint32 IMASAccountControl::AccountIdToExtendedAccountId( + const TUint32 aAccountId, + const TUid& aMtmId ) + { + IMUM_STATIC_CONTEXT( IMASAccountControl::AccountIdToExtendedAccountId, 0, utils, KLogData ); + + // Imap4 accounts are 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 + if ( aMtmId == KSenduiMtmImap4Uid ) + { + return ( aAccountId << EIACKeyShiftImap4 ); + } + // Pop3 accounts are 0x100, 0x200, 0x300, 0x400, 0x500, 0x600 + else if ( aMtmId == KSenduiMtmPop3Uid ) + { + return ( aAccountId << EIACKeyShiftPop3 ); + } + else + { + __ASSERT_DEBUG( EFalse, User::Panic( + KIMASAccountControlPanic, EIACAccIdToExtIdMtmError ) ); + } + + return 0; + } + +// ---------------------------------------------------------------------------- +// IMASAccountControl::ExtendedAccountIdToAccountId() +// ---------------------------------------------------------------------------- +// +TUint32 IMASAccountControl::ExtendedAccountIdToAccountId( + const TUint32 aExtendedAccountId, + const TUid& aMtmId ) + { + IMUM_STATIC_CONTEXT( IMASAccountControl::ExtendedAccountIdToAccountId, 0, utils, KLogData ); + + // Imap4 accounts are 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 + if ( aMtmId == KSenduiMtmImap4Uid ) + { + return ( aExtendedAccountId >> EIACKeyShiftImap4 ); + } + // Pop3 accounts are 0x100, 0x200, 0x300, 0x400, 0x500, 0x600 + else if ( aMtmId == KSenduiMtmPop3Uid ) + { + return ( aExtendedAccountId >> EIACKeyShiftPop3 ); + } + else + { + __ASSERT_DEBUG( EFalse, User::Panic( + KIMASAccountControlPanic, EIACExtIdToAccIdMtmError ) ); + } + + return 0; + } + +// ---------------------------------------------------------------------------- +// IMASAccountControl::GetPopAccountIdL() +// ---------------------------------------------------------------------------- +// +TPopAccount IMASAccountControl::GetPopAccountIdL( + const TMsvId aPopMailboxId ) + { + IMUM_STATIC_CONTEXT( IMASAccountControl::GetPopAccountIdL, 0, utils, KLogData ); + + CEmailAccounts* account = CEmailAccounts::NewLC(); + + TPopAccount popAccountId; + account->GetPopAccountL( aPopMailboxId, popAccountId ); + + CleanupStack::PopAndDestroy( account ); + account = NULL; + + return popAccountId; + } + +// ---------------------------------------------------------------------------- +// IMASAccountControl::GetImapAccountIdL() +// ---------------------------------------------------------------------------- +// +TImapAccount IMASAccountControl::GetImapAccountIdL( + const TMsvId aImapMailboxId ) + { + IMUM_STATIC_CONTEXT( IMASAccountControl::GetImapAccountIdL, 0, utils, KLogData ); + + CEmailAccounts* account = CEmailAccounts::NewLC(); + + TImapAccount imapAccountId; + account->GetImapAccountL( aImapMailboxId, imapAccountId ); + + CleanupStack::PopAndDestroy( account ); + account = NULL; + + return imapAccountId; + } + +// ---------------------------------------------------------------------------- +// IMASAccountControl::GetSmtpAccountIdL() +// ---------------------------------------------------------------------------- +// +TSmtpAccount IMASAccountControl::GetSmtpAccountIdL( + const TMsvId aSmtpMailboxId ) + { + IMUM_STATIC_CONTEXT( IMASAccountControl::GetSmtpAccountIdL, 0, utils, KLogData ); + + CEmailAccounts* account = CEmailAccounts::NewLC(); + + TSmtpAccount smtpAccountId; + account->GetSmtpAccountL( aSmtpMailboxId, smtpAccountId ); + + CleanupStack::PopAndDestroy( account ); + account = NULL; + + return smtpAccountId; + } + +// ---------------------------------------------------------------------------- +// IMASAccountControl::CreateSettingKey() +// ---------------------------------------------------------------------------- +// +TUint32 IMASAccountControl::CreateSettingKey( + const TUint32 aAccountId, + const TUint32 aSetting, + const TUid& aMtmId ) + { + IMUM_STATIC_CONTEXT( IMASAccountControl::CreateSettingKey, 0, utils, KLogData ); + + return CreateBaseKeyFromAccountId( aAccountId, aMtmId ) + aSetting; + } + +// End of File