email/imum/Utils/Src/IMASCenRepControl.cpp
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/imum/Utils/Src/IMASCenRepControl.cpp	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,457 @@
+/*
+* 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:  IMASCenRepControl.cpp
+*
+*/
+
+
+// INCLUDE FILES
+#include <e32base.h>
+#include <centralrepository.h>          // CRepository
+#include "MuiuDynamicHeader.h"
+
+#include "IMASCenRepControl.h"
+#include "ImumPanic.h"
+#include "ImumUtilsLogging.h"
+
+// EXTERNAL DATA STRUCTURES
+// EXTERNAL FUNCTION PROTOTYPES
+// CONSTANTS
+enum TICRCErrors
+    {
+    EICRCNoError = 0,
+    EICRCNoCenRepSession
+    };
+
+// MACROS
+// LOCAL CONSTANTS AND MACROS
+// MODULE DATA STRUCTURES
+// LOCAL FUNCTION PROTOTYPES
+// FORWARD DECLARATIONS
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ----------------------------------------------------------------------------
+// CIMASCenRepControl::CIMASCenRepControl()
+// ----------------------------------------------------------------------------
+//
+CIMASCenRepControl::CIMASCenRepControl()
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CIMASCenRepControl::~CIMASCenRepControl()
+// ----------------------------------------------------------------------------
+//
+CIMASCenRepControl::~CIMASCenRepControl()
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CIMASCenRepControl::ConstructL()
+// ----------------------------------------------------------------------------
+//
+void CIMASCenRepControl::ConstructL()
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CIMASCenRepControl::NewL()
+// ----------------------------------------------------------------------------
+//
+CIMASCenRepControl* CIMASCenRepControl::NewL()
+    {
+    IMUM_STATIC_CONTEXT( CIMASCenRepControl::NewL, 0, utils, KLogData );
+
+    CIMASCenRepControl* self = NewLC();
+    CleanupStack::Pop( self );
+
+    return self;
+    }
+
+// ----------------------------------------------------------------------------
+// CIMASCenRepControl::NewLC()
+// ----------------------------------------------------------------------------
+//
+CIMASCenRepControl* CIMASCenRepControl::NewLC()
+    {
+    IMUM_STATIC_CONTEXT( CIMASCenRepControl::NewLC, 0, utils, KLogData );
+
+    CIMASCenRepControl* self = new ( ELeave ) CIMASCenRepControl();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+
+    return self;
+    }
+
+/******************************************************************************
+
+    Storer Tools
+
+******************************************************************************/
+
+// ----------------------------------------------------------------------------
+// CIMASCenRepControl::SetActiveCentralRepository()
+// ----------------------------------------------------------------------------
+//
+void CIMASCenRepControl::SetActiveCentralRepository(
+    CRepository& aRepository )
+    {
+    iCenRep = &aRepository;
+    }
+
+// ----------------------------------------------------------------------------
+// CIMASCenRepControl::SetActiveBaseKey()
+// ----------------------------------------------------------------------------
+//
+void CIMASCenRepControl::SetActiveBaseKey(
+    const TUint32 aAccountId,
+    const TUid& aProtocol )
+    {
+    iBaseKey = IMASAccountControl::CreateBaseKeyFromAccountId(
+        aAccountId, aProtocol );
+    }
+
+// ----------------------------------------------------------------------------
+// CIMASCenRepControl::SetActiveBaseKey()
+// ----------------------------------------------------------------------------
+//
+void CIMASCenRepControl::SetActiveBaseKey(
+    const TUint32 aExtendedAccountId )
+    {
+    iBaseKey = IMASAccountControl::CreateBaseKeyFromExtendedAccountId(
+        aExtendedAccountId );
+    }
+
+// ----------------------------------------------------------------------------
+// CIMASCenRepControl::CreateToAccountL()
+// ----------------------------------------------------------------------------
+//
+void CIMASCenRepControl::CreateToAccountL(
+    const TUint32 aSetting,
+    const TInt aValue )
+    {
+    __ASSERT_DEBUG( iCenRep != NULL,
+        User::Panic( KIMASCenRepCtrlPanic, EICRCNoCenRepSession ) );
+
+    // Determine the setting id and create the new key
+    TUint32 settingId = iBaseKey + aSetting;
+    TInt err = iCenRep->Create( settingId, aValue );
+    // if the setting already exists, this means that there are some lingering
+    // extended settings from a mailbox which was e.g. deleted using
+    // CEmailAccounts. We can just overwrite the setting
+    if( err == KErrAlreadyExists )
+    	{
+    	SetToAccountL( aSetting, aValue );
+    	}
+    else
+    	{
+    	User::LeaveIfError( err );
+    	}
+    }
+
+// ----------------------------------------------------------------------------
+// CIMASCenRepControl::CreateToAccountL()
+// ----------------------------------------------------------------------------
+//
+void CIMASCenRepControl::CreateToAccountL(
+    const TUint32 aSetting,
+    const TDesC& aString )
+    {
+    __ASSERT_DEBUG( iCenRep != NULL,
+        User::Panic( KIMASCenRepCtrlPanic, EICRCNoCenRepSession ) );
+
+    // Determine the setting id and create the new key
+    TUint32 settingId = iBaseKey + aSetting;
+    TInt err = iCenRep->Create( settingId, aString );
+    // if the setting already exists, this means that there are some lingering
+    // extended settings from a mailbox which was e.g. deleted using
+    // CEmailAccounts. We can just overwrite the setting
+    if( err == KErrAlreadyExists )
+    	{
+    	SetToAccountL( aSetting, aString );
+    	}
+    else
+    	{
+    	User::LeaveIfError( err );
+    	}
+    }
+
+// ----------------------------------------------------------------------------
+// CIMASCenRepControl::CreateToAccountL()
+// ----------------------------------------------------------------------------
+//
+void CIMASCenRepControl::CreateToAccountL(
+    const TInt aSettingHigh,
+    const TInt aSettingLow,
+    const TInt64 aValue )
+    {
+    // The high and low part has to be stored separately
+    CreateToAccountL( aSettingHigh, I64HIGH( aValue ) );
+    CreateToAccountL( aSettingLow, I64LOW( aValue ) );
+    }
+
+// ----------------------------------------------------------------------------
+// CIMASCenRepControl::DeleteFromAccountL()
+// ----------------------------------------------------------------------------
+//
+void CIMASCenRepControl::DeleteFromAccountL(
+    const TInt aSetting ) const
+    {
+    __ASSERT_DEBUG( iCenRep != NULL,
+        User::Panic( KIMASCenRepCtrlPanic, EICRCNoCenRepSession ) );
+
+    // Load the values
+    TUint32 settingId = iBaseKey + aSetting;
+    User::LeaveIfError( iCenRep->Delete( settingId ) );
+    }
+
+// ----------------------------------------------------------------------------
+// CIMASCenRepControl::DeleteFromAccountL()
+// ----------------------------------------------------------------------------
+//
+void CIMASCenRepControl::DeleteFromAccountL(
+    const TInt aSettingHigh,
+    const TInt aSettingLow ) const
+    {
+    // Load the values
+    TUint32 settingId = iBaseKey + aSettingHigh;
+    User::LeaveIfError( iCenRep->Delete( settingId ) );
+
+    settingId = iBaseKey + aSettingLow;
+    User::LeaveIfError( iCenRep->Delete( settingId ) );
+    }
+
+// ----------------------------------------------------------------------------
+// CIMASCenRepControl::SetToAccountL()
+// ----------------------------------------------------------------------------
+//
+void CIMASCenRepControl::SetToAccountL(
+    const TUint32 aSetting,
+    const TInt aValue )
+    {
+    __ASSERT_DEBUG( iCenRep != NULL,
+        User::Panic( KIMASCenRepCtrlPanic, EICRCNoCenRepSession ) );
+
+    // Determine the setting id and create the new key
+    TUint32 settingId = iBaseKey + aSetting;
+    User::LeaveIfError( iCenRep->Set( settingId, aValue ) );
+    }
+
+// ----------------------------------------------------------------------------
+// CIMASCenRepControl::SetToAccountL()
+// ----------------------------------------------------------------------------
+//
+void CIMASCenRepControl::SetToAccountL(
+    const TUint32 aSetting,
+    const TDesC& aString )
+    {
+    __ASSERT_DEBUG( iCenRep != NULL,
+        User::Panic( KIMASCenRepCtrlPanic, EICRCNoCenRepSession ) );
+
+    // Determine the setting id and create the new key
+    TUint32 settingId = iBaseKey + aSetting;
+    User::LeaveIfError( iCenRep->Set( settingId, aString ) );
+    }
+
+// ----------------------------------------------------------------------------
+// CIMASCenRepControl::SetToAccountL()
+// ----------------------------------------------------------------------------
+//
+void CIMASCenRepControl::SetToAccountL(
+    const TInt aSettingHigh,
+    const TInt aSettingLow,
+    const TInt64 aSetting )
+    {
+    // The high and low part has to be stored separately
+    SetToAccountL( aSettingHigh, I64HIGH( aSetting ) );
+    SetToAccountL( aSettingLow, I64LOW( aSetting ) );
+    }
+
+// ----------------------------------------------------------------------------
+// CIMASCenRepControl::GetFromAccountL()
+// ----------------------------------------------------------------------------
+//
+TInt64 CIMASCenRepControl::GetFromAccountL(
+    const TInt aSettingHigh,
+    const TInt aSettingLow ) const
+    {
+    TInt64 value = KErrNone;
+    User::LeaveIfError( GetFromAccount( aSettingHigh, aSettingLow, value ) );
+
+    return value;
+    }
+
+// ----------------------------------------------------------------------------
+// CIMASCenRepControl::GetFromAccountL()
+// ----------------------------------------------------------------------------
+//
+TInt CIMASCenRepControl::GetFromAccountL(
+    const TInt aSetting ) const
+    {
+    TInt value = KErrNotFound;
+    User::LeaveIfError( GetFromAccount( aSetting, value ) );
+
+    return value;
+    }
+
+// ----------------------------------------------------------------------------
+// CIMASCenRepControl::GetTextFromAccountL()
+// ----------------------------------------------------------------------------
+//
+void CIMASCenRepControl::GetTextFromAccountL(
+    TDes& aText,
+    const TInt aSetting ) const
+    {
+    User::LeaveIfError( GetTextFromAccount( aText,  aSetting ) );
+    }
+
+// ----------------------------------------------------------------------------
+// CIMASCenRepControl::SetActiveDefaultDataKey()
+// ----------------------------------------------------------------------------
+//
+void CIMASCenRepControl::SetActiveDefaultDataKey()
+    {
+    iBaseKey = 0;
+    }
+
+// ----------------------------------------------------------------------------
+// CIMASCenRepControl::GetFromAccount()
+// ----------------------------------------------------------------------------
+//
+TInt CIMASCenRepControl::GetFromAccount( const TInt aSettingHigh,
+    const TInt aSettingLow,
+    TInt64& aSettingValue ) const
+    {
+    __ASSERT_DEBUG( iCenRep != NULL,
+        User::Panic( KIMASCenRepCtrlPanic, EICRCNoCenRepSession ) );
+
+    // Prepare the number
+    TInt high = 0;
+    TInt low = 0;
+    TInt error = KErrNotFound;
+
+    // Load the values
+    TUint32 settingId = iBaseKey + aSettingHigh;
+    error = iCenRep->Get( settingId, high );
+
+    settingId = iBaseKey + aSettingLow;
+
+    if ( error == KErrNone )
+        {
+        error = iCenRep->Get( settingId, low );
+        }
+    // Return the combined value
+    if ( error == KErrNone )
+        {
+        aSettingValue = MAKE_TINT64( high, low );
+        }
+
+    return error;
+    }
+
+// ----------------------------------------------------------------------------
+// CIMASCenRepControl::GetFromAccount()
+// ----------------------------------------------------------------------------
+//
+TInt CIMASCenRepControl::GetFromAccount(
+    const TInt aSetting, TInt& aSettingValue ) const
+    {
+    __ASSERT_DEBUG( iCenRep != NULL,
+        User::Panic( KIMASCenRepCtrlPanic, EICRCNoCenRepSession ) );
+
+    // Load the values
+    TUint32 settingId = iBaseKey + aSetting;
+    return iCenRep->Get( settingId, aSettingValue );
+    }
+
+// ----------------------------------------------------------------------------
+// CIMASCenRepControl::GetTextFromAccount()
+// ----------------------------------------------------------------------------
+//
+TInt CIMASCenRepControl::GetTextFromAccount(
+    TDes& aText,
+    const TInt aSetting ) const
+    {
+    __ASSERT_DEBUG( iCenRep != NULL,
+        User::Panic( KIMASCenRepCtrlPanic, EICRCNoCenRepSession ) );
+
+    // Load the values
+    TUint32 settingId = iBaseKey + aSetting;
+    return iCenRep->Get( settingId, aText );
+    }
+
+// ----------------------------------------------------------------------------
+// CIMASCenRepControl::GetTextFromAccount()
+// ----------------------------------------------------------------------------
+//
+TInt CIMASCenRepControl::GetTextFromAccount(
+    TDes8& aText,
+    const TInt aSetting ) const
+    {
+    __ASSERT_DEBUG( iCenRep != NULL,
+        User::Panic( KIMASCenRepCtrlPanic, EICRCNoCenRepSession ) );
+
+    // Load the values
+    TUint32 settingId = iBaseKey + aSetting;
+    return iCenRep->Get( settingId, aText );
+    }
+
+// ----------------------------------------------------------------------------
+// CIMASCenRepControl::GetFromAccountOrCreateL()
+// ----------------------------------------------------------------------------
+//
+TInt CIMASCenRepControl::GetFromAccountOrCreateL(
+    const TUint32 aSetting, TInt aDefaultValue )
+    {
+    TInt value = aDefaultValue;
+    TInt error = GetFromAccount( aSetting, value );
+    
+    if( error == KErrNotFound )
+        {
+        CreateToAccountL( aSetting, aDefaultValue );
+        }
+    else
+        {
+        User::LeaveIfError( error );
+        }
+
+    return value;
+    }
+
+// ----------------------------------------------------------------------------
+// CIMASCenRepControl::GetFromAccountOrCreateL()
+// ----------------------------------------------------------------------------
+//
+TInt64 CIMASCenRepControl::GetFromAccountOrCreateL(
+    const TUint32 aSettingHigh,
+    const TUint32 aSettingLow,
+    TInt64 aDefaultValue )
+    {
+    TInt64 value = aDefaultValue;
+    TInt error = GetFromAccount( aSettingHigh, aSettingLow, value );
+    
+    if( error == KErrNotFound )
+        {
+        CreateToAccountL( aSettingHigh, aSettingLow, aDefaultValue );
+        }
+    else
+        {
+        User::LeaveIfError( error );
+        }
+
+    return value;
+    }
+	
+// End of File