--- /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 <pspresetnotifier.h>
+#include <pstransaction.h>
+
+#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<CIRPreset>(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;iter<count;iter++)
+ {
+ if(iFavPresetList[iter]->GetId() == aIsdsPresetId)
+ {
+ IRLOG_DEBUG( "CIRFavoritesDb::SearchPreset - Exiting (1)." );
+ return iter;
+ }
+ }
+ }
+ if(aUniqPresetId != KNullId )
+ //for manually added presets
+ {
+ for(iter=0;iter<count;iter++)
+ {
+ if(aUniqPresetId==iFavPresetList[iter]->Id())
+ {
+ 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<CIRPreset>(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<T>
+ iFavPresetList.Sort( TLinearOrder<CIRPreset>( 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<CIRPreset*>( 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<CIRPreset*>( 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." );
+
+ }
+
+