--- /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