diff -r 000000000000 -r 09774dfdd46b internetradio2.0/favoritesdbsrc/irfavoritesdb.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/internetradio2.0/favoritesdbsrc/irfavoritesdb.cpp Mon Apr 19 14:01:53 2010 +0300 @@ -0,0 +1,869 @@ +/* +* Copyright (c) 2006-2007 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: ?Description +* +*/ + + +#include +#include + +#include "irdebug.h" +#include "irfavoritesdb.h" +#include "irisdspreset.h" +#include "irpreset.h" +#include "irsettings.h" + +const TInt KNullId = 0; +const TInt KNineteen = 19; +const TInt KFifty = 50; + +namespace PresetHandler +{ +//------------------------------------------------------------------------------- +//TInt OrderByIndex( const CIRPresetImpl& aPreset1, const CIRPresetImpl& aPreset2 ) +//------------------------------------------------------------------------------- +// + //Sort algorithm + // Orders presets by their index. + // + TInt OrderByIndex( const CIRPreset& aPreset1, const CIRPreset& aPreset2 ) + { + if ( aPreset1.Index() < aPreset2.Index() ) + { + return -1; + } + else if ( aPreset1.Index() > aPreset2.Index() ) + { + return 1; + } + else + { + return 0; + } + } + + TInt OrderByPlayedTimes(const CIRPreset& aPreset1, const CIRPreset& aPreset2) + { + int difference = aPreset1.GetPlayedTimes() - aPreset2.GetPlayedTimes(); + if (difference > 0) + { + return -1; + } + else if (difference == 0) + { + return aPreset1.Name().Compare(aPreset2.Name()); + } + else + { + return 1; + } + } +} + +//--------------------------------------------------------------------------- +//CIRFavoritesDb::NewL() +//standard symbian 1st phase constructor +//--------------------------------------------------------------------------- +// + +EXPORT_C CIRFavoritesDb* CIRFavoritesDb::NewL() + { + IRLOG_DEBUG( "CIRFavoritesDb::NewL" ); + CIRFavoritesDb* self = new ( ELeave ) CIRFavoritesDb; + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + IRLOG_DEBUG( "CIRFavoritesDb::NewL - Exiting." ); + return self; + } + + +//--------------------------------------------------------------------------- +//CIRFavoritesDb::~CIRFavoritesDb() +//standard c++ destructor +//--------------------------------------------------------------------------- +// + +CIRFavoritesDb::~CIRFavoritesDb() + { + IRLOG_DEBUG( "CIRFavoritesDb::~CIRFavoritesDb" ); + delete iNotifier; + iObservers.Close(); + //resets the preset array + iFavPresetList.ResetAndDestroy(); + iFavPresetList.Close(); + iServ.Close(); + + if (iSettings) + { + iSettings->Close(); + } + + IRLOG_DEBUG( "CIRFavoritesDb::~CIRFavoritesDb - Exiting." ); + } + + +//--------------------------------------------------------------------------- +//CIRFavoritesDb::AddPresetL() +//exported function to add a preset +//--------------------------------------------------------------------------- +// + +EXPORT_C void CIRFavoritesDb::AddPresetL(CIRIsdsPreset& aPreset, + TInt& aRetVal, TBool /*aIsLogoAvialable*/) + { + IRLOG_DEBUG( "CIRFavoritesDb::AddPresetL" ); + iMoveStatus=EFalse; + SortByIndex() ;//sorted by index + TBool presetSaved = EFalse; + + // Check the existence of preset before checking if the list is full + // to avoid KErrNoMemory for a preset that exists in the list. + TInt searchResult = 0; + if (aPreset.GetChannelType() == 0) + { + searchResult = SearchUserDefinedPreset(aPreset.GetName(), aPreset.GetChannelUrlAtL(0)); + //we don't allow user to add presets with the same name + if (searchResult >= 0) + { + ReplaceUserDefinedPresetL(aPreset); + aRetVal = KErrAlreadyExists; + return; + } + } + else + { + searchResult = SearchPreset( aPreset.GetId(), KNullId ); + } + + if( KErrNotFound != searchResult) + { + //Eventhough the preset exists in the favorites db, replace the + //same with the new preset i.e. aPreset. Because the db should + //contain the updated values of the preset. + ReplacePresetL(aPreset); + + aRetVal = KErrAlreadyExists; + + return; + } + + if ( EmptyPresetCount()<=0 ) + { + //max limit reached no more processing + aRetVal = KErrNoMemory; + return; + } + + // Found the next empty place or replace + for ( TInt j=0; j < MaxPresetCount() && !presetSaved; j++ ) + { + CIRPreset* preset = PresetByIndex( j ); + TBool presetExisted = preset ? ETrue : EFalse;//presetExisted=1 if preset exists + + if ( !preset ) + { + preset = CreatePresetL( j );//create if preset==NULL + } + + if ( !presetExisted )//crete if preset did not exists + { + //open a transaction with the preset server + CPSTransaction* transaction = preset->CreateTransactionLC(); + //Convert to Plugnized Preset + //That is accepted by the preset server + preset->CIRIsdsPresetToCIRPresetImpl(aPreset); + //setname of CPSPresetInterface is called + preset->SetNameL( aPreset.GetName() ); + //asign the preset id of the fav preset to uniqid value of the preset + aPreset.SetUniqId(preset->Id()); + transaction->CommitL(); + CleanupStack::PopAndDestroy( transaction ); + //added to check multiple insertion + presetSaved = ETrue; + } + } + + aRetVal = KErrNone; + IRLOG_DEBUG( "CIRFavoritesDb::AddPresetL - Exiting." ); + } + +//--------------------------------------------------------------------------- +//CIRFavoritesDb::AddPresetL() +//exported,overloaded function to add a preset manually +//converts the minimum data(name ,url) into an preset +//--------------------------------------------------------------------------- +// + +EXPORT_C void CIRFavoritesDb::AddPresetL(const TDesC& aName, + const TDesC& aURl,TInt& aReturn, TBool /*aIsLogoAvialable*/) + { + IRLOG_DEBUG( "CIRFavoritesDb::AddPresetL(des des int int)" ); + iMoveStatus=EFalse; + CIRIsdsPreset* saveItem; + saveItem = CIRIsdsPreset::NewL(); + saveItem->SetName(aName); + saveItem->SetUrlCount(1);//only one url is saved for manually added channel + saveItem->SetChannelType(EUserDefined); + _LIT(KNotAvailable,"NA"); + //bitrate set to zero so that it is accessible to all kinds of bitrate settings + saveItem->SetUrlL(KNotAvailable,aURl,0); + AddPresetL(*saveItem,aReturn); + delete saveItem; + IRLOG_DEBUG( "CIRFavoritesDb::AddPresetL(des des int int) - Exiting." ); + } + + +//--------------------------------------------------------------------------- +//CIRFavoritesDb::DeletePresetL() +//exported, function to delete a preset +//--------------------------------------------------------------------------- +// + +EXPORT_C void CIRFavoritesDb::DeletePresetL( TInt aId ) + { + IRLOG_DEBUG( "CIRFavoritesDb::DeletePresetL" ); + iMoveStatus=EFalse; + iServ.DeletePresetL( aId); + IRLOG_DEBUG( "CIRFavoritesDb::DeletePresetL - Exiting." ); + } + +//--------------------------------------------------------------------------- +//CIRFavoritesDb::GetAllPresetL() +//exported,function to get the list of saved presets in the array iFavPresetList +//--------------------------------------------------------------------------- +// + +EXPORT_C void CIRFavoritesDb::GetAllPreset() + { + IRLOG_DEBUG( "CIRFavoritesDb::GetAllPresetL" ); + //sort the array according to the index values + SortByIndex(); + IRLOG_DEBUG( "CIRFavoritesDb::GetAllPresetL - Exiting." ); + } + +/* + * get all presets sorted by played times + */ +EXPORT_C const RIRPresetArray& CIRFavoritesDb::GetAllSortedPresets() +{ + iFavPresetList.Sort( TLinearOrder(PresetHandler::OrderByPlayedTimes)); + return iFavPresetList; +} + +//--------------------------------------------------------------------------- +//CIRFavoritesDb::SwapPresetsInDbL() +//returns the previous preset for a given presetId +//--------------------------------------------------------------------------- +// + +EXPORT_C void CIRFavoritesDb::SwapPresetsInDbL( TInt aChannelIdFrom, + TInt /*aChannelIdTo*/,TInt /*aChannelIndexFro*/,TInt aChannelIndexTo ) + { + IRLOG_DEBUG( "CIRFavoritesDb::SwapPresetsInDbL" ); + MovePresetL( aChannelIdFrom,aChannelIndexTo); + IRLOG_DEBUG( "CIRFavoritesDb::SwapPresetsInDbL - Exiting." ); + } + +//--------------------------------------------------------------------------- +//CIRFavoritesDb::MovePresetL() +//moves a preset to destination index +//--------------------------------------------------------------------------- +// + + void CIRFavoritesDb::MovePresetL( const TInt aId, const TInt aDestinationIndex ) + { + IRLOG_DEBUG( "CIRFavoritesDb::MovePresetL" ); + ASSERT( aDestinationIndex >= 0 && aDestinationIndex < iFavPresetList.Count() ); + if( aDestinationIndex < 0 || aDestinationIndex >= iFavPresetList.Count()) + { + User::Leave(KErrArgument); + } + + TInt fakeIndex=iFavPresetList[aDestinationIndex]->Index(); + SetMoveStatus(ETrue); + iServ.MovePresetL( aId, fakeIndex ); + IRLOG_DEBUG( "CIRFavoritesDb::MovePresetL - Exiting." ); + } + +//--------------------------------------------------------------------------- +//CIRFavoritesDb::SetMoveStatus() +//sets the status of Move functionality +//--------------------------------------------------------------------------- +// +EXPORT_C void CIRFavoritesDb::SetMoveStatus(TBool aStatus) + { + iMoveStatus = aStatus; + } + +//--------------------------------------------------------------------------- +//CIRFavoritesDb::GetMoveStatus() +//returns the status of the Move functionality +//--------------------------------------------------------------------------- +// +EXPORT_C TBool CIRFavoritesDb::GetMoveStatus() + { + return iMoveStatus; + } + + +//--------------------------------------------------------------------------- +//CIRFavoritesDb::SearchPreset() +//exported, function to find out if a preset exists in the favorites list +//--------------------------------------------------------------------------- +// + +EXPORT_C TInt CIRFavoritesDb::SearchPreset( const TInt aIsdsPresetId, + const TInt aUniqPresetId) + { + IRLOG_DEBUG( "CIRFavoritesDb::SearchPreset" ); + TInt count = iFavPresetList.Count(); + TInt iter; + //for isds presets + if(aIsdsPresetId!=KNullId) + { + for(iter=0;iterGetId() == aIsdsPresetId) + { + IRLOG_DEBUG( "CIRFavoritesDb::SearchPreset - Exiting (1)." ); + return iter; + } + } + } + if(aUniqPresetId != KNullId ) + //for manually added presets + { + for(iter=0;iterId()) + { + IRLOG_DEBUG( "CIRFavoritesDb::SearchPreset - Exiting (2)." ); + return iter; + } + } + } + // both the parameters are null implies that the preset is a non saved station + IRLOG_DEBUG( "CIRFavoritesDb::SearchPreset - Exiting (3)." ); + return KErrNotFound; + } + +//--------------------------------------------------------------------------- +//CIRFavoritesDb::GetPreviousPreset() +//exported, function to find out if a preset exists in the favorites list +//--------------------------------------------------------------------------- +// +EXPORT_C TInt CIRFavoritesDb::GetNextPreset(TInt aIndex) + { + if ( (aIndex==(iFavPresetList.Count()-1))||aIndex==KNineteen ) + { + return 0; + } + else + { + return aIndex+1; + } + } + +//--------------------------------------------------------------------------- +//CIRFavoritesDb::GetNextPreset() +//exported, function to find out if a preset exists in the favorites list +//--------------------------------------------------------------------------- +// +EXPORT_C TInt CIRFavoritesDb::GetPreviousPreset( TInt aIndex ) + { + if ( aIndex==0 ) + { + TInt val=(iFavPresetList.Count()-1); + return val; + } + else + { + return aIndex-1; + } + } +//--------------------------------------------------------------------------- +//CIRFavoritesDb::ReplacePresetL() +//replaces a preset with a new preset +//for presetSync +//--------------------------------------------------------------------------- +// + +EXPORT_C void CIRFavoritesDb::ReplacePresetL( CIRIsdsPreset& aNewPreset ) + { + IRLOG_DEBUG( "CIRFavoritesDb::ReplacePresetL" ); + iMoveStatus=EFalse; + CIRPreset* preset; + TInt index = SearchPreset(aNewPreset.GetId(),KNullId); + //actual index + if (index >= 0) + { + ASSERT( index >= 0 || index < iFavPresetList.Count() ); + index = iFavPresetList[index]->Index(); + preset = PresetByIndex(index); + if(preset) + { + CPSTransaction* transaction = preset->CreateTransactionLC(); + //change the preset data and commit + preset->CIRIsdsPresetToCIRPresetImpl(aNewPreset); + preset->SetChannelType(EIsdsPreset); + preset->SetNameL( aNewPreset.GetName() ); + transaction->CommitL(); + CleanupStack::PopAndDestroy( transaction ); + } + } + IRLOG_DEBUG( "CIRFavoritesDb::ReplacePresetL - Exiting." ); + } + +//--------------------------------------------------------------------------- +//CIRFavoritesDb::ReplaceUserDefinedPresetL() +//replaces a userdefined preset with a new userdefiend preset +//for presetSync +//--------------------------------------------------------------------------- +// +EXPORT_C void CIRFavoritesDb::ReplaceUserDefinedPresetL(CIRIsdsPreset& aNewPreset) +{ + IRLOG_DEBUG( "CIRFavoritesDb::ReplaceUserDefinedPresetL" ); + iMoveStatus=EFalse; + TInt index = SearchUserDefinedPreset(aNewPreset.GetName(), aNewPreset.GetChannelUrlAtL(0)); + + if (index >= 0 && index < iFavPresetList.Count()) + { + CIRPreset* preset = iFavPresetList[index]; + if (preset) + { + CPSTransaction* transaction = preset->CreateTransactionLC(); + /** + * change the preset data and commit + */ + preset->CIRIsdsPresetToCIRPresetImpl(aNewPreset); + preset->SetChannelType(EUserDefined); + preset->SetNameL(aNewPreset.GetName()); + preset->SetDescription(aNewPreset.GetShortDescription()); + transaction->CommitL(); + CleanupStack::PopAndDestroy(transaction); + } + } + IRLOG_DEBUG( "CIRFavoritesDb::ReplaceUserDefinedPresetL - Exiting." ); +} + + + + + + +//--------------------------------------------------------------------------- +//IRFavoritesDb::MakePresetUserDefinedL() +//for a favorite preset that has been removed from the isds. +//it is made a user defined preset by changing the type to 0. +//index value is preseved so that the relative positions in the saved +//stations view remains the same. +//--------------------------------------------------------------------------- +// + +EXPORT_C void CIRFavoritesDb::MakePresetUserDefinedL( TInt aChannelId, + TInt /*aUserDefinedChannelId*/ ) + { + IRLOG_DEBUG( "CIRFavoritesDb::MakePresetUserDefinedL" ); + iMoveStatus=EFalse; + //to match the function signature + TInt index = SearchPreset(aChannelId,KNullId); + CIRPreset* preset; + //actual index + if (index >= 0) + { + ASSERT( index >= 0 || index < iFavPresetList.Count() ); + index = iFavPresetList[index]->Index(); + preset = PresetByIndex(index); + if(preset) + { + CPSTransaction* transaction = preset->CreateTransactionLC(); + //convert the flag to user defined and commit + preset->SetChannelType(EUserDefined); + //assign null id + preset->SetId(KNullId); + + //make logo as null;;;; added for 2.0 + _LIT8(KEmpty, ""); + RBuf8 tempLogo; + tempLogo.Create(KEmpty); + preset->SetLogoData(tempLogo); + tempLogo.Close(); + _LIT(KEmptyString, ""); + RBuf tempString; + tempString.Create(KEmptyString); + //set imgurl to null + preset->SetImgUrl(tempString); + //set genre to null + preset->SetGenreInfo(tempString,tempString); + //set language to null + preset->SetLang(tempString); + //set country to null + preset->SetCountryName(tempString); + tempString.Close(); + //set musicStoreEnabled filed to "no";;;;added for 2.0 + _LIT(KNo, "no"); + RBuf tempMusicStoreEnabled; + tempMusicStoreEnabled.Create(KNo); + preset->SetMusicStoreStatus(tempMusicStoreEnabled); + tempMusicStoreEnabled.Close(); + + transaction->CommitL(); + CleanupStack::PopAndDestroy( transaction ); + } + } + IRLOG_DEBUG( "CIRFavoritesDb::MakePresetUserDefinedL - Exiting." ); + } + +//--------------------------------------------------------------------------- +//const RVRPresetArray& CVRPresetHandler::Presets() const +// RIRPresetArray& an array containing all Internet Radio presets. +//--------------------------------------------------------------------------- +// + +EXPORT_C const RIRPresetArray& CIRFavoritesDb::Presets() const + { + IRLOG_DEBUG( "CIRFavoritesDb::Presets" ); + //sort by + return iFavPresetList; + } + +/* + * Increase the played times of a channel if it has been in the favorites + * return : KErrNone if success + * KErrNotFound if the preset is not in the favorites + */ +EXPORT_C TInt CIRFavoritesDb::IncreasePlayedTimesL(const CIRIsdsPreset &aIsdsPreset) +{ + //step 1 : search the preset in favorites + SortByIndex(); + TInt index = 0; + if (aIsdsPreset.GetChannelType() == 0) + { + index = SearchUserDefinedPreset(aIsdsPreset.GetName(), aIsdsPreset.GetChannelUrlAtL(0)); + } + else + { + index = SearchPreset(aIsdsPreset.GetId(), KNullId); + } + + if (KErrNotFound == index) + { + return KErrNotFound; + } + + //step 2 : update the played times of the preset + CIRPreset *irPreset = iFavPresetList[index]; + //open a transaction with the preset server + CPSTransaction* transaction = irPreset->CreateTransactionLC(); + irPreset->SetPlayedTimes(irPreset->GetPlayedTimes() + 1); + transaction->CommitL(); + CleanupStack::PopAndDestroy(transaction); + + return KErrNone; +} + +//--------------------------------------------------------------------------- +//CIRFavoritesDb::ConstructL() +//Standard 2nd phase construction +//--------------------------------------------------------------------------- +// + +void CIRFavoritesDb::ConstructL() + { + IRLOG_DEBUG( "CIRFavoritesDb::ConstructL" ); + //cenrep handle + iSettings = CIRSettings::OpenL(); + iSettings->SetMaxPresetCountL(KFifty); + User::LeaveIfError( iServ.Connect() ); + //a session to the client of the preset server + iServ.GetPresetsL( iFavPresetList, KIRPreset ); + //notifier + iNotifier = CPSPresetNotifier::NewL( iServ, *this ); + //cenrep. + iMaxPresetCount=iSettings->MaxPresetCount(); + //initialization of the list for UI use + //iFavPresetList=new(ELeave)CArrayPtrFlat(KGranularity) + iMoveStatus=EFalse; + IRLOG_DEBUG( "CIRFavoritesDb::ConstructL - Exiting." ); + } + + +//--------------------------------------------------------------------------- +//CIRFavoritesDb::SortByIndex() +//sorts the preset list by index +//--------------------------------------------------------------------------- +// + +void CIRFavoritesDb::SortByIndex() + { + IRLOG_DEBUG( "CIRFavoritesDb::SortByIndex" ); + //The sort order is determined by an algorithm supplied by the caller + //and packaged as a TLinerOrder + iFavPresetList.Sort( TLinearOrder( PresetHandler::OrderByIndex ) ); + IRLOG_DEBUG( "CIRFavoritesDb::SortByIndex - Exiting." ); + } + +//--------------------------------------------------------------------------- +//EXPORT_C TInt CIRFavoritesDb::MaxPresetCount() +//returns the maximum number of presets that can be stored in the favorites list +//--------------------------------------------------------------------------- +// + +EXPORT_C TInt CIRFavoritesDb::MaxPresetCount() + { + IRLOG_DEBUG( "CIRFavoritesDb::MaxPresetCount" ); + return iMaxPresetCount; + } + +//--------------------------------------------------------------------------- +//TInt CIRFavoritesDb::EmptyPresetCount() const +//Returns the number of empty presets +//--------------------------------------------------------------------------- +// + +EXPORT_C TInt CIRFavoritesDb::EmptyPresetCount() const + { + IRLOG_DEBUG( "CIRFavoritesDb::EmptyPresetCount" ); + return iMaxPresetCount - iFavPresetList.Count(); + } + + + +//--------------------------------------------------------------------------- +//TInt CIRFavoritesDb::AddObserver( MPSPresetObserver& aObserver ) +//Adds an observer that is notified upon changes in presets. +//--------------------------------------------------------------------------- +// + +EXPORT_C TInt CIRFavoritesDb::AddObserver(const MPSPresetObserver& aObserver ) + { + IRLOG_DEBUG( "CIRFavoritesDb::AddObserver" ); + return iObservers.InsertInAddressOrder( &aObserver ); + } + + +//--------------------------------------------------------------------------- +//TInt CIRPresetHandler::RemoveObserver( MPSPresetObserver& aObserver ) +//Removes an observer for a preset. +//--------------------------------------------------------------------------- +// +EXPORT_C void CIRFavoritesDb::RemoveObserver(const MPSPresetObserver& aObserver ) + { + TInt idx = iObservers.FindInAddressOrder( &aObserver ); + + if ( idx >= 0 ) + { + iObservers.Remove( idx ); + iObservers.Compress(); + } + } + +//--------------------------------------------------------------------------- +//TInt CIRFavoritesDb::MatchingPresetId( TInt aId ) +//--------------------------------------------------------------------------- +// + +TInt CIRFavoritesDb::MatchingPresetId( TInt aId ) + { + TInt indx = KErrNotFound; + + SortByIndex() ; + + for ( TInt i = 0; i < iFavPresetList.Count(); i++ ) + { + if (iFavPresetList[i]->Id() == aId ) + { + indx = iFavPresetList[i]->Index(); + /*lint -save -e960 Note -- Violates MISRA Required Rule 58, + non-switch break used*/ + break; + /*lint -restore */ + } + } + + return indx; + } + +//--------------------------------------------------------------------------- +//TInt CIRFavoritesDb::CreatePresetL( TInt aIndex ) +//creates a preset by the index aIndex +//--------------------------------------------------------------------------- +// + +CIRPreset* CIRFavoritesDb::CreatePresetL( TInt aIndex ) + { + IRLOG_DEBUG( "CIRFavoritesDb::CreatePresetL" ); + CIRPreset* preset = static_cast( iServ.CreatePresetL( + aIndex, KIRPreset) ); + CleanupStack::PushL( preset ); + iFavPresetList.AppendL( preset ); + CleanupStack::Pop( preset ); + IRLOG_DEBUG( "CIRFavoritesDb::CreatePresetL - Exiting." ); + return preset; + } + +/* + * Search a user defined preset by name and url + */ +TInt CIRFavoritesDb::SearchUserDefinedPreset(const TDesC &aName, const TDesC &aUrl) + { + TInt count = iFavPresetList.Count(); + for (TInt index = 0; index < count; ++index) + { + CIRPreset *preset = iFavPresetList[index]; + const TDesC &name = preset->Name(); + TInt urlCount = preset->GetUrlCount(); + if(preset->GetUrlCount()>0) + { + const TDesC &url = preset->GetChannelUrlAt(0); + if (preset->GetChannelType() == 0 && + name == aName && + url == aUrl) + { + return index; + } + } + else + { + if (preset->GetChannelType() == 0 && + name == aName && + aUrl == KNullDesC) + { + return index; + } + } + } + + return KErrNotFound; + } + +//--------------------------------------------------------------------------- +//CIRFavoritesDb::PresetByIndex(TInt aIndex) +// Returns a preset by its id. +//--------------------------------------------------------------------------- +// +EXPORT_C CIRPreset* CIRFavoritesDb::PresetByIndex( TInt aIndex ) + { + IRLOG_DEBUG( "CIRFavoritesDb::PresetByIndex" ); + + CIRPreset* preset = NULL; + + for ( TInt i = 0; i < iFavPresetList.Count(); i++ ) + { + if (iFavPresetList[i]->Index()==aIndex) + { + preset = iFavPresetList[i]; + /*lint -save -e960 (Note -- Violates MISRA Required Rule 58, non-switch break used)*/ + break; + /*lint -restore*/ + } + } + IRLOG_DEBUG( "CIRFavoritesDb::PresetByIndex - Exiting." ); + return preset; + } + +//--------------------------------------------------------------------------- +// CIRFavoritesDb::PresetById(TInt aIndex) +//Returns a preset by its id. +//--------------------------------------------------------------------------- +// +EXPORT_C CIRPreset* CIRFavoritesDb::PresetById( TInt aId ) + { + IRLOG_DEBUG( "CIRFavoritesDb::PresetById" ); + + CIRPreset* preset = NULL; + + for ( TInt i = 0; i < iFavPresetList.Count(); i++ ) + { + if ( iFavPresetList[i]->Id() == aId ) + { + preset = iFavPresetList[i]; + /*lint -save -e960 Note -- Violates MISRA Required Rule 58, + non-switch break used*/ + break; + /*lint -restore */ + } + } + IRLOG_DEBUG( "CIRFavoritesDb::PresetById - Exiting." ); + + return preset; + } + + +//--------------------------------------------------------------------------- +//CIRFavoritesDb::HandlePresetChangedL() +//function to notify a change in saved presets +//preset handler i.e CIRPreset,the reason of change. +//--------------------------------------------------------------------------- +// +EXPORT_C void CIRFavoritesDb::HandlePresetChangedL( TInt aId, + TUid aDataHandler, MPSPresetObserver::TPSReason aReason ) + { + IRLOG_DEBUG( "CIRFavoritesDb::HandlePresetChangedL" ); + if ( aDataHandler == KIRPreset ) + { + switch ( aReason ) + { + case MPSPresetObserver::EPSCreated: + { + //call back from the preset client + //to append a preset when the preset is added + CPSPresetInterface* preset = NULL; + preset = PresetById( aId ); + if ( !preset ) + { + preset = iServ.OpenPresetL( aId ); + CleanupStack::PushL( preset ); + iFavPresetList.AppendL( static_cast( preset ) ); + CleanupStack::Pop( preset ); + } + + } + break; + case MPSPresetObserver::EPSDeleted: + { + //call back from the preset client + //to remove a preset when the preset is deleted + for ( TInt i = 0; i < iFavPresetList.Count(); i++ ) + { + if ( iFavPresetList[i]->Id() == aId ) + { + delete iFavPresetList[i]; + iFavPresetList.Remove( i ); + /*lint -save -e960 (Note -- Violates MISRA Required Rule 58, non-switch break used)*/ + break; + /*lint -restore*/ + } + } + } + break; + case MPSPresetObserver::EPSModified: + break; + default: + break; + } + + for ( TInt i = 0; i < iObservers.Count(); i++ ) + { + iObservers[i]->HandlePresetChangedL( aId, aDataHandler, aReason ); + } + + } + IRLOG_DEBUG( "CIRFavoritesDb::HandlePresetChangedL - Exiting." ); + + } + +