diff -r 000000000000 -r 71ca22bcf22a mmserv/radioutility/fmpresetutility/src/RadioFmPresetCentralRepositoryHandler.cpp --- /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 +#include "RadioFmPresetCRKeys.h" +#include "RadioFmPresetUtilityBody.h" +#include "debug.h" +#include + + +// ============= 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;iDelete( 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