--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmserv/radioutility/fmpresetutility/src/RadioFmPresetCentralRepositoryHandler.cpp Tue Feb 02 01:08:46 2010 +0200
@@ -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