email/imum/Utils/Src/IMASAccountControl.cpp
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/imum/Utils/Src/IMASAccountControl.cpp	Thu Dec 17 08:44:11 2009 +0200
@@ -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 <e32base.h>
+#include <SendUiConsts.h>
+#include <centralrepository.h>
+
+#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<TImapAccount> 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<TPopAccount> 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