diff -r f742655b05bf -r d38647835c2e richcallsettingsengine/rcse2/src/rcseregistrybase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/richcallsettingsengine/rcse2/src/rcseregistrybase.cpp Wed Sep 01 12:29:57 2010 +0100 @@ -0,0 +1,382 @@ +/* +* Copyright (c) 2004-2010 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: Base for RCSE registry classes +* +*/ + + +//#include +//#include + + +#include "rcseregistrybase.h" +#include "rcsebackupobserver.h" +#include "rcsedefaultdbnames.h" +#include "rcseconstants.h" +#include "rcsepanic.h" +#include "rcseprivatecrkeys.h" +#include "rcselogger.h" +#include "rcsedbimporter.h" + + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +CRCSERegistryBase::CRCSERegistryBase( TRCSERegistryType aType ) + : iType( aType ) + { + } + +// --------------------------------------------------------------------------- +// BaseConstructL +// --------------------------------------------------------------------------- +// +void CRCSERegistryBase::BaseConstructL() + { + RCSELOGSTRING2( "CRCSERegistryBase::BaseConstructL(type=%d) - IN", iType ); + RCSELOGTHREAD(); + + // Set proper table and mask + switch ( iType ) + { + case EVoIPProfile: + { + iCenRepDb = CCenRepDatabaseUtil::NewL( KCRUidRCSE, + KRCSEProfileTable, + KRCSEColIncrement, + KRCSEColumnMask, + KRCSEIdCounter, + KRCSEColumnCountVoIP ); + break; + } + case EAudioCodecSetting: + { + iCenRepDb = CCenRepDatabaseUtil::NewL( KCRUidRCSECodec, + KRCSECodecTable, + KRCSEColIncrement, + KRCSEColumnMask, + KRCSEIdCounter, + KRCSEColumnCountCodec ); + + break; + } + default: + { + User::Leave( KErrNotSupported ); + } + }; + + iBackupObserver = CRCSEBackupObserver::NewL( *this ); + + TInt err( 0 ); + + // Check if Backup operation is running. + if ( iBackupObserver->IsBackupOperationRunning() ) + { + RCSELOGSTRING( "Backup active!" ); + iBackupActive = ETrue; + } + + if ( !iBackupActive && + CRCSEDbImporter::ImportExists() && + !CRCSEDbImporter::IsImportRunning() ) + { + TRAP( err, ImportSettingsL() ); + } + + RCSELOGSTRING( "CRCSERegistryBase::BaseConstructL() - OUT" ); + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CRCSERegistryBase::~CRCSERegistryBase() + { + RCSELOGSTRING2( + "CRCSERegistryBase::~CRCSERegistryBase(type=%d) - IN", iType ); + RCSELOGTHREAD(); + + if ( iBackupObserver ) + { + iBackupObserver->Cancel(); + delete iBackupObserver; + iBackupObserver = NULL; + } + + + delete iCenRepDb; + + RCSELOGSTRING( "CRCSERegistryBase::~CRCSERegistryBase() - OUT" ); + } + +// --------------------------------------------------------------------------- +// From class MRCSEBackupObserver. +// Handle backup events. +// --------------------------------------------------------------------------- +// +void CRCSERegistryBase::HandleBackupOperationEventL() + { + RCSELOGSTRING( "CRCSERegistryBase::HandleBackupOperationEventL() - IN" ); + RCSELOGTHREAD(); + + if ( iBackupObserver->IsBackupOperationRunning() ) + { + RCSELOGSTRING( "Backup active!" ); + iBackupActive = ETrue; + } + else + { + RCSELOGSTRING( "Backup not active!" ); + iBackupActive = EFalse; + } + + RCSELOGSTRING( "CRCSERegistryBase::HandleBackupOperationEventL() - OUT" ); + } + +// ----------------------------------------------------------------------------- +// CRCSERegistryBase::BeginL +// Prepares read/write operation. +// ----------------------------------------------------------------------------- +// +void CRCSERegistryBase::BeginL() + { + RCSELOGSTRING( "CRCSERegistryBase::BeginL() - IN" ); + RCSELOGTHREAD(); + + if ( iBackupActive ) + { + User::Leave( KErrNotReady ); + } + + else + { + RCSELOGSTRING( "Begin transaction" ); + + // Begin transaction. Method leaves 2 items in cleanup stack + // and they will be removed in CommitTransaction + iCenRepDb->BeginTransactionL(); + } + + RCSELOGSTRING( "CRCSERegistryBase::BeginL() - OUT" ); + } + +// ----------------------------------------------------------------------------- +// CRCSERegistryBase::EndL +// Finalize performed operation +// ----------------------------------------------------------------------------- +// +void CRCSERegistryBase::EndL() + { + RCSELOGSTRING( "CRCSERegistryBase::EndL() - IN" ); + RCSELOGTHREAD(); + + User::LeaveIfError( iCenRepDb->CommitTransaction() ); + + RCSELOGSTRING( "CRCSERegistryBase::EndL() - OUT" ); + } + +// ----------------------------------------------------------------------------- +// CRCSERegistryBase::ToDes +// Converts TInt32 to descriptor. +// ----------------------------------------------------------------------------- +// +TDesC& CRCSERegistryBase::ToDes( TInt32 aFrom, TDes& aTo ) + { + aTo.Zero(); + aTo.AppendNum( aFrom ); + return aTo; + } + +// ----------------------------------------------------------------------------- +// CRCSERegistryBase::ToDes +// Converts TUint32 to descriptor. +// ----------------------------------------------------------------------------- +// +TDesC& CRCSERegistryBase::ToDes( TUint32 aFrom, TDes& aTo ) + { + aTo.Zero(); + aTo.AppendNum( aFrom ); + return aTo; + } + +// ----------------------------------------------------------------------------- +// CRCSERegistryBase::ToDes +// Converts descriptor to TInt32. +// ----------------------------------------------------------------------------- +// +TInt32 CRCSERegistryBase::ToTInt32L( const TDesC& aFrom ) + { + TInt32 value; + TLex16 convert( aFrom ); + User::LeaveIfError( convert.Val( value ) ); + return value; + } + +// ----------------------------------------------------------------------------- +// CRCSERegistryBase::ToDes +// Converts descriptor to TUint32. +// ----------------------------------------------------------------------------- +// +TUint32 CRCSERegistryBase::ToTUint32L( const TDesC& aFrom) + { + TUint32 value; + TLex16 convert( aFrom ); + User::LeaveIfError( convert.Val( value, EDecimal ) ); + return value; + } + +// ----------------------------------------------------------------------------- +// CRCSERegistryBase::ImportSettingsL +// Import settings from db files and store to cenrep. +// ----------------------------------------------------------------------------- +// +void CRCSERegistryBase::ImportSettingsL() + { + RCSELOGSTRING( "CRCSERegistryBase::ImportSettingsL() - IN" ); + RCSELOGTHREAD(); + + CRCSEDbImporter* importer = CRCSEDbImporter::NewLC(); + importer->ImportAndStoreL(); + CleanupStack::PopAndDestroy( importer ); + + RCSELOGSTRING( "CRCSERegistryBase::ImportSettingsL() - OUT" ); + } + +// ----------------------------------------------------------------------------- +// CRCSERegistryBase::CreatePropertyL +// Create a new property and appends it to given property array +// ----------------------------------------------------------------------------- +// +void CRCSERegistryBase::CreatePropertyL( + TUint aPropertyName, + const TDesC& aPropertyValue, + RIpAppPropArray& aPropertyArray ) + { + CCenRepDatabaseProperty* property = CCenRepDatabaseProperty::NewLC(); + property->SetName( aPropertyName ); + User::LeaveIfError( property->SetValue( aPropertyValue ) ); + aPropertyArray.AppendL( property ); + CleanupStack::Pop( property ); + } + +// ----------------------------------------------------------------------------- +// CRCSERegistryBase::GetPropertyValueL +// Gets value of requested property from array +// ----------------------------------------------------------------------------- +// +void CRCSERegistryBase::GetPropertyValueL( + TUint aPropertyName, + TDes& aPropertyValue, + RIpAppPropArray& aPropertyArray ) + { + aPropertyValue.Zero(); + + const TInt count( aPropertyArray.Count() ); + for ( TInt i( 0 ); i < count; i++ ) + { + if ( aPropertyArray[i]->GetName() == aPropertyName ) + { + aPropertyValue = aPropertyArray[i]->GetDesValue(); + //delete aPropertyArray[i]; + //aPropertyArray.Remove( i ); + i = count; // Stop the loop + } + } + } + +// ----------------------------------------------------------------------------- +// CRCSERegistryBase::FindIdsByValueL +// Search entries that have this property and requested value. +// ----------------------------------------------------------------------------- +// +void CRCSERegistryBase::FindIdsByValueL( + TUint aPropertyName, + const TDesC& aPropertyValue, + RArray& aIdArray ) + { + RArray allEntries; + CleanupClosePushL( allEntries ); + + iCenRepDb->FindEntryIdsL( allEntries ); + + CCenRepDatabaseProperty* property = CCenRepDatabaseProperty::NewLC(); + + const TInt allCount( allEntries.Count() ); + + for ( TInt i( 0 ); i < allCount; i++ ) + { + TInt err = iCenRepDb->FindPropertyL( allEntries[i], aPropertyName, + *property ); + + if ( KErrNoMemory == err ) + { + User::Leave( err ); + } + + if ( KErrNone == err ) + { + // If properties match, add id to the id array. + if ( !property->GetDesValue().Compare( aPropertyValue ) ) + { + aIdArray.AppendL( allEntries[i] ); + } + } + } + + CleanupStack::PopAndDestroy( property ); + CleanupStack::PopAndDestroy( &allEntries ); + } + +// ----------------------------------------------------------------------------- +// CRCSERegistryBase::FindAllIdsL +// Search all ids of entries from cenrep db. +// ----------------------------------------------------------------------------- +// +void CRCSERegistryBase::FindAllIdsL( RArray& aIdArray ) + { + CleanupClosePushL( aIdArray ); + aIdArray.Reset(); + + RArray ids; + CleanupClosePushL( ids ); + + iCenRepDb->FindEntryIdsL( ids ); + + // TInt to TUint + const TInt count( ids.Count() ); + for ( TInt i( 0 ); i < count; i++ ) + { + aIdArray.AppendL( ids[ i ] ); + } + + CleanupStack::PopAndDestroy( &ids ); + CleanupStack::Pop( &aIdArray ); + } + +// ----------------------------------------------------------------------------- +// CRCSERegistryBase::CleanupDbPropArray +// Custom cleanup for cenrep db property array. +// ----------------------------------------------------------------------------- +// +void CRCSERegistryBase::CleanupDbPropArray( TAny* aPointer ) + { + RIpAppPropArray* array = static_cast( aPointer ); + array->ResetAndDestroy(); + } + +