cbs/CbsServer/ServerSrc/CCbsDbImpSettings.cpp
changeset 46 2fa1fa551b0b
parent 42 35488577e233
child 48 78df25012fda
--- a/cbs/CbsServer/ServerSrc/CCbsDbImpSettings.cpp	Mon Aug 23 15:50:31 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,476 +0,0 @@
-/*
-* Copyright (c) 2003 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 module contains the implementation of CCbsDbImpSettings class 
-*                member functions.
-*    
-*                This class represents CBS settings stored in the database.
-*                A functionality is provided here to access, modify, store and restore
-*                settings.
-*
-*/
-
-
-//  INCLUDE FILES
-#include <centralrepository.h>
-#include "CbsServerPrivateCRKeys.h"
-#include "MCbsDbSettingsObserver.H"
-#include "CbsServerPanic.h"
-#include "CCbsDbImpSettings.H"
-#include "CbsDbConstants.h"
-#include "CbsStreamHelper.h"
-#include "CbsUtils.h"
-#include "CbsLogger.h"
-
-// CONSTANTS
-// Used if languages cannot be read from Shared Data.
-const TInt8 KDefaultsLanguageSubscribedValue = '1';
-
-
-// ================= MEMBER FUNCTIONS =======================
-
-// -----------------------------------------------------------------------------
-// CCbsDbImpSettings::CCbsDbImpSettings
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CCbsDbImpSettings::CCbsDbImpSettings(  
-    CCbsDbImp& aDatabase )
-    : iDatabase( aDatabase )
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsDbImp::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CCbsDbImpSettings::ConstructL()
-    {
-    // Create an array for settings event observers.
-    iObservers = new ( ELeave ) CArrayFixFlat< MCbsDbSettingsObserver* >( 
-        KCbsDbObserverArraySize );
-
-    TRAPD( result, LoadSettingsL() );
-	if ( result != KErrNone )   
-		{
-		User::Leave( result );
-		}
-		
-    __TEST_INVARIANT;
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsDbImpSettings::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CCbsDbImpSettings* CCbsDbImpSettings::NewL( CCbsDbImp& aDatabase )
-    {
-    CCbsDbImpSettings* self = 
-        new ( ELeave ) CCbsDbImpSettings( aDatabase );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop();
-    return self;
-    }
-    
-// Destructor
-CCbsDbImpSettings::~CCbsDbImpSettings()
-    {
-    CBSLOGSTRING("CBSSERVER: >>> CCbsDbImpSettings::~CCbsDbImpSettings()");
-    delete iObservers;
-    CBSLOGSTRING("CBSSERVER: <<< CCbsDbImpSettings::~CCbsDbImpSettings()");
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsDbImpSettings::SetTopicDetectionStatusL
-// Changes the topic detection status.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsDbImpSettings::SetTopicDetectionStatusL( 
-    TBool aStatus )
-    {
-
-    // If the value does not change we do nothing but return
-    if ( aStatus != iSettings.iTopicDetectionStatus ) 
-        {
-        // First we change the status value in cache.
-        iSettings.iTopicDetectionStatus = aStatus;
-
-        // Now we try to save the modified settings to the store
-        if ( !SaveSettings() ) 
-            {        
-            // If an error occured, we leave the status unchanged.
-            if ( iSettings.iTopicDetectionStatus ) 
-                {
-                iSettings.iTopicDetectionStatus = EFalse;
-                }
-            else 
-                {
-                iSettings.iTopicDetectionStatus = ETrue;
-                }
-
-            // and then leave again
-            User::Leave( KErrWrite );
-            }
-
-        // Inform observers about the changed status
-        TInt amountOfObservers( iObservers->Count() );
-        for ( TInt i( 0 ); i < amountOfObservers; i++ )
-            {
-            iObservers->At( i )->TopicDetectionStatusChangedIndL();
-            }                
-        }    
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsDbImpSettings::SaveSettings
-// Saves the settings to CenRep
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TBool CCbsDbImpSettings::SaveSettings()
-    {
-    __TEST_INVARIANT;
-    TBool result( ETrue );
-
-    // Try to save the settings.
-    TRAPD( error, DoSaveSettingsL() );
-    if ( error != KErrNone )
-        {
-        // Some kind of failure occurred.
-        __TEST_INVARIANT;        
-        result = EFalse;
-        }
-
-    __TEST_INVARIANT;
-    return result;
-    }    
-
-// -----------------------------------------------------------------------------
-// CCbsDbImpSettings::DoSaveSettingsL
-// Saves the settings to CenRep
-// The method leaves in case the writing to the does not succeed.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsDbImpSettings::DoSaveSettingsL()
-    {
-    
-    TInt reception( iSettings.iReceptionStatus );
-    TInt topicDetection( iSettings.iTopicDetectionStatus );
-    
-    TBuf< ECbsCount > languages; 
-   
-    for ( TInt i( 0 ); i < ECbsCount; i++ )
-        {
-        languages.AppendNum( iSettings.iLanguageStatus.iLanguages[i] );	
-        }
-   
-    // Connecting and initialization
-    CRepository* repository = CRepository::NewL( KCRUidCellBroadcast );
- 
-    // Get the values from Central Repository
-    repository->Set( KCbsReception, reception );
-    repository->Set( KCbsTopicDetection, topicDetection );
-    repository->Set( KCbsLanguages, languages );
-    
-    // Closing the connection
-    delete repository;
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsDbImpSettings::GetTopicDetectionStatus
-// Returns the current value of the topic detection status.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsDbImpSettings::GetTopicDetectionStatus( 
-    TBool& aStatus ) const
-    {
-    // We just give the asked status value from cache to aStatus
-    aStatus = iSettings.iTopicDetectionStatus;
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsDbImpSettings::SetReceptionStatusL
-// Changes the reception status.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsDbImpSettings::SetReceptionStatusL( 
-    TBool aStatus )    
-    {
-
-    // If the value does not change we do nothing but return
-    if ( aStatus != iSettings.iReceptionStatus ) 
-        {
-        // First we change the status value in iSettings
-        iSettings.iReceptionStatus = aStatus;
-
-        // Now we try to save the modified settings to the store
-        if ( !SaveSettings() ) 
-            {
-            // If an error occured, we leave the status unchanged.
-            if ( iSettings.iReceptionStatus ) 
-                {
-                iSettings.iReceptionStatus = EFalse;
-                }
-            else 
-                {
-                iSettings.iReceptionStatus = ETrue;
-                }
-
-            // and then leave.
-            User::Leave( KErrWrite );
-            }
-
-        // Inform observers about the changed status
-        TInt amountOfObservers( iObservers->Count() );
-        for ( TInt i( 0 ); i < amountOfObservers; i++ )
-            {
-            iObservers->At( i )->ReceptionStatusChangedIndL();
-            }                
-        }    
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsDbImpSettings::GetReceptionStatus
-// Returns the current value of the topic reception status.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsDbImpSettings::GetReceptionStatus( 
-    TBool& aStatus ) const
-    {
-    // We just give the asked status value from cache to aStatus
-    aStatus = iSettings.iReceptionStatus;
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsDbImpSettings::SetLanguagesL
-// Changes the preferred languages.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-// 
-void CCbsDbImpSettings::SetLanguagesL( 
-    const TCbsDbLanguages& aLanguages )
-    {
-    __TEST_INVARIANT;
-
-    // Compare language settings.
-    if ( !IsLanguagesEqual( aLanguages, iSettings.iLanguageStatus ) ) 
-        {
-        // We take a backup of the language status before changing the value.
-        TCbsDbLanguages oldLanguageStatus = iSettings.iLanguageStatus;
-        
-        // We change the language status value
-        iSettings.iLanguageStatus = aLanguages;
-
-        // Now we try to save the modified settings struct to the store
-        if ( !SaveSettings() ) 
-            {
-            // If an error occured, we leave the settings unchanged.
-            iSettings.iLanguageStatus = oldLanguageStatus;
-            User::Leave( KErrWrite );
-            }
-
-        // Inform observers about the changed status
-        TInt amountOfObservers( iObservers->Count() );
-        for ( TInt i( 0 ); i < amountOfObservers; i++ )
-            {
-            iObservers->At( i )->LanguagesChangedIndL();
-            }    
-        }
-    
-    __TEST_INVARIANT;
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsDbImpSettings::GetLanguages
-// Returns the preferred languages.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-// 
-void CCbsDbImpSettings::GetLanguages( 
-    TCbsDbLanguages& aLanguages ) const
-    {
-    // We just give the asked status value from cache to aLanguages
-    aLanguages = iSettings.iLanguageStatus;
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsDbImpSettings::AddObserverL
-// Adds an observer to the settings.
-// Observers are notified when an event occurs on the settings.    
-// Panics on debug mode if aObserver is null.  
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-// 
-void CCbsDbImpSettings::AddObserverL( 
-    MCbsDbSettingsObserver* aObserver )
-    {
-    __TEST_INVARIANT;
-    __ASSERT_DEBUG( aObserver!=0, CbsServerPanic( ECbsObserverNull ) );
-    iObservers->AppendL( aObserver );
-    __TEST_INVARIANT;
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsDbImpSettings::RemoveObserver
-// Removes database observer.
-// The method will panic, if there is no such observer added
-// or the given observer is null.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-// 
-void CCbsDbImpSettings::RemoveObserver( 
-    const MCbsDbSettingsObserver* aObserver )
-    {
-    __ASSERT_DEBUG( aObserver != 0, CbsServerPanic( ECbsObserverNull ) );
-
-    // Find the observer to remove
-    TInt amountOfObservers( iObservers->Count() );
-    TBool found( EFalse );
-
-    for ( TInt index( 0 ); ( index < amountOfObservers ) && !found; index++ )
-        {
-        if ( aObserver == iObservers->At( index ) )
-            {
-            iObservers->Delete( index );
-            iObservers->Compress();  
-            found = ETrue;            
-            }
-        }
-
-    // Panic if the observer was not found
-    if ( !found )
-        {
-        CbsServerPanic( ECbsObserverNotFound );
-        }    
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsDbImpSettings::LoadSettingsL
-// Loads the settings, i.e. values for reception status, topic detection
-// and language subscriptions.
-// These values are retrieved from Central Repository, associated with
-// the UID of CbsServer.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-// 
-void CCbsDbImpSettings::LoadSettingsL()
-    {
-    CBSLOGSTRING("CBSSERVER: >>> CCbsDbImpSettings::LoadSettingsL()");
-    
-    // Connecting and initialization
-    CRepository* repository = CRepository::NewL( KCRUidCellBroadcast );
-    
-    TBuf< ECbsCount > languages;
-    languages.Zero();
-
-    TInt reception( 0 );
-    TInt topicDetection( 0 );
-    
-    // Get the values from Central Repository
-    repository->Get( KCbsReception, reception );
-    repository->Get( KCbsTopicDetection, topicDetection );
-    repository->Get( KCbsLanguages, languages );
-    
-    // Closing the connection
-    delete repository;
-    
-    CBSLOGSTRING("CBSSERVER: CCbsDbImpSettings::LoadSettingsL(): Repository reading finished.");
-
-    iSettings.iReceptionStatus = reception == 0 ? EFalse : ETrue;
-    iSettings.iTopicDetectionStatus = topicDetection == 0 ? EFalse : ETrue;
-
-    if ( languages.Length() != ECbsCount )
-        {
-        User::Leave( KErrCorrupt );
-        }
-    
-    for ( TInt i( 0 ); i < ECbsCount; i++ )
-        {
-        iSettings.iLanguageStatus.iLanguages[ i ] = 
-            ( languages[ i ] == KDefaultsLanguageSubscribedValue );
-        }
-    CBSLOGSTRING("CBSSERVER: <<< CCbsDbImpSettings::LoadSettingsL()");
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsDbImpSettings::IsLanguagesEqual
-// Determines whether the language settings are equal. 
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-// 
-TBool CCbsDbImpSettings::IsLanguagesEqual( 
-    const TCbsDbLanguages& aLanguage1, 
-    const TCbsDbLanguages& aLanguage2 ) const
-    {
-    // Go through each language settings.
-    for ( TInt index( 0 ); index < ECbsCount; index++ )
-        {
-        if ( aLanguage1.iLanguages[ index ] != aLanguage2.iLanguages[ index ] )
-            {
-            return EFalse;
-            }
-        }
-
-    // Equal.
-    return ETrue;
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsDbImpSettings::SetDefaultLanguageSettings
-// Sets default language settings.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-// 
-void CCbsDbImpSettings::SetDefaultLanguageSettings( 
-    TCbsDbLanguages& aLanguage ) const
-    {
-    // First, set all languages to false.
-    for ( TInt index( 0 ); index < ECbsAll; index++ )
-        {
-        aLanguage.iLanguages[ index ] = EFalse;
-        }
-
-    // And then set the "All"-choice to true.
-    aLanguage.iLanguages[ ECbsAll ] = ETrue;
-    }
-
-// -----------------------------------------------------------------------------
-// CCbsDbImpSettings::__DbgTestInvariant
-// Checks that the object is in a valid state, and panics if it is not.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-// 
-void CCbsDbImpSettings::__DbgTestInvariant() const
-    {
-#if defined(_DEBUG)
-    if ( iSettings.iReceptionStatus < 0 || iSettings.iReceptionStatus > 1 ||
-        iSettings.iTopicDetectionStatus < 0 || 
-        iSettings.iTopicDetectionStatus > 1 ||
-        iObservers == NULL )
-        {
-        User::Invariant();
-        }
-#endif
-    }
-
-// ========================== OTHER EXPORTED FUNCTIONS =========================
-//  End of File