mmserv/radioutility/fmpresetutility/src/RadioFmPresetCentralRepositoryHandler.cpp
branchRCL_3
changeset 20 0ac9a5310753
parent 0 71ca22bcf22a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmserv/radioutility/fmpresetutility/src/RadioFmPresetCentralRepositoryHandler.cpp	Wed Sep 01 12:23:00 2010 +0100
@@ -0,0 +1,826 @@
+/*
+* Copyright (c) 2005 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:  Contains implementation of the CCentralRepositoryHandler class. 
+*
+*/
+
+
+//  INCLUDE FILES
+#include "RadioFmPresetCentralRepositoryHandler.h"
+#include "RadioFmPresetRadioSettings.h" 
+#include <centralrepository.h>
+#include "RadioFmPresetCRKeys.h"
+#include "RadioFmPresetUtilityBody.h"		
+#include "debug.h"
+#include <s32mem.h>
+
+
+// ============= STATIC FUNCTIONS ==============
+
+static TInt ChannelIndexL( const TInt aChannelIndex )
+    {
+    if ( ( KMaxNumberOfPresetStations <= aChannelIndex ) ||
+            ( 0 >  aChannelIndex ) )
+        {
+        User::Leave( KErrArgument );
+        }
+    return KFmRadioPresetChannel1 +
+        ( KNbrOfParametersPerChannelSequence * (aChannelIndex) );
+    }
+
+// ----------------------------------------------------
+// CalculateNameIndexL
+// Calculates key index for channel's name parameter for.
+// Returns: key index of channel name parameter
+// ----------------------------------------------------
+// 
+static TInt CalculateNameIndexL( TInt aChannelIndex )
+    {
+    return (ChannelIndexL( aChannelIndex ) + KChannelNameOffset);
+    }
+
+// ----------------------------------------------------
+// CalculateFrequencyIndexL
+// Calculates key index for channel's frequency parameter.
+// Returns: key index of channel frequency parameter
+// ----------------------------------------------------
+// 
+static TInt CalculateFrequencyIndexL( TInt aChannelIndex )
+    {
+    return (ChannelIndexL( aChannelIndex ) + KFrequencyOffset);
+    }
+
+// ----------------------------------------------------
+// CalculateUrlIndexL
+// Calculates key index for channel's URL parameter.
+// Returns: key index of channel URL parameter
+// ----------------------------------------------------
+// 
+static TInt CalculateUrlIndexL( TInt aChannelIndex )
+    {
+    return (ChannelIndexL( aChannelIndex ) + KUrlOffset);
+    }
+
+// ----------------------------------------------------
+// CalculateRestOfParametersIndexL
+// Calculates key index for channel's other parameters.
+// Returns: key index of channel other parameters
+// ----------------------------------------------------
+// 
+static TInt CalculateRestOfParametersIndexL( TInt aChannelIndex )
+    {
+    return (ChannelIndexL( aChannelIndex ) + KRestOfParametersOffset);
+    }
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ----------------------------------------------------
+// CCentralRepositoryHandler::CCentralRepositoryHandler
+// Default class constructor.
+// ----------------------------------------------------
+//
+CCentralRepositoryHandler::CCentralRepositoryHandler(
+    TRadioSettings& aRadioSettings)  // a reference to aRadioSettings
+    :iRadioSettings(&aRadioSettings)
+    {
+    FTRACE(FPrint(_L("calling CCentralRepositoryHandler::NewL()")));
+    }
+
+// ----------------------------------------------------
+// CCentralRepositoryHandler::ConstructL
+// Second phase class constructor.
+// ----------------------------------------------------
+//
+void CCentralRepositoryHandler::ConstructL()
+    {
+    RDebug::Print(_L("entering CCentralRepositoryHandler::ConstructL()"));
+    TRAPD (err, iCentralRepository = CRepository::NewL(KCRUidFmPresetUtility));
+    RDebug::Print(_L("err[%d]"), err);
+    RDebug::Print(_L("calling CCentralRepositoryHandler::RetrieveInitialSettings()"));
+    RetrieveInitialSettings();
+    RDebug::Print(_L("exiting CCentralRepositoryHandler::ConstructL()"));
+    }
+
+// ----------------------------------------------------
+// CCentralRepositoryHandler::NewL
+// Two-phased class constructor.
+// ----------------------------------------------------
+//
+CCentralRepositoryHandler* CCentralRepositoryHandler::NewL(
+    TRadioSettings& aRadioSettings)  // a reference to aRadioSettings
+    {
+    RDebug::Print(_L("entering CCentralRepositoryHandler::NewL()"));    	
+    CCentralRepositoryHandler *self = new(ELeave) CCentralRepositoryHandler(aRadioSettings);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// ----------------------------------------------------
+// CCentralRepositoryHandler::~CCentralRepositoryHandler
+// Destructor of CCentralRepositoryHandler class.
+// ----------------------------------------------------
+//
+CCentralRepositoryHandler::~CCentralRepositoryHandler()
+    {
+    iRadioSettings = NULL;
+	  if(iCentralRepository)
+	     {
+	     delete iCentralRepository;
+	     }
+    }
+
+
+// ----------------------------------------------------
+// CCentralRepositoryHandler::RetrieveInitialSettings
+// Retrieves persistent settings from shared data.
+// Returns: None
+// ----------------------------------------------------
+//
+void CCentralRepositoryHandler::RetrieveInitialSettings()
+    {
+    
+    
+
+    }
+
+// ----------------------------------------------------
+// CCentralRepositoryHandler::RetrievePresetFrequency
+// Retrieve the preset frequency from shared data
+// Returns: None
+// ----------------------------------------------------
+//
+TInt CCentralRepositoryHandler::RetrievePresetFrequencyL(
+    TInt aIndex) const  // the preset index
+    {
+    TInt tempFrequency( KErrNotFound );
+    // Read frequency from its own key in the key sequence
+    iCentralRepository->Get( CalculateFrequencyIndexL( aIndex ), tempFrequency );
+    return tempFrequency;
+    }
+
+// ----------------------------------------------------
+// CCentralRepositoryHandler::RetrievePresetName
+// Retrieve the preset name from shared data
+// Returns: None
+// ----------------------------------------------------
+//
+TFmPresetName CCentralRepositoryHandler::RetrievePresetNameL(
+    TInt aIndex) const  // the preset channel index
+    {
+    // Read name from its own key in the key sequence
+    TInt nameIndex( CalculateNameIndexL( aIndex ) );
+    TFmPresetName tempChannelName;
+    iCentralRepository->Get(nameIndex, tempChannelName );
+    return tempChannelName;
+    }
+
+// ----------------------------------------------------
+// CCentralRepositoryHandler::RetrievePresetUrl
+// Retrieve the preset Url from shared data
+// Returns: None
+// ----------------------------------------------------
+//
+TFmPresetUrl CCentralRepositoryHandler::RetrievePresetUrlL(
+    TInt aIndex) const  // the preset channel index
+    {    
+    // Read url from its own key in the key sequence
+    TInt urlIndex( CalculateUrlIndexL( aIndex ) );
+    TFmPresetUrl tempUrlName;
+    iCentralRepository->Get(urlIndex, tempUrlName );   
+    return tempUrlName;     //ownership moves to the caller
+    }
+
+// ----------------------------------------------------
+// CCentralRepositoryHandler::RetrievePresetPTYL
+// Retrieve the preset PTY from shared data
+// Returns: tempPTY: the channel PTY
+// ----------------------------------------------------
+//
+TUint CCentralRepositoryHandler::RetrievePresetPTYL(
+    TInt aIndex) const  // the preset index
+    {
+    TUint tempPTY = KDefaultRadioPTY;
+    HBufC8* buf = HBufC8::NewLC( sizeof(TPresetChannel) );
+    TPtr8 bufPtr = buf->Des();
+    TInt tempChannelIndex( CalculateRestOfParametersIndexL( aIndex ) );
+    TInt errCode = iCentralRepository->Get( tempChannelIndex, bufPtr );
+    if(KErrNone == errCode)
+        {
+        if (bufPtr.Length() != 0)
+            {
+            tempPTY = ConvertStringToChannelPTYL(bufPtr);
+            }
+        } 
+    CleanupStack::PopAndDestroy(buf);
+    return tempPTY;
+    }
+
+// ----------------------------------------------------
+// CCentralRepositoryHandler::RetrievePresetPIL
+// Retrieve the preset PI from shared data
+// Returns: tempPI: the channel PI
+// ----------------------------------------------------
+//
+TUint CCentralRepositoryHandler::RetrievePresetPIL(
+    TInt aIndex) const  // the preset index
+    {
+    TUint tempPI = KDefaultRadioPI;
+    HBufC8* buf = HBufC8::NewLC( sizeof(TPresetChannel) );
+    TPtr8 bufPtr = buf->Des();
+    TInt tempChannelIndex( CalculateRestOfParametersIndexL( aIndex ) );
+    TInt errCode = iCentralRepository->Get( tempChannelIndex, bufPtr );
+    if(KErrNone == errCode)
+        {
+        if (bufPtr.Length() != 0)
+            {
+            tempPI = ConvertStringToChannelPIL(bufPtr);
+            }
+        } 
+    CleanupStack::PopAndDestroy(buf);
+    return tempPI;
+    }
+
+// ----------------------------------------------------
+// CCentralRepositoryHandler::RetrievePresetFavouriteL
+// Retrieve the preset favourite information from shared data
+// Returns: tempFav: the channel local station flag
+// ----------------------------------------------------
+//
+TBool CCentralRepositoryHandler::RetrievePresetFavouriteL(
+    TInt aIndex) const  // the preset index
+    {
+    TBool tempFav = EFalse;
+    HBufC8* buf = HBufC8::NewLC(sizeof(TPresetChannel));
+    TPtr8 bufPtr = buf->Des();
+    TInt tempChannelIndex( CalculateRestOfParametersIndexL( aIndex ) );
+    TInt errCode = iCentralRepository->Get(tempChannelIndex, bufPtr);
+    if(KErrNone == errCode)
+    {
+    if (bufPtr.Length() != 0)
+        {
+        tempFav = ConvertStringToChannelFavouriteL(bufPtr);
+        }
+    } 
+    CleanupStack::PopAndDestroy(buf);
+    return tempFav;
+    }
+
+// ----------------------------------------------------
+// CCentralRepositoryHandler::RetrievePresetUserRenameL
+// Retrieve the preset user rename information from shared data
+// Returns: tempRen: the channel user rename flag
+// ----------------------------------------------------
+//
+TBool CCentralRepositoryHandler::RetrievePresetUserRenameL(
+    TInt aIndex) const  // the preset index
+    {
+    TBool tempRen = EFalse;
+    HBufC8* buf = HBufC8::NewLC(sizeof(TPresetChannel));
+    TPtr8 bufPtr = buf->Des();
+    TInt tempChannelIndex( CalculateRestOfParametersIndexL( aIndex ) );
+    TInt errCode = iCentralRepository->Get(tempChannelIndex, bufPtr);
+    if(KErrNone == errCode)
+        {
+        if (bufPtr.Length() != 0)
+            {
+            tempRen = ConvertStringToChannelUserRenameL(bufPtr);
+            }
+        } 
+    CleanupStack::PopAndDestroy(buf);
+    return tempRen;
+    }
+
+// ----------------------------------------------------
+// CCentralRepositoryHandler::SavePresetFrequency
+// Save channel preset info back to shared data
+// Returns: None
+// ----------------------------------------------------
+//
+void CCentralRepositoryHandler::SavePresetFrequencyL(
+    TInt aIndex,   // preset channel index
+    TInt aFrequency)  //new frequency
+    {    
+    TInt frequencyIndex( CalculateFrequencyIndexL( aIndex ) );
+    User::LeaveIfError( iCentralRepository->Set(frequencyIndex, aFrequency ) );
+    if ( 0 >= aFrequency )
+        {
+        // aFrequency values 0, -1(Or <=0) means that it is better to destroy
+        // rest of parameters and also URL
+        iCentralRepository->Delete( CalculateRestOfParametersIndexL( aIndex ) );
+        iCentralRepository->Delete( CalculateUrlIndexL( aIndex ) );
+        }
+    }
+
+// ----------------------------------------------------
+// CCentralRepositoryHandler::SavePresetName
+// Save channel preset name back to shared data
+// Returns: None
+// ----------------------------------------------------
+//
+void CCentralRepositoryHandler::SavePresetNameL(
+    TInt aIndex,  //the preset channel index
+    const TFmPresetName& aStationName )  //preset channel name
+    {
+    TInt nameIndex( CalculateNameIndexL(aIndex) );
+    TPtrC namePtr( aStationName );
+    User::LeaveIfError( iCentralRepository->Set( nameIndex, namePtr) );
+    }
+
+// ----------------------------------------------------
+// CCentralRepositoryHandler::SavePresetUrlL
+// Save channel preset url back to shared data
+// Returns: None
+// ----------------------------------------------------
+//
+void CCentralRepositoryHandler::SavePresetUrlL(
+    TInt aIndex,  //the preset channel index
+    const TFmPresetUrl& aStationUrl )  //preset Url
+    {
+    TInt urlIndex( CalculateUrlIndexL(aIndex) );
+    TPtrC urlPtr( aStationUrl );
+    User::LeaveIfError( iCentralRepository->Set( urlIndex, urlPtr ) );
+    }
+
+// ----------------------------------------------------
+// CCentralRepositoryHandler::SavePresetPIL
+// Save channel PI code back to shared data
+// Returns: None
+// ----------------------------------------------------
+//
+void CCentralRepositoryHandler::SavePresetPIL(
+    TInt aIndex,   // preset channel index
+    TUint aPI)     // new programme identification code
+    {    
+    TPresetChannel presetChannel;
+    TInt restOfParametersIndex( CalculateRestOfParametersIndexL( aIndex ) );
+    HBufC8* buf = HBufC8::NewLC(sizeof(TPresetChannel));
+    TPtr8 bufPtr = buf->Des();
+    UpdateChannelObjectWithPIL(aIndex, presetChannel, aPI); 
+    ExternalizeToStreamL(presetChannel, bufPtr); 
+    User::LeaveIfError( iCentralRepository->Set(restOfParametersIndex, bufPtr ) );
+    CleanupStack::PopAndDestroy(buf);
+    }
+
+// ----------------------------------------------------
+// CCentralRepositoryHandler::SavePresetPTYL
+// Save channel PTY code back to shared data
+// Returns: None
+// ----------------------------------------------------
+//
+void CCentralRepositoryHandler::SavePresetPTYL(
+    TInt aIndex,   // preset channel index
+    TUint aPTY)    // new programme identification code
+    {
+    TPresetChannel presetChannel;
+    TInt restOfParametersIndex( CalculateRestOfParametersIndexL( aIndex ) );
+    HBufC8* buf = HBufC8::NewLC(sizeof(TPresetChannel));
+    TPtr8 bufPtr = buf->Des();
+    UpdateChannelObjectWithPTYL(aIndex, presetChannel, aPTY); 
+    ExternalizeToStreamL(presetChannel, bufPtr); 
+    User::LeaveIfError( iCentralRepository->Set(restOfParametersIndex, bufPtr ) );
+    CleanupStack::PopAndDestroy(buf);
+    }
+
+// ----------------------------------------------------
+// CCentralRepositoryHandler::SavePresetFavouriteInfoL
+// Save channel favourite station info back to shared data
+// Returns: None
+// ----------------------------------------------------
+//
+void CCentralRepositoryHandler::SavePresetFavouriteInfoL(
+    TInt aIndex,   // preset channel index
+    TBool aFav)    // new programme favourite status
+    {
+    TPresetChannel presetChannel ;
+    TInt restOfParametersIndex( CalculateRestOfParametersIndexL( aIndex ) );
+    HBufC8* buf = HBufC8::NewLC(sizeof(TPresetChannel));
+    TPtr8 bufPtr = buf->Des();
+    UpdateChannelObjectWithFavouriteInfoL(aIndex, presetChannel, aFav); 
+    ExternalizeToStreamL(presetChannel, bufPtr); 
+    User::LeaveIfError( iCentralRepository->Set(restOfParametersIndex, bufPtr ) );
+    CleanupStack::PopAndDestroy(buf);
+    }
+
+// ----------------------------------------------------
+// CCentralRepositoryHandler::SavePresetUserRenameInfoL
+// Save channel favourite station info back to shared data
+// Returns: None
+// ----------------------------------------------------
+//
+void CCentralRepositoryHandler::SavePresetUserRenameInfoL(
+    TInt aIndex,   // preset channel index
+    TBool aUR)     // new programme user rename status
+    {
+    TPresetChannel presetChannel;
+    TInt restOfParametersIndex( CalculateRestOfParametersIndexL( aIndex ) );
+    HBufC8* buf = HBufC8::NewLC(sizeof(TPresetChannel));
+    TPtr8 bufPtr = buf->Des();
+    UpdateChannelObjectWithUserRenameInfoL(aIndex, presetChannel, aUR); 
+    ExternalizeToStreamL(presetChannel, bufPtr); 
+    User::LeaveIfError( iCentralRepository->Set(restOfParametersIndex, bufPtr ) );
+    CleanupStack::PopAndDestroy(buf);
+    }
+
+// ----------------------------------------------------
+// CCentralRepositoryHandler::SaveFmPresetSettings
+// Save all FmPreset related persistent info back to shared data
+// Returns: None
+// ----------------------------------------------------
+//
+void CCentralRepositoryHandler::SaveFmPresetSettings()
+    {
+ /* DEPRECATED. Not used anymore    
+    iCentralRepository->Set( KFmRadioFrequency, iRadioSettings->Frequency() );
+    iCentralRepository->Set( KFmRadioChannel, iRadioSettings->CurrentPreset() );
+    */
+    }
+
+// ----------------------------------------------------
+// CCentralRepositoryHandler::ConvertStringToChannelPTYL
+// Get the channel programme type code from the externalized stream
+// Returns: tempPTY: the channel PTY
+//          ?value_n: ?description
+//                    ?description
+// ----------------------------------------------------
+//
+TUint CCentralRepositoryHandler::ConvertStringToChannelPTYL(
+    const TDesC8& aString) const  // a reference to the raw string
+    {
+RDebug::Print (_L ("Entering CCentralRepositoryHandler::ConvertStringToChannelPTYL"));        
+    TUint tempPTY = KDefaultRadioPTY;
+    TPresetChannel tempPresetChannel;
+    RDesReadStream inStream;
+    inStream.Open(aString);
+    CleanupClosePushL(inStream);
+    tempPresetChannel.InternalizeL(inStream);
+    CleanupStack::PopAndDestroy(&inStream);
+    tempPTY = tempPresetChannel.ChannelPty();
+RDebug::Print (_L ("Exiting CCentralRepositoryHandler::ConvertStringToChannelPTYL"));             
+    return tempPTY;
+    }
+
+// ----------------------------------------------------
+// CCentralRepositoryHandler::ConvertStringToChannelPIL
+// Get the channel programme identification code from the externalized stream
+// Returns: tempPI: the channel PI
+//          ?value_n: ?description
+//                    ?description
+// ----------------------------------------------------
+//
+TUint CCentralRepositoryHandler::ConvertStringToChannelPIL(
+    const TDesC8& aString) const  // a reference to the raw string
+    {
+RDebug::Print (_L ("Entering CCentralRepositoryHandler::ConvertStringToChannelPIL"));        
+    TUint tempPI = KDefaultRadioPI;
+    TPresetChannel tempPresetChannel;
+    RDesReadStream inStream;
+    inStream.Open(aString);
+    CleanupClosePushL(inStream);
+    tempPresetChannel.InternalizeL(inStream);
+    CleanupStack::PopAndDestroy(&inStream);
+    tempPI = tempPresetChannel.ChannelPI();
+RDebug::Print (_L ("Exiting CCentralRepositoryHandler::ConvertStringToChannelPIL"));             
+    return tempPI;
+    }
+
+// ----------------------------------------------------
+// CCentralRepositoryHandler::ConvertStringToChannelFavouriteL
+// Get the channel favourite flag from the externalized stream
+// Returns: tempFav: the channel favourite flag
+//          ?value_n: ?description
+//                    ?description
+// ----------------------------------------------------
+//
+TBool CCentralRepositoryHandler::ConvertStringToChannelFavouriteL(
+    const TDesC8& aString) const  // a reference to the raw string
+    {
+RDebug::Print (_L ("Entering CCentralRepositoryHandler::ConvertStringToChannelFavouriteL"));        
+    TBool tempFav = EFalse;
+    TPresetChannel tempPresetChannel;
+    RDesReadStream inStream;
+    inStream.Open(aString);
+    CleanupClosePushL(inStream);
+    tempPresetChannel.InternalizeL(inStream);
+    CleanupStack::PopAndDestroy(&inStream);
+    tempFav = tempPresetChannel.ChannelFavouriteInfo();
+RDebug::Print (_L ("Exiting CCentralRepositoryHandler::ConvertStringToChannelFavouriteL"));             
+    return tempFav;
+    }
+
+// ----------------------------------------------------
+// CCentralRepositoryHandler::ConvertStringToChannelUserRenameL
+// Get the channel user rename flag from the externalized stream
+// Returns: tempRen: the channel favourite flag
+//          ?value_n: ?description
+//                    ?description
+// ----------------------------------------------------
+//
+TBool CCentralRepositoryHandler::ConvertStringToChannelUserRenameL(
+    const TDesC8& aString) const  // a reference to the raw string
+    {
+RDebug::Print (_L ("Entering CCentralRepositoryHandler::ConvertStringToChannelUserRenameL"));        
+    TBool tempRen = EFalse;
+    TPresetChannel tempPresetChannel;
+    RDesReadStream inStream;
+    inStream.Open(aString);
+    CleanupClosePushL(inStream);
+    tempPresetChannel.InternalizeL(inStream);
+    CleanupStack::PopAndDestroy(&inStream);
+    tempRen = tempPresetChannel.ChannelUserRenameInfo();
+RDebug::Print (_L ("Exiting CCentralRepositoryHandler::ConvertStringToChannelUserRenameL"));             
+    return tempRen;
+    }
+
+// ----------------------------------------------------
+// CCentralRepositoryHandler::UpdateChannelObjectWithPIL
+// Update the current preset channel's PI code 
+// Returns: none
+// ----------------------------------------------------
+//
+void CCentralRepositoryHandler::UpdateChannelObjectWithPIL (
+    TInt aIndex,   //the channel index
+    TPresetChannel& aPresetChannel, // reference to channel object
+    TUint aPI) // new frequency
+    {
+    //Initialize the channel object with correct information.
+    GetPresetL( aIndex, aPresetChannel );    
+    aPresetChannel.SetChannelPI(aPI);
+    }
+
+// ----------------------------------------------------
+// CCentralRepositoryHandler::UpdateChannelObjectWithPTYL
+// Update the current preset channel's PTY code 
+// Returns: none
+// ----------------------------------------------------
+//
+void CCentralRepositoryHandler::UpdateChannelObjectWithPTYL (
+    TInt aIndex,   //the channel index
+    TPresetChannel& aPresetChannel, // reference to channel object
+    TUint aPTY) // new PTY
+    {
+    //Initialize the channel object with correct information.
+    GetPresetL( aIndex, aPresetChannel );    
+    aPresetChannel.SetChannelPty(aPTY);
+    }
+
+// ----------------------------------------------------
+// CCentralRepositoryHandler::UpdateChannelObjectWithFavouriteInfoL
+// Update the current preset channel's favourite status 
+// Returns: none
+// ----------------------------------------------------
+//
+void CCentralRepositoryHandler::UpdateChannelObjectWithFavouriteInfoL (
+    TInt aIndex,   //the channel index
+    TPresetChannel& aPresetChannel, // reference to channel object
+    TBool aFav) // new favourite info
+    {
+    GetPresetL(aIndex, aPresetChannel);
+    aPresetChannel.SetChannelFavouriteInfo(aFav);
+    }
+
+// ----------------------------------------------------
+// CCentralRepositoryHandler::UpdateChannelObjectWithUserRenameInfoL
+// Update the current preset channel's user rename status 
+// Returns: none
+// ----------------------------------------------------
+//
+void CCentralRepositoryHandler::UpdateChannelObjectWithUserRenameInfoL (
+    TInt aIndex,   //the channel index
+    TPresetChannel& aPresetChannel, // reference to channel object
+    TBool aUR) // new user rename info
+    {
+    //Initialize the channel object with correct information.
+    GetPresetL( aIndex, aPresetChannel );    
+    aPresetChannel.SetChannelUserRenameInfo(aUR);
+    }
+
+// ----------------------------------------------------
+// CCentralRepositoryHandler::DeletePresetL
+// Delete the current preset
+// Returns: none
+// ----------------------------------------------------
+//   
+void CCentralRepositoryHandler::DeletePresetL(TInt aIndex)
+	{
+    
+    if ( 0 > aIndex )
+    	{ //Delete all presets
+    	for(TInt i = 0;i<KMaxNumberOfPresetStations;i++)
+    		{
+            iCentralRepository->Delete( CalculateNameIndexL( i ) );    
+            iCentralRepository->Delete( CalculateFrequencyIndexL( i ) );   
+            iCentralRepository->Delete( CalculateUrlIndexL( i ) );
+            iCentralRepository->Delete( CalculateRestOfParametersIndexL( i ) );
+    		}
+    	}
+    else
+    	{
+        iCentralRepository->Delete( CalculateNameIndexL( aIndex ) );    
+        iCentralRepository->Delete( CalculateFrequencyIndexL( aIndex ) );   
+        iCentralRepository->Delete( CalculateUrlIndexL( aIndex ) );
+        iCentralRepository->Delete( CalculateRestOfParametersIndexL( aIndex ) );
+    	}		
+	}
+    
+// ----------------------------------------------------
+// CCentralRepositoryHandler::GetNumberOfPresets
+// Get the current number of presets
+// Returns: number of valid presets in cenrep  
+// ----------------------------------------------------
+//  
+void CCentralRepositoryHandler::GetNumberOfPresetsL(TInt& aNum)
+	{
+    TInt count = 0;
+    const TInt KMinAcceptableRadioFrequency = 76000000;
+    const TInt KMaxAcceptableRadioFrequency = 108000000;
+    TInt err( KErrNone );
+    TInt frequencyIndex( 0 );
+    TInt frequency( 0 );
+    
+    for(TInt index = 0;index < KMaxNumberOfPresetStations;index++)
+    	{
+        frequencyIndex = CalculateFrequencyIndexL( index );
+        err = iCentralRepository->Get( frequencyIndex, frequency );
+    	if(KErrNone == err )
+        	{
+            //Check validity of preset entries
+            if ( ( KMinAcceptableRadioFrequency <= frequency ) && ( KMaxAcceptableRadioFrequency > frequency ) )
+                {
+                count++;
+                if(count == 1)
+                    {
+                    iFirstPreset = index;
+                    }
+                }
+        	} 
+    	}
+    aNum = count;
+	}
+
+// ----------------------------------------------------
+// CCentralRepositoryHandler::GetFirstPreset
+// Gets the first preset
+// Returns: none
+// ----------------------------------------------------
+// 
+void CCentralRepositoryHandler::GetFirstPresetL(TInt& aNum)
+    {
+    TInt count   = 0;
+    iFirstPreset = 0;
+
+    GetNumberOfPresetsL(count);     //this updates iFirstPreset
+
+	if(count)
+		{
+		aNum = iFirstPreset;
+		}
+	}
+
+// ----------------------------------------------------
+// CCentralRepositoryHandler::GetNextPreset
+// Get the next preset index that has been set, 
+// given the current index
+// Returns: none
+// ----------------------------------------------------
+// 
+void CCentralRepositoryHandler::GetNextPresetL(TInt aIndex,TInt& aNextIndex)
+    {
+    TInt next = 0;
+    TInt err( KErrNone );
+    TInt frequencyIndex( 0 );
+    TInt frequency( 0 );
+    //start search on next one
+    aIndex = aIndex + 1;
+    for(TInt index = aIndex ;index < KMaxNumberOfPresetStations;index++)
+    	{
+        frequencyIndex = CalculateFrequencyIndexL( index );
+        err = iCentralRepository->Get( frequencyIndex, frequency );
+    	if( KErrNone == err && frequency != KErrNotFound )
+        	{
+            next = index;
+            break;
+        	} 
+    	}
+    aNextIndex = next;	
+    }
+
+// ----------------------------------------------------
+// CCentralRepositoryHandler::ExternalizeToStream
+// Externalize the string in the aBuffer
+// Returns: none
+// ----------------------------------------------------
+//
+void CCentralRepositoryHandler::ExternalizeToStreamL(
+    const TPresetChannel& aPresetChannel, // reference to channel object
+    TDes8& aBuffer)  // buffer for externalize stream
+    {
+    RDesWriteStream outStream(aBuffer);
+    CleanupClosePushL(outStream);
+    aPresetChannel.ExternalizeL(outStream);
+    outStream.CommitL();
+    CleanupStack::PopAndDestroy(&outStream);    
+    }
+
+// ----------------------------------------------------
+// CCentralRepositoryHandler::InternalizeFromStream
+// Internalize a preset from string
+// Returns: none
+// ----------------------------------------------------
+//
+void CCentralRepositoryHandler::InternalizeFromStreamL(
+    TPresetChannel& aPresetChannel, // reference to channel object
+    TDes8& aBuffer)  // buffer for externalize stream
+    {
+    RDesReadStream inStream(aBuffer);
+    CleanupClosePushL(inStream);
+    aPresetChannel.InternalizeL(inStream);
+    CleanupStack::PopAndDestroy(&inStream);    
+    }
+
+// ----------------------------------------------------
+// CCentralRepositoryHandler::GetPreset
+// Returns: KErrNone if no errors, otherwise system errors.
+// ----------------------------------------------------
+//
+TInt CCentralRepositoryHandler::GetPresetL(TInt aIndex, TPresetChannel& aPreset)
+    {
+    TInt ret = KErrNotFound;
+    // Read name from its own key in the key sequence
+    TInt nameIndex( CalculateNameIndexL( aIndex ) );
+    TFmPresetName tempChannelName;
+    HBufC* nameBuf = HBufC::NewLC( tempChannelName.MaxSize() );
+    TPtr nameBufPtr = nameBuf->Des();
+    ret = iCentralRepository->Get(nameIndex, nameBufPtr );
+    if( KErrNone == ret )
+        {
+        if (nameBufPtr.Length() != 0)
+            {
+            tempChannelName.Copy( nameBufPtr );
+            }
+        aPreset.SetChannelName( tempChannelName );
+        }
+    else
+        {
+        User::Leave( ret );
+        }
+    CleanupStack::PopAndDestroy(nameBuf);                       
+
+    // Read frequency from its own key in the key sequence
+    TInt frequency( 0 );
+    User::LeaveIfError( iCentralRepository->Get( CalculateFrequencyIndexL( aIndex ), frequency ) );
+    aPreset.SaveChannelFrequency( frequency );
+
+    // Read url from its own key in the key sequence
+    TInt urlIndex( CalculateUrlIndexL( aIndex ) );
+    TFmPresetUrl tempUrlName;
+    HBufC* urlBuf = HBufC::NewLC( tempUrlName.MaxSize() );
+    TPtr urlBufPtr = urlBuf->Des();
+    ret = iCentralRepository->Get(urlIndex, urlBufPtr );
+    if ( KErrNone == ret )
+        {        
+        if (urlBufPtr.Length() != 0)
+            {
+            tempUrlName.Copy( urlBufPtr );
+            }
+        aPreset.SetChannelUrl( tempUrlName );
+        }
+    else if ( KErrNotFound == ret )
+        {
+        // This is an optional parameter.
+        }
+    else
+        {
+        User::Leave( ret );
+        }
+    CleanupStack::PopAndDestroy(urlBuf);
+                      
+
+    HBufC8* buf = HBufC8::NewLC( sizeof(TPresetChannel) );
+    TPtr8 bufPtr = buf->Des();
+    TInt restOfParametersIndex( CalculateRestOfParametersIndexL( aIndex ) );
+    if(KErrNone == iCentralRepository->Get(restOfParametersIndex, bufPtr ))
+        {
+        if (bufPtr.Length() != 0)
+            {
+            TRAPD(err, InternalizeFromStreamL( aPreset, bufPtr );)
+            ret = err;
+            }
+        }
+    CleanupStack::PopAndDestroy(buf);                       
+    return ret;
+    }
+    
+// end of file