ipsservices/ipssossettings/src/ipssetdatactrlaccount.cpp
changeset 0 8466d47a6819
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ipsservices/ipssossettings/src/ipssetdatactrlaccount.cpp	Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,238 @@
+/*
+* 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 Account, Account. 
+*
+*/
+
+
+#include "emailtrace.h"
+#include <e32base.h>
+#include <SendUiConsts.h>
+
+#include "ipssetutils.h"
+#include "ipssetdatactrlaccount.h"
+#include "ipssetdatastorer.h"
+#include "ipssetutilsexception.h"
+
+enum TIpsSetUiAccountErrors
+    {
+    EIpsSetUiNoError = 0,
+    EIpsSetUiMboxToAccIdMtmError,
+    EIpsSetUiAccIdToExtIdMtmError,
+    EIpsSetUiExtIdToAccIdMtmError
+    };
+
+// Account Id conversion to Extension Id
+enum TIpsSetUiKeyShifts
+    {
+    EIpsSetUiKeyShiftImap4  = 0,
+    EIpsSetUiKeyShiftPop3   = 8
+    };
+
+const TInt KIpsSetDataShiftAccountId = 8;
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ----------------------------------------------------------------------------
+// IpsSetDataCtrlAccount::CreateBaseKeyFromAccountId()
+// ----------------------------------------------------------------------------
+//
+TUint32 IpsSetDataCtrlAccount::CreateBaseKeyFromAccountId(
+    const TUint32 aAccountId,
+    const TUid& aProtocol )
+    {
+    FUNC_LOG;
+    TUint32 extendedAccountId =
+        AccountIdToExtendedAccountId( aAccountId, aProtocol );
+    return ( extendedAccountId << KIpsSetDataShiftAccountId );
+    }
+
+// ----------------------------------------------------------------------------
+// IpsSetDataCtrlAccount::CreateBaseKeyFromExtendedAccountId()
+// ----------------------------------------------------------------------------
+//
+TUint32 IpsSetDataCtrlAccount::CreateBaseKeyFromExtendedAccountId(
+    const TUint32 aExtendedAccountId )
+    {
+    FUNC_LOG;
+    return ( aExtendedAccountId << KIpsSetDataShiftAccountId );
+    }
+
+// ----------------------------------------------------------------------------
+// IpsSetDataCtrlAccount::MailboxIdToAccountIdL()
+// ----------------------------------------------------------------------------
+//
+TUint32 IpsSetDataCtrlAccount::MailboxIdToAccountIdL(
+    const TMsvId aMailboxId,
+    const TUid& aMtmId )
+    {
+    FUNC_LOG;
+    TUint32 accountId = 0;
+
+    switch ( aMtmId.iUid )
+        {
+        case KSenduiMtmSmtpUidValue:
+            accountId = IpsSetUtils::GetSmtpAccountIdL(
+                aMailboxId ).iSmtpAccountId;
+            break;
+
+        case KSenduiMtmPop3UidValue:
+            accountId = IpsSetUtils::GetPopAccountIdL(
+                aMailboxId ).iPopAccountId;
+            break;
+
+        case KSenduiMtmImap4UidValue:
+            accountId = IpsSetUtils::GetImapAccountIdL(
+                aMailboxId ).iImapAccountId;
+            break;
+
+        default:
+            {
+            IPSASSERT_LEAVE_OR_PANIC_L( EAccountCtrl, EInvalidAccount );
+            }
+            break;
+        }
+
+    return accountId;
+    }
+
+// ----------------------------------------------------------------------------
+// IpsSetDataCtrlAccount::AccountIdToMailboxId()
+// ----------------------------------------------------------------------------
+//
+TMsvId IpsSetDataCtrlAccount::AccountIdToMailboxId(
+    CEmailAccounts& aAccounts,
+    const TUint32 aAccountId,
+    const TUid& aMtmId )
+    {
+    FUNC_LOG;
+    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;
+    }
+
+
+// ----------------------------------------------------------------------------
+// IpsSetDataCtrlAccount::AccountIdToExtendedAccountId()
+// ----------------------------------------------------------------------------
+//
+TUint32 IpsSetDataCtrlAccount::AccountIdToExtendedAccountId(
+    const TUint32 aAccountId,
+    const TUid& aMtmId )
+    {
+    FUNC_LOG;
+    // Imap4 accounts are 0x01, 0x02, 0x03, 0x04, 0x05, 0x06
+    if ( aMtmId == KSenduiMtmImap4Uid )
+        {
+        return ( aAccountId << EIpsSetUiKeyShiftImap4 );
+        }
+    // Pop3 accounts are 0x100, 0x200, 0x300, 0x400, 0x500, 0x600
+    else if ( aMtmId == KSenduiMtmPop3Uid )
+        {
+        return ( aAccountId << EIpsSetUiKeyShiftPop3 );
+        }
+    else
+        {
+        IPSASSERT_LEAVE_OR_PANIC_L( EAccountCtrl, EInvalidMtm );
+        }
+
+    return 0;
+    }
+
+// ----------------------------------------------------------------------------
+// IpsSetDataCtrlAccount::ExtendedAccountIdToAccountId()
+// ----------------------------------------------------------------------------
+//
+TUint32 IpsSetDataCtrlAccount::ExtendedAccountIdToAccountId(
+    const TUint32 aExtendedAccountId,
+    const TUid& aMtmId )
+    {
+    FUNC_LOG;
+    // Imap4 accounts are 0x01, 0x02, 0x03, 0x04, 0x05, 0x06
+    if ( aMtmId == KSenduiMtmImap4Uid )
+        {
+        return ( aExtendedAccountId >> EIpsSetUiKeyShiftImap4 );
+        }
+    // Pop3 accounts are 0x100, 0x200, 0x300, 0x400, 0x500, 0x600
+    else if ( aMtmId == KSenduiMtmPop3Uid )
+        {
+        return ( aExtendedAccountId >> EIpsSetUiKeyShiftPop3 );
+        }
+    else
+        {        
+        IPSASSERT_LEAVE_OR_PANIC_L( EAccountCtrl, EInvalidMtm );
+        }
+
+    return 0;
+    }
+
+// ----------------------------------------------------------------------------
+// IpsSetDataCtrlAccount::CreateSettingKey()
+// ----------------------------------------------------------------------------
+//
+TUint32 IpsSetDataCtrlAccount::CreateSettingKey(
+    const TUint32 aAccountId,
+    const TUint32 aSetting,
+    const TUid& aMtmId )
+    {
+    FUNC_LOG;
+    return CreateBaseKeyFromAccountId( aAccountId, aMtmId ) + aSetting;
+    
+    }    
+// End of File
+