diff -r 608f67c22514 -r 896e9dbc5f19 internetradio2.0/irsonghistory/src/irsonghistorydb.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/irsonghistory/src/irsonghistorydb.cpp Wed Aug 18 09:40:26 2010 +0300
@@ -0,0 +1,1293 @@
+/*
+* Copyright (c) 2006-2006 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: Implementation of the songhistory database
+*
+*/
+
+
+/* ---------------------------------------------------------------------------
+* Version history:
+* Template version:
+*
+*
+*
+* Version: 3, Thu Apr 14 12:00:00 2008 by Rohit
+* Ref:
+* Pc lint fixes
+*
+* Version: 2, Thu Apr 10 20:00:00 2008 by Rohit
+* Ref:
+* Implemented SongHistory changes for channelwise songs
+*
+*
+* ============================================================================
+*/
+
+#include
+#include // CDesCArrayFlat
+#include // CFileStore & CPermanentFileStore
+#include // file helpers
+#include
+
+#include "irsonghistorydb.h"
+#include "irsonghistoryinfo.h"
+#include "irdebug.h"
+#include "irsettings.h"
+
+
+
+_LIT( KSongHistoryDBTable, "ChannelHistoryTable" );
+_LIT( KSongHistoryDBTable2, "SongHistoryTable" );
+_LIT( KSongHistoryDBSongNameColumn, "SongName" );
+_LIT( KSongHistoryDBArtistNameColumn, "ArtistName" );
+_LIT( KSongHistoryDBChannelNameColumn, "ChannelName" );
+_LIT( KSongHistoryDBChannelUrlColumn, "ChannelUrl" );
+_LIT( KSongHistoryDBChannelTypeColumn, "ChannelType" );
+_LIT( KSongHistoryDBChannelIdColumn, "ChannelId" );
+_LIT( KSongHistoryDBBitrateColumn, "Bitrate" );
+_LIT( KSongHistoryDBChannelDescColumn, "ChannelDescription" );
+_LIT( KSongHistoryDBImageUrlColumn, "ImageUrl" );
+_LIT( KSongHistoryDBGenreNameColumn, "GenreName" );
+_LIT( KSongHistoryDBCountryNameColumn, "CountryName" );
+_LIT( KSongHistoryDBLanguageNameColumn, "LanguageName" );
+_LIT( KSongHistoryDBMusicStatusColumn, "MusicStoreStatus" );
+
+_LIT(KSongHistoryDbFile,"songhistoryDb.db");
+_LIT(KNo , "No") ;
+
+const TInt KMaxSize = 255;
+
+TBool CIRSongHistoryDb::CompareChannelInfos(const CIRChannelInfo& aFirst,
+ const CIRChannelInfo& aSecond)
+{
+ return ( aFirst.iChannelName == aSecond.iChannelName &&
+ aFirst.iChannelUrl == aSecond.iChannelUrl &&
+ aFirst.iChannelType == aSecond.iChannelType);
+}
+
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Function : NewL()
+// two phased construction
+// ---------------------------------------------------------------------------
+//
+CIRSongHistoryDb* CIRSongHistoryDb::NewL()
+{
+ IRLOG_DEBUG( "CIRSongHistoryDb::NewL" );
+ CIRSongHistoryDb* self=CIRSongHistoryDb::NewLC();
+ CleanupStack::Pop(self);
+ IRLOG_DEBUG( "CIRSongHistoryDb::NewL - Exiting." );
+ return self;
+}
+
+
+// ---------------------------------------------------------------------------
+// Function : NewLC()
+// Two phased construction
+// ---------------------------------------------------------------------------
+//
+CIRSongHistoryDb* CIRSongHistoryDb::NewLC()
+{
+ IRLOG_DEBUG( "CIRSongHistoryDb::NewLC" );
+ CIRSongHistoryDb *self=new(ELeave)CIRSongHistoryDb;
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ IRLOG_DEBUG( "CIRSongHistoryDb::NewLC - Exiting." );
+ return self;
+}
+
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryDb::~CIRSongHistoryDb()
+// default destructor
+// ---------------------------------------------------------------------------
+//
+CIRSongHistoryDb::~CIRSongHistoryDb()
+{
+ IRLOG_DEBUG( "CIRSongHistoryDb::~CIRSongHistoryDb" );
+
+ CloseSongHistoryDb();
+ iFsSession.Close();
+ IRLOG_DEBUG( "CIRSongHistoryDb::~CIRSongHistoryDb - Exiting." );
+}
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryDb::CreateDbCondition()
+// Creates both the dbms files conditionally(only if not yet created)
+// calls CreateSongHistoryDb()
+// ---------------------------------------------------------------------------
+//
+void CIRSongHistoryDb::CreateDbCondition(const TFileName& aSongHistoryDbFile)
+{
+ IRLOG_DEBUG( "CIRSongHistoryDb::CreateDbCondition" );
+
+
+ if( !BaflUtils::FileExists(iFsSession, aSongHistoryDbFile) )
+ {
+ TInt error = CreateSongHistoryDb(aSongHistoryDbFile);
+ if( error )
+ {
+ IRLOG_DEBUG( "CIRSongHistoryDb::CreateDbCondition - Exiting (1)." );
+
+ }
+ }
+ IRLOG_DEBUG( "CIRSongHistoryDb::CreateDbCondition - Exiting (2)." );
+
+}
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryDb:AddToSongHistoryDbL()
+// adds the session log entry into data base
+// Returns ETure if songHistory count exceeds 30, else EFalse
+// ---------------------------------------------------------------------------
+//
+TBool CIRSongHistoryDb::AddToSongHistoryDbL(const TDesC& aSongName,
+ const TDesC& aArtistName,
+ const TDesC& aChannelName,
+ const TDesC& aChannelUrl,
+ RBuf& aDelSongName,
+ RBuf& aDelArtistName,
+ RBuf& aDelChannelName,
+ RBuf& aDelChannelUrl,
+ TInt aChannelType,
+ TInt aChannelId,
+ TInt aBitrate,
+ const TDesC& aChannelDesc,
+ const TDesC& aImageUrl,
+ const TDesC& aGenreName,
+ const TDesC& aCountryName,
+ const TDesC& aLanguageName,
+ const TDesC& aMusicFlag
+ )
+{
+ IRLOG_DEBUG( "CIRSongHistoryDb::AddSongHistoryStartL" );
+
+ TBool bRetval = EFalse;
+ TInt error= 0;
+
+ iSongHistoryTable.Reset();
+
+ //if song history entries are greater than or equal to 30
+ if( iSongHistoryTable.CountL() >= KMaxNoChannelHistoryDbEntries )
+ {
+ //first row is selected
+ iSongHistoryTable.FirstL();
+
+ //the current row is selected
+ iSongHistoryTable.GetL();
+
+ //delete that entry
+ CDbColSet* columns = iSongHistoryTable.ColSetL();
+ TInt songColumn = columns->ColNo( KSongHistoryDBSongNameColumn );
+ TInt artistColumn = columns->ColNo( KSongHistoryDBArtistNameColumn );
+ TInt channelColumn = columns->ColNo( KSongHistoryDBChannelNameColumn );
+ TInt channelUrlColumn = columns->ColNo( KSongHistoryDBChannelUrlColumn );
+
+ delete columns;
+ columns = NULL;
+
+ aDelSongName.CreateL(iSongHistoryTable.ColDes( songColumn ));
+ aDelArtistName.CreateL(iSongHistoryTable.ColDes( artistColumn ));
+ aDelChannelName.CreateL(iSongHistoryTable.ColDes( channelColumn ));
+ aDelChannelUrl.CreateL(iSongHistoryTable.ColDes( channelUrlColumn ));
+
+ iSongHistoryTable.DeleteL();
+ Compact();
+
+ bRetval = ETrue;
+ }
+
+ CDbColSet* columns = iSongHistoryTable.ColSetL();
+ CleanupStack::PushL(columns);
+
+ const TPtrC &songName = aSongName.Left(KIRDbMaxStrLen);
+ const TPtrC &artistName = aArtistName.Left(KIRDbMaxStrLen);
+ const TPtrC &channelName = aChannelName.Left(KIRDbMaxStrLen);
+ const TPtrC &channelUrl = aChannelUrl.Left(KIRDbMaxStrLen);
+ const TPtrC &channelDesc = aChannelDesc.Left(KIRDbMaxStrLen);
+ const TPtrC &imageUrl = aImageUrl.Left(KIRDbMaxStrLen);
+ const TPtrC &genreName = aGenreName.Left(KIRDbMaxStrLen);
+ const TPtrC &countryName = aCountryName.Left(KIRDbMaxStrLen);
+ const TPtrC &languageName = aLanguageName.Left(KIRDbMaxStrLen);
+
+ TInt songLen = aSongName.Length();
+ TInt artistLen = aArtistName.Length();
+ if( songLen + artistLen > KMaxSize )
+ {
+ IRLOG_DEBUG3( "CIRSongHistoryDb::AddSongHistoryStartL - LONG METADATA %d, %d", songLen, artistLen );
+ }
+
+ TRAP(error,//trap start
+
+ iSongHistoryTable.InsertL();
+ iSongHistoryTable.SetColL(columns->ColNo( KSongHistoryDBSongNameColumn ), songName);
+ iSongHistoryTable.SetColL(columns->ColNo( KSongHistoryDBArtistNameColumn ), artistName);
+ iSongHistoryTable.SetColL(columns->ColNo( KSongHistoryDBChannelNameColumn ), channelName);
+ iSongHistoryTable.SetColL(columns->ColNo( KSongHistoryDBChannelUrlColumn ), channelUrl);
+ iSongHistoryTable.SetColL(columns->ColNo( KSongHistoryDBChannelTypeColumn ), aChannelType);
+ iSongHistoryTable.SetColL(columns->ColNo( KSongHistoryDBChannelIdColumn ), aChannelId);
+ iSongHistoryTable.SetColL(columns->ColNo( KSongHistoryDBBitrateColumn ), aBitrate);
+ iSongHistoryTable.SetColL(columns->ColNo( KSongHistoryDBChannelDescColumn ), channelDesc);
+ iSongHistoryTable.SetColL(columns->ColNo( KSongHistoryDBImageUrlColumn ), imageUrl);
+ iSongHistoryTable.SetColL(columns->ColNo( KSongHistoryDBGenreNameColumn ), genreName);
+ iSongHistoryTable.SetColL(columns->ColNo( KSongHistoryDBCountryNameColumn ), countryName);
+ iSongHistoryTable.SetColL(columns->ColNo( KSongHistoryDBLanguageNameColumn ), languageName);
+ iSongHistoryTable.SetColL(columns->ColNo( KSongHistoryDBMusicStatusColumn ), aMusicFlag);
+ iSongHistoryTable.PutL();
+ );
+
+ CleanupStack::PopAndDestroy(columns);
+ if( error!=KErrNone )
+ {
+ User::LeaveIfError(error);
+ }
+
+ iSongHistoryTable.Reset();
+ IRLOG_DEBUG( "CIRSongHistoryDb::AddSongHistoryStartL - Exiting." );
+
+ return bRetval;
+}
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryDb:AddToSongHistoryDb2L()
+// adds the history song into the db
+// Returns ETure if songHistory count exceeds 100, else EFalse
+// ---------------------------------------------------------------------------
+
+TBool CIRSongHistoryDb::AddToSongHistoryDb2L( const TDesC& aSongName,
+ const TDesC& aArtistName,
+ const TDesC& aChannelName,
+ const TDesC& aMusicFlag)
+{
+ IRLOG_DEBUG( "CIRSongHistoryDb::AddToSongHistoryDb2L" );
+
+ TBool bRetval = EFalse;
+ TInt error= 0;
+ TInt songCompareFlag = 0;
+ TInt artistCompareFlag = 0;
+
+
+ iSongHistoryTable2.Reset();
+
+ CDbColSet* columns = iSongHistoryTable2.ColSetL();
+ CleanupStack::PushL(columns);
+
+ /* the following is to judge wether the song is already in the db */
+ if ( iSongHistoryTable2.CountL() >= 1 )
+ {
+ TInt songNameColumn = columns->ColNo( KSongHistoryDBSongNameColumn );
+ TInt artistNameColumn = columns->ColNo( KSongHistoryDBArtistNameColumn );
+
+ for ( iSongHistoryTable2.LastL(); iSongHistoryTable2.AtRow(); iSongHistoryTable2.PreviousL() )
+ {
+ iSongHistoryTable2.GetL();
+ RBuf songName;
+ RBuf artistName;
+
+ CleanupClosePushL(songName);
+ CleanupClosePushL(artistName);
+
+ songName.CreateL(iSongHistoryTable2.ColDes( songNameColumn ));
+ artistName.CreateL(iSongHistoryTable2.ColDes( artistNameColumn ));
+
+ songCompareFlag = (songName).Compare(aSongName);
+ artistCompareFlag = (artistName).Compare(aArtistName);
+
+ CleanupStack::PopAndDestroy(2);
+
+ if( 0 == songCompareFlag && 0 == artistCompareFlag )
+ {
+ CleanupStack::PopAndDestroy(columns);
+ iSongHistoryTable2.Reset();
+ return bRetval;
+ }
+ }
+ }
+ /* end */
+
+ //if song history entries are greater than or equal to 100
+ if( iSongHistoryTable2.CountL() >= KMaxNoSongHistoryDbEntries )
+ {
+ //first row is selected
+ iSongHistoryTable2.FirstL();
+ //the current row is selected
+ iSongHistoryTable2.GetL();
+ //delete the current row
+ iSongHistoryTable2.DeleteL();
+ Compact();
+ bRetval = ETrue;
+ }
+
+ const TPtrC &songName = aSongName.Left(KIRDbMaxStrLen);
+ const TPtrC &artistName = aArtistName.Left(KIRDbMaxStrLen);
+ const TPtrC &channelName = aChannelName.Left(KIRDbMaxStrLen);
+ const TPtrC &musicFlag = aMusicFlag.Left(KIRDbMaxStrLen);
+
+
+ TInt songLen = aSongName.Length();
+ TInt artistLen = aArtistName.Length();
+ if( songLen + artistLen > KMaxSize || aChannelName.Length() > KMaxSize)
+ {
+ IRLOG_DEBUG3( "CIRSongHistoryDb::AddToSongHistoryDb2L - too long song info: %d or channel info: %d", songLen+artistLen, aChannelName.Length() );
+ }
+
+ TRAP(error,//trap start
+
+ iSongHistoryTable2.InsertL();
+ iSongHistoryTable2.SetColL(columns->ColNo( KSongHistoryDBSongNameColumn ), songName);
+ iSongHistoryTable2.SetColL(columns->ColNo( KSongHistoryDBArtistNameColumn ), artistName);
+ iSongHistoryTable2.SetColL(columns->ColNo( KSongHistoryDBChannelNameColumn ), channelName);
+ iSongHistoryTable2.SetColL(columns->ColNo( KSongHistoryDBMusicStatusColumn ), musicFlag);
+ iSongHistoryTable2.PutL();
+ );
+
+ CleanupStack::PopAndDestroy(columns);
+ if( error!=KErrNone )
+ {
+ User::LeaveIfError(error);
+ }
+
+ iSongHistoryTable2.Reset();
+ IRLOG_DEBUG( "CIRSongHistoryDb::AddSongHistoryStartL - Exiting." );
+
+ return bRetval;
+}
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryDb::GetAllSongHistoryListL()
+// gets all the song history entries into an array
+// ---------------------------------------------------------------------------
+//
+void CIRSongHistoryDb::GetAllSongHistoryListL(RPointerArray& aHistoryDataArr)
+{
+ IRLOG_DEBUG( "CIRSongHistoryDb::GetAllSongHistoryListL" );
+
+ if(iSongHistoryTable.CountL() < 1)
+ {
+ return;
+ }
+
+ CDbColSet* columns = iSongHistoryTable.ColSetL();
+ TInt songColumn = columns->ColNo( KSongHistoryDBSongNameColumn );
+ TInt artistColumn = columns->ColNo( KSongHistoryDBArtistNameColumn );
+ TInt channelColumn = columns->ColNo( KSongHistoryDBChannelNameColumn );
+ TInt channelUrlColumn = columns->ColNo( KSongHistoryDBChannelUrlColumn );
+ TInt channelTypeColumn = columns->ColNo( KSongHistoryDBChannelTypeColumn );
+ TInt channelIdColumn = columns->ColNo( KSongHistoryDBChannelIdColumn );
+ TInt bitrateColumn = columns->ColNo( KSongHistoryDBBitrateColumn );
+ TInt channelDescColumn = columns->ColNo( KSongHistoryDBChannelDescColumn );
+ TInt imageUrlColumn = columns->ColNo( KSongHistoryDBImageUrlColumn );
+ TInt genreNameColumn = columns->ColNo( KSongHistoryDBGenreNameColumn );
+ TInt countryNameColumn = columns->ColNo( KSongHistoryDBCountryNameColumn );
+ TInt languageNameColumn = columns->ColNo( KSongHistoryDBLanguageNameColumn );
+ TInt musicStatusColumn = columns->ColNo( KSongHistoryDBMusicStatusColumn );
+
+ delete columns;
+ columns = NULL;
+
+ TInt song = 0;
+
+
+ for ( iSongHistoryTable.LastL(); iSongHistoryTable.AtRow(); iSongHistoryTable.PreviousL() )
+ {
+ iSongHistoryTable.GetL();
+
+ RBuf songName;
+ RBuf artistName;
+ RBuf channelName;
+ RBuf channelUrl;
+ TInt channelType;
+ TInt channelId;
+ TInt bitrate;
+ RBuf channelDesc;
+ RBuf imageUrl;
+ RBuf genreName;
+ RBuf countryName;
+ RBuf languageName;
+ RBuf channelMusicStatus;
+
+ songName.CreateL(iSongHistoryTable.ColDes( songColumn ));
+ songName.CleanupClosePushL();
+
+ artistName.CreateL(iSongHistoryTable.ColDes( artistColumn ));
+ artistName.CleanupClosePushL();
+
+ channelName.CreateL(iSongHistoryTable.ColDes( channelColumn ));
+ channelName.CleanupClosePushL();
+
+ channelUrl.CreateL(iSongHistoryTable.ColDes( channelUrlColumn ));
+ channelUrl.CleanupClosePushL();
+
+ channelType=iSongHistoryTable.ColUint8( channelTypeColumn );
+
+ channelId=iSongHistoryTable.ColUint16( channelIdColumn );
+
+ bitrate=iSongHistoryTable.ColUint16( bitrateColumn );
+
+ channelDesc.CreateL(iSongHistoryTable.ColDes( channelDescColumn ));
+ channelDesc.CleanupClosePushL();
+
+ imageUrl.CreateL(iSongHistoryTable.ColDes( imageUrlColumn ));
+ imageUrl.CleanupClosePushL();
+
+ genreName.CreateL(iSongHistoryTable.ColDes( genreNameColumn ));
+ genreName.CleanupClosePushL();
+
+ countryName.CreateL(iSongHistoryTable.ColDes( countryNameColumn ));
+ countryName.CleanupClosePushL();
+
+ languageName.CreateL(iSongHistoryTable.ColDes( languageNameColumn ));
+ languageName.CleanupClosePushL();
+
+ channelMusicStatus.CreateL(iSongHistoryTable.ColDes( musicStatusColumn ));
+ channelMusicStatus.CleanupClosePushL();
+
+ aHistoryDataArr[song]->SetHistoryInfoL(songName, artistName, channelUrl,
+ channelName,channelType,channelId,bitrate,channelDesc ,
+ imageUrl, genreName, countryName, languageName, channelMusicStatus);
+ ++song;
+ CleanupStack::PopAndDestroy(&channelMusicStatus);
+ CleanupStack::PopAndDestroy(&languageName);
+ CleanupStack::PopAndDestroy(&countryName);
+ CleanupStack::PopAndDestroy(&genreName);
+ CleanupStack::PopAndDestroy(&imageUrl);
+ CleanupStack::PopAndDestroy(&channelDesc);
+ CleanupStack::PopAndDestroy(&channelUrl);
+ CleanupStack::PopAndDestroy(&channelName);
+ CleanupStack::PopAndDestroy(&artistName);
+ CleanupStack::PopAndDestroy(&songName);
+ }
+
+
+ IRLOG_DEBUG( "CIRSongHistoryDb::GetAllSongHistoryListL - Exiting." );
+}
+
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryDb::GetAllSongHistoryList2L()
+// gets all the song history entries into an array
+// ---------------------------------------------------------------------------
+//
+void CIRSongHistoryDb::GetAllSongHistoryList2L(RPointerArray& aSongEntries)
+{
+ IRLOG_DEBUG( "CIRSongHistoryDb::GetAllSongHistoryList2L" );
+
+ if(iSongHistoryTable2.CountL() < 1)
+ {
+ return;
+ }
+
+ CDbColSet* columns = iSongHistoryTable2.ColSetL();
+ TInt songColumn = columns->ColNo( KSongHistoryDBSongNameColumn );
+ TInt artistColumn = columns->ColNo( KSongHistoryDBArtistNameColumn );
+ TInt channelNameColumn = columns->ColNo( KSongHistoryDBChannelNameColumn );
+ TInt musicStatusColumn = columns->ColNo( KSongHistoryDBMusicStatusColumn );
+
+ delete columns;
+ columns = NULL;
+
+ TInt song = 0;
+
+ for ( iSongHistoryTable2.LastL(); iSongHistoryTable2.AtRow(); iSongHistoryTable2.PreviousL() )
+ {
+ iSongHistoryTable2.GetL();
+
+ RBuf songName;
+ RBuf artistInfo, channelName;
+ RBuf musicStatus;
+
+ CleanupClosePushL(songName);
+ CleanupClosePushL(artistInfo);
+ CleanupClosePushL(channelName);
+ CleanupClosePushL(musicStatus);
+
+ songName.CreateL(iSongHistoryTable2.ColDes( songColumn ));
+ artistInfo.CreateL(iSongHistoryTable2.ColDes( artistColumn ));
+ channelName.CreateL(iSongHistoryTable2.ColDes( channelNameColumn ));
+ musicStatus.CreateL(iSongHistoryTable2.ColDes(musicStatusColumn));
+
+ aSongEntries[song]->SetSongNameL(songName);
+ aSongEntries[song]->SetArtistL(artistInfo);
+ aSongEntries[song]->SetChannelNameL(channelName);
+ aSongEntries[song]->SetChannelMusicStatusL(musicStatus);
+ ++song;
+
+ CleanupStack::PopAndDestroy(4);
+ }
+
+ IRLOG_DEBUG( "CIRSongHistoryDb::GetAllSongHistoryListL - Exiting." );
+}
+
+// ---------------------------------------------------------------------------
+// Function : ClearAllSongHistoryFromDb
+// delete all the entries from the database.
+// ---------------------------------------------------------------------------
+//
+TInt CIRSongHistoryDb::ClearAllSongHistoryFromDb(/*RPointerArray& aSongHistoryInfoArr*/)
+{
+
+ TInt error = KErrNone;
+
+ IRLOG_DEBUG( "CIRSongHistoryDb::ClearAllSongHistoryFromDb - Entering" );
+ TRAP(error, iSongHistoryTable.FirstL());
+ if(error != KErrNone)
+ {
+ return error;
+ }
+
+ while (iSongHistoryTable.AtRow())
+ {
+ TRAPD(error,
+ iSongHistoryTable.GetL();
+ iSongHistoryTable.DeleteL();
+ iSongHistoryTable.NextL(););
+ if(error)
+ {
+ Compact();
+ return error;
+ }
+ }
+
+ Compact();
+ IRLOG_DEBUG( "CIRSongHistoryDb::ClearAllSongHistoryFromDb - Exiting." );
+ return KErrNone;
+
+}
+
+TInt CIRSongHistoryDb::DeleteOneHistory(TInt aIndex)
+{
+ IRLOG_DEBUG( "CIRSongHistoryDb::DeleteOneHistory - Entering" );
+
+ TInt retValue = 0;
+ TRAPD(error,(retValue = DeleteOneHistoryL(aIndex)));
+
+ if( KErrNone != error )
+ {
+ return error;
+ }
+
+ if( KErrNone != retValue)
+ {
+ return retValue;
+ }
+ IRLOG_DEBUG( "CIRSongHistoryDb::DeleteOneHistory - exiting" );
+ return KErrNone;
+}
+
+TInt CIRSongHistoryDb::DeleteOneHistoryL(TInt aIndex)
+{
+ IRLOG_DEBUG( "CIRSongHistoryDb::DeleteOneHistoryL - Entering" );
+ TInt totalCount = iSongHistoryTable.CountL();
+ if (aIndex < 0 || aIndex >= totalCount)
+ {
+ return KErrArgument;
+ }
+
+ iSongHistoryTable.LastL();
+ TInt tempIndex = 0;
+ while (tempIndex < aIndex)
+ {
+ TRAPD(error,iSongHistoryTable.PreviousL());
+ if (KErrNone != error)
+ {
+ Compact();
+ return error;
+ }
+ tempIndex++;
+ }
+
+ iSongHistoryTable.GetL();
+ iSongHistoryTable.DeleteL();
+ IRLOG_DEBUG( "CIRSongHistoryDb::DeleteOneHistoryL - exiting" );
+ return KErrNone;
+}
+
+TInt CIRSongHistoryDb::DeleteOneSongHistory(TInt aIndex)
+{
+ IRLOG_DEBUG( "CIRSongHistoryDb::DeleteOneSongHistory - Entering" );
+
+ TInt retValue = 0;
+ TRAPD(error,(retValue = DeleteOneSongHistoryL(aIndex)));
+
+ if( KErrNone != error )
+ {
+ return error;
+ }
+
+ if( KErrNone != retValue)
+ {
+ return retValue;
+ }
+ IRLOG_DEBUG( "CIRSongHistoryDb::DeleteOneSongHistory - exiting" );
+ return KErrNone;
+}
+
+TInt CIRSongHistoryDb::DeleteOneSongHistoryL(TInt aIndex)
+{
+ IRLOG_DEBUG( "CIRSongHistoryDb::DeleteOneSongHistoryL - Entering" );
+ TInt totalCount = iSongHistoryTable2.CountL();
+ if (aIndex < 0 || aIndex >= totalCount)
+ {
+ return KErrArgument;
+ }
+
+ iSongHistoryTable2.LastL();
+ TInt tempIndex = 0;
+ while (tempIndex < aIndex)
+ {
+ TRAPD(error,iSongHistoryTable2.PreviousL());
+ if (KErrNone != error)
+ {
+ Compact();
+ return error;
+ }
+ tempIndex++;
+ }
+
+ iSongHistoryTable2.GetL();
+ iSongHistoryTable2.DeleteL();
+ IRLOG_DEBUG( "CIRSongHistoryDb::DeleteOneSongHistoryL - exiting" );
+ return KErrNone;
+}
+
+// ---------------------------------------------------------------------------
+// Function : ClearAllSongHistoryFromDb2
+// delete all the entries from the database.
+// ---------------------------------------------------------------------------
+//
+TInt CIRSongHistoryDb::ClearAllSongHistoryFromDb2()
+{
+
+ TInt error = KErrNone;
+
+ IRLOG_DEBUG( "CIRSongHistoryDb::ClearAllSongHistoryFromDb2 - Entering" );
+ TRAP(error, iSongHistoryTable2.FirstL());
+ if(error != KErrNone)
+ {
+ return error;
+ }
+
+ while (iSongHistoryTable2.AtRow())
+ {
+ TRAPD(error,
+ iSongHistoryTable2.GetL();
+ iSongHistoryTable2.DeleteL();
+ iSongHistoryTable2.NextL(););
+ if(error)
+ {
+ Compact();
+ return error;
+ }
+
+ }
+ Compact();
+ IRLOG_DEBUG( "CIRSongHistoryDb::ClearAllSongHistoryFromDb - Exiting." );
+ return KErrNone;
+
+}
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryDb::ConstructL()
+// Standard 2nd phase construction
+// ---------------------------------------------------------------------------
+//
+void CIRSongHistoryDb::ConstructL()
+{
+ IRLOG_DEBUG( "CIRSongHistoryDb::ConstructL" );
+ User::LeaveIfError(iFsSession.Connect());
+
+ CIRSettings* settings = CIRSettings::OpenL();
+
+ TFileName songHistoryDbFile = settings->PrivatePath();
+ songHistoryDbFile.Append(KSongHistoryDbFile);
+
+ CreateDbCondition(songHistoryDbFile);
+ OpenSongHistoryDbL(songHistoryDbFile);
+
+ settings->Close();
+
+ IRLOG_DEBUG( "CIRSongHistoryDb::ConstructL- Exiting." );
+}
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryDb::CloseSongHistoryDb()
+// Closes the database
+// ---------------------------------------------------------------------------
+//
+void CIRSongHistoryDb::CloseSongHistoryDb()
+{
+ IRLOG_DEBUG( "CIRSongHistoryDb::CloseSongHistoryDb" );
+ iSongHistoryTable.Close();
+ iSongHistoryTable2.Close();
+ Close();
+ IRLOG_DEBUG( "CIRSongHistoryDb::CloseSongHistoryDb - Exiting." );
+}
+
+
+/**
+* Function : CreateSongHistoryTablesL()
+* creates songhistory table with three columns
+* log data
+* ---------------------------------------------------------------------------
+* SongHistoryTable
+*---------------------------
+*| SongName | ArtistName | ChannelName | ChannelUrl | ChannelType | ChannelId | Bitrate | ChannelDesc | ImageUrl | GenreName | CountryName | LanguageName | MusicStatus
+*---------------------------
+*|EDbColText| EDbColText | EDbColText | EDbColText | EDbColUint8 | EDbColUint16 | EDbColUint16 | EDbColText | EDbColText | EDbColText | EDbColText | EDbColText | EDbColText
+*----------------------------------------------------------------------------
+*/
+void CIRSongHistoryDb::CreateSongHistoryTablesL()
+{
+ IRLOG_DEBUG( "CIRSongHistoryDb::CreateSongHistoryTablesL" );
+ CDbColSet* columns = CDbColSet::NewLC();
+
+ TRAPD( error,
+ columns->AddL( TDbCol( KSongHistoryDBSongNameColumn, EDbColText, KMaxColumnLength ) );
+ columns->AddL( TDbCol( KSongHistoryDBArtistNameColumn, EDbColText, KMaxColumnLength) );
+ columns->AddL( TDbCol( KSongHistoryDBChannelNameColumn, EDbColText, KMaxColumnLength ) );
+ columns->AddL( TDbCol( KSongHistoryDBChannelUrlColumn, EDbColText, KMaxColumnLength ) );
+ columns->AddL( TDbCol( KSongHistoryDBChannelTypeColumn, EDbColUint8 ) );
+ columns->AddL( TDbCol( KSongHistoryDBChannelIdColumn, EDbColUint16 ) );
+ columns->AddL( TDbCol( KSongHistoryDBBitrateColumn, EDbColUint16 ) );
+ columns->AddL( TDbCol( KSongHistoryDBChannelDescColumn, EDbColText, KMaxColumnLength ) );
+ columns->AddL( TDbCol( KSongHistoryDBImageUrlColumn, EDbColText, KMaxColumnLength ) );
+ columns->AddL( TDbCol( KSongHistoryDBGenreNameColumn, EDbColText, KMaxColumnLength ) );
+ columns->AddL( TDbCol( KSongHistoryDBCountryNameColumn, EDbColText, KMaxColumnLength ) );
+ columns->AddL( TDbCol( KSongHistoryDBLanguageNameColumn, EDbColText, KMaxColumnLength ) );
+ columns->AddL( TDbCol( KSongHistoryDBMusicStatusColumn, EDbColText, KMaxColumnLength ) );
+ );
+ User::LeaveIfError( error );
+
+ User::LeaveIfError( CreateTable( KSongHistoryDBTable, *columns ) );
+
+ CleanupStack::PopAndDestroy( columns );
+ IRLOG_DEBUG( "CIRSongHistoryDb::CreateSongHistoryTablesL - Exiting." );
+}
+
+/**
+* Function : CreateSongHistoryTables2L()
+* creates songhistory table with three columns
+* log data
+* ---------------------------------------------------------------------------
+* SongHistoryTable
+*---------------------------
+*| SongName | ArtistName | ChannelName | MusicStatusFlag
+*---------------------------
+*|EDbColText| EDbColText | EDbColText | EDbColText
+*----------------------------------------------------------------------------
+*/
+void CIRSongHistoryDb::CreateSongHistoryTables2L()
+{
+ IRLOG_DEBUG( "CIRSongHistoryDb::CreateSongHistoryTablesL" );
+ CDbColSet* columns = CDbColSet::NewLC();
+
+ TRAPD( error,
+ columns->AddL( TDbCol( KSongHistoryDBSongNameColumn, EDbColText, KMaxColumnLength ) );
+ columns->AddL( TDbCol( KSongHistoryDBArtistNameColumn, EDbColText, KMaxColumnLength) );
+ columns->AddL( TDbCol( KSongHistoryDBChannelNameColumn, EDbColText, KMaxColumnLength) );
+ columns->AddL( TDbCol( KSongHistoryDBMusicStatusColumn, EDbColText, KMaxColumnLength ) );
+ );
+ User::LeaveIfError( error );
+
+ User::LeaveIfError( CreateTable( KSongHistoryDBTable2, *columns ) );
+
+ CleanupStack::PopAndDestroy( columns );
+ IRLOG_DEBUG( "CIRSongHistoryDb::CreateSongHistoryTablesL - Exiting." );
+}
+
+
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryDb::OpenSongHistoryDbL()
+// opening the data base
+// ---------------------------------------------------------------------------
+//
+void CIRSongHistoryDb::OpenSongHistoryDbL(const TFileName& aSongHistoryDbFile)
+{
+ IRLOG_DEBUG( "CIRSongHistoryDb::OpenSongHistoryDbL" );
+ CloseSongHistoryDb(); //Ensure that the database is closed before trying to open it.
+
+
+ TInt error = KErrNone;
+
+ error = Open(iFsSession,aSongHistoryDbFile);
+ if( error!=KErrNone )
+ {
+ //if database is failed to open then
+ //function leaves
+ IRLOG_ERROR2( "CIRSongHistoryDb::OpenSongHistoryDbL - Opening session database failed (%d)", error );
+ User::LeaveIfError(error);
+ }
+ if( IsDamaged() || !InTransaction() )
+ {
+ //if data base is damaged then
+ //it tried to recover
+ //if recovery is not possible function leaves
+ error = Recover();
+ if ( KErrNone == error)
+ {
+ //if recovered data base is compacted
+ error = Compact();
+ }
+ User::LeaveIfError(error);
+ }
+
+ //open the table
+ error = iSongHistoryTable.Open(*this, KSongHistoryDBTable, iSongHistoryTable.EUpdatable);
+ if( error )
+ {
+ User::LeaveIfError(error);
+ }
+
+ error = iSongHistoryTable2.Open(*this, KSongHistoryDBTable2, iSongHistoryTable2.EUpdatable);
+ if( error )
+ {
+ iSongHistoryTable.Close();
+ User::LeaveIfError(error);
+ }
+
+ IRLOG_DEBUG( "CIRSongHistoryDb::OpenSongHistoryDbL - Exiting." );
+}
+
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryDb::CreateSongHistoryDb()
+// @database filename
+// ---------------------------------------------------------------------------
+//
+TInt CIRSongHistoryDb::CreateSongHistoryDb(const TFileName& aSongHistoryDbFile )
+{
+ IRLOG_DEBUG( "CIRSongHistoryDb::CreateSongHistoryDb" );
+
+
+ TInt error = Replace(iFsSession,aSongHistoryDbFile);
+ if ( error != KErrNone )
+ {
+ IRLOG_ERROR2( "CIRSongHistoryDb::CreateSongHistoryDb - Creating history database failed (%d)", error );
+ return error;
+ }
+
+ TRAPD(err1,CreateSongHistoryTablesL());
+ if(err1)
+ {
+ return err1;
+ }
+
+ //if error, no handling
+ TRAPD(err2, CreateSongHistoryTables2L());
+ if( err2 )
+ {
+ return err2;
+ }
+ IRLOG_DEBUG( "CIRSongHistoryDb::CreateSongHistoryDb - Exiting." );
+ return KErrNone;
+}
+
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryDb::CountSongHistoryDb()
+// count the database entries
+// ---------------------------------------------------------------------------
+//
+
+TInt CIRSongHistoryDb::CountSongHistoryDb()
+{
+ IRLOG_DEBUG( "CIRSongHistoryDb::CountSongHistoryDb" );
+ TInt historyCount = 0;
+ iSongHistoryTable.Reset();
+ TRAPD(error,historyCount= iSongHistoryTable.CountL());
+ if(error)
+ {
+
+ }
+ IRLOG_DEBUG( "CIRSongHistoryDb::CountSongHistoryDb - Exiting." );
+ return historyCount;
+
+}
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryDb::CountSongHistoryDb2()
+// count the database entries
+// ---------------------------------------------------------------------------
+//
+TInt CIRSongHistoryDb::CountSongHistoryDb2()
+{
+ IRLOG_DEBUG( "CIRSongHistoryDb::CountSongHistoryDb" );
+ TInt historyCount = 0;
+ iSongHistoryTable2.Reset();
+ TRAPD(error,historyCount= iSongHistoryTable2.CountL());
+ if(error)
+ {
+ historyCount = -1;
+ }
+ IRLOG_DEBUG( "CIRSongHistoryDb::CountSongHistoryDb - Exiting." );
+ return historyCount;
+}
+// ---------------------------------------------------------------------------
+// CIRSongHistoryDb::GetLastHistoryItemL()
+// Gets the last song history item
+// ---------------------------------------------------------------------------
+//
+void CIRSongHistoryDb::GetLastHistoryItemL(RBuf& aSongName, RBuf& aArtistName,
+ RBuf& aChannelName, RBuf& aChannelUrl)
+{
+ if( iSongHistoryTable.IsEmptyL() || iSongHistoryTable.LastL() == EFalse)
+ {
+ return;
+ }
+
+ iSongHistoryTable.GetL();
+
+ CDbColSet* columns = iSongHistoryTable.ColSetL();
+ TInt songColumn = columns->ColNo( KSongHistoryDBSongNameColumn );
+ TInt artistColumn = columns->ColNo( KSongHistoryDBArtistNameColumn );
+ TInt channelColumn = columns->ColNo( KSongHistoryDBChannelNameColumn );
+ TInt channelUrlColumn = columns->ColNo( KSongHistoryDBChannelUrlColumn );
+
+ delete columns;
+ columns = NULL;
+
+ aSongName.CreateL(iSongHistoryTable.ColDes( songColumn ));
+ aArtistName.CreateL(iSongHistoryTable.ColDes( artistColumn ));
+ aChannelName.CreateL(iSongHistoryTable.ColDes( channelColumn ));
+ aChannelUrl.CreateL(iSongHistoryTable.ColDes( channelUrlColumn ));
+
+
+ iSongHistoryTable.Reset();
+}
+// ---------------------------------------------------------------------------
+// CIRSongHistoryDb::GetChannelSongsCountL()
+// Gets the channel's song count.
+// ---------------------------------------------------------------------------
+//
+
+TUint CIRSongHistoryDb::GetChannelSongsCountL( const RBuf& aChannelName, const RBuf& aChannelUrl )
+{
+ _LIT( strQuery, "Select SongName from SongHistoryTable where ChannelName='%S' AND ChannelUrl='%S'");
+
+ TBuf bufQuery;
+ bufQuery.Format( strQuery, &aChannelName, &aChannelUrl );
+
+ TDbQuery querySearchChannel( bufQuery );
+ RDbView dbView;
+
+ TInt error = dbView.Prepare( *this, querySearchChannel );
+ User::LeaveIfError(error);
+
+ error = dbView.Evaluate(); // 0, evaluation is complete
+ User::LeaveIfError(error);
+
+ TInt cRows = dbView.CountL();
+
+ dbView.Close();
+
+ return cRows;
+}
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryDb::SyncSongHistoryDb()
+// Synchronises the History DB with removed channel entry in the ISDS
+// ---------------------------------------------------------------------------
+//
+
+void CIRSongHistoryDb::SyncSongHistoryDbL(TInt aChannelId)
+{
+ IRLOG_DEBUG( "CIRSongHistoryDb::SyncSongHistoryDbL" );
+
+
+ if(iSongHistoryTable.CountL() < 1)
+ {
+ return;
+ }
+
+ CDbColSet* columns = iSongHistoryTable.ColSetL();
+ TInt songColumn = columns->ColNo( KSongHistoryDBSongNameColumn );
+ TInt artistColumn = columns->ColNo( KSongHistoryDBArtistNameColumn );
+ TInt channelColumn = columns->ColNo( KSongHistoryDBChannelNameColumn );
+ TInt channelUrlColumn = columns->ColNo( KSongHistoryDBChannelUrlColumn );
+ TInt channelTypeColumn = columns->ColNo( KSongHistoryDBChannelTypeColumn );
+ TInt channelIdColumn = columns->ColNo( KSongHistoryDBChannelIdColumn );
+ TInt bitrateColumn = columns->ColNo( KSongHistoryDBBitrateColumn );
+ TInt channelDescColumn = columns->ColNo( KSongHistoryDBChannelDescColumn );
+ TInt imageUrlColumn = columns->ColNo( KSongHistoryDBImageUrlColumn );
+ TInt genreNameColumn = columns->ColNo( KSongHistoryDBGenreNameColumn );
+ TInt countryNameColumn = columns->ColNo( KSongHistoryDBCountryNameColumn );
+ TInt languageNameColumn = columns->ColNo( KSongHistoryDBLanguageNameColumn );
+ TInt musicStatusColumn = columns->ColNo( KSongHistoryDBMusicStatusColumn );
+
+ delete columns;
+ columns = NULL;
+
+ // Find out the channel to be changed
+ for ( iSongHistoryTable.LastL(); iSongHistoryTable.AtRow(); iSongHistoryTable.PreviousL() )
+ {
+ iSongHistoryTable.GetL();
+ // Extracting the values from the database.
+ TInt channelId;
+ RBuf imageUrl, genreName, countryName, languageName;
+ RBuf channelMusicStatus;
+
+ CleanupClosePushL(imageUrl);
+ CleanupClosePushL(genreName);
+ CleanupClosePushL(countryName);
+ CleanupClosePushL(languageName);
+ CleanupClosePushL(channelMusicStatus);
+
+ channelId=iSongHistoryTable.ColUint16( channelIdColumn );
+ imageUrl.CreateL(iSongHistoryTable.ColDes( imageUrlColumn ));
+ genreName.CreateL(iSongHistoryTable.ColDes( genreNameColumn ));
+ countryName.CreateL(iSongHistoryTable.ColDes( countryNameColumn ));
+ languageName.CreateL(iSongHistoryTable.ColDes( languageNameColumn ));
+ channelMusicStatus.CreateL(iSongHistoryTable.ColDes( musicStatusColumn ));
+
+
+ if(aChannelId == channelId)
+ {
+ iSongHistoryTable.UpdateL();
+ iSongHistoryTable.SetColL(channelTypeColumn, 0);
+ iSongHistoryTable.SetColL(channelIdColumn, 0);
+ iSongHistoryTable.SetColL(imageUrlColumn, KNo);
+ iSongHistoryTable.SetColL(genreNameColumn, KNo);
+ iSongHistoryTable.SetColL(countryNameColumn, KNo);
+ iSongHistoryTable.SetColL(languageNameColumn, KNo);
+ iSongHistoryTable.SetColL(musicStatusColumn, KNo);
+ iSongHistoryTable.PutL();
+ }
+ CleanupStack::PopAndDestroy(5);
+ }
+ iSongHistoryTable.Reset();
+
+ IRLOG_DEBUG( "CIRSongHistoryDb::SyncSongHistoryDbL - Exiting." );
+}
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryDb::GetIdPresentInDb()
+// Gets whether that particular channel id is present in Db or not.
+// ---------------------------------------------------------------------------
+//
+
+TBool CIRSongHistoryDb::GetIdPresentInDbL(TInt aChannelId)
+{
+ IRLOG_DEBUG( "CIRSongHistoryDb::GetIdPresentInDbL" );
+
+ TBool value = EFalse;
+
+ if(iSongHistoryTable.CountL() < 1)
+ {
+ return value;
+ }
+
+ CDbColSet* columns = iSongHistoryTable.ColSetL();
+ TInt channelIdColumn = columns->ColNo( KSongHistoryDBChannelIdColumn );
+
+ delete columns;
+ columns = NULL;
+
+ // Find out the channel to be changed
+ for ( iSongHistoryTable.LastL(); iSongHistoryTable.AtRow(); iSongHistoryTable.PreviousL() )
+ {
+ iSongHistoryTable.GetL();
+ TInt channelId;
+
+ channelId=iSongHistoryTable.ColUint16( channelIdColumn );
+ if(aChannelId == channelId)
+ {
+ value = ETrue;
+ }
+
+ }
+
+ iSongHistoryTable.Reset();
+
+ IRLOG_DEBUG( "CIRSongHistoryDb::GetIdPresentInDbL - Exiting." );
+ return value ;
+}
+
+
+
+// ---------------------------------------------------------------------------
+// CIRSongHistoryDb::UpdateSongHistoryDb()
+// Updates the song history DB when there is a channel change in the isds.
+// ---------------------------------------------------------------------------
+//
+
+TInt CIRSongHistoryDb::UpdateSongHistoryDbL( TInt aChannelId,
+ const TDesC& aChannelUrl,
+ const TDesC& aImageUrl,
+ const TDesC& aGenreName,
+ const TDesC& aCountryName,
+ const TDesC& aLanguageName,
+ const TDesC& aMusicFlag)
+{
+ IRLOG_DEBUG( "CIRSongHistoryDb::UpdateSongHistoryDbL" );
+
+ TBool channelChanged = EFalse ;
+ TInt compFlagUrl ;
+ TInt compFlagImageUrl, compFlagGenreName, compFlagCountryName, compFlagLanguageName;
+ TInt compFlagMusic ;
+ TInt compUrlChange ;
+
+ if(iSongHistoryTable.CountL() < 1)
+ {
+ return EFalse;
+ }
+
+ CDbColSet* columns = iSongHistoryTable.ColSetL();
+ TInt channelUrlColumn = columns->ColNo( KSongHistoryDBChannelUrlColumn );
+ TInt channelTypeColumn = columns->ColNo( KSongHistoryDBChannelTypeColumn );
+ TInt channelIdColumn = columns->ColNo( KSongHistoryDBChannelIdColumn );
+ TInt channelDescColumn = columns->ColNo( KSongHistoryDBChannelDescColumn );
+ TInt imageUrlColumn = columns->ColNo( KSongHistoryDBImageUrlColumn );
+ TInt genreNameColumn = columns->ColNo( KSongHistoryDBGenreNameColumn );
+ TInt countryNameColumn = columns->ColNo( KSongHistoryDBCountryNameColumn );
+ TInt languageNameColumn = columns->ColNo( KSongHistoryDBLanguageNameColumn );
+ TInt musicStatusColumn = columns->ColNo( KSongHistoryDBMusicStatusColumn );
+
+ delete columns;
+ columns = NULL;
+
+ // Find out the channel to be changed
+
+ for ( iSongHistoryTable.LastL(); iSongHistoryTable.AtRow(); iSongHistoryTable.PreviousL() )
+ {
+ iSongHistoryTable.GetL();
+ // Extracting the values from the database.
+ RBuf channelUrl;
+ RBuf imageUrl, genreName, countryName, languageName;
+ TInt channelId;
+ RBuf channelMusicStatus;
+
+ CleanupClosePushL(channelUrl);
+ CleanupClosePushL(imageUrl);
+ CleanupClosePushL(genreName);
+ CleanupClosePushL(countryName);
+ CleanupClosePushL(languageName);
+ CleanupClosePushL(channelMusicStatus);
+
+ channelUrl.CreateL(iSongHistoryTable.ColDes( channelUrlColumn ));
+ imageUrl.CreateL(iSongHistoryTable.ColDes( imageUrlColumn ));
+ genreName.CreateL(iSongHistoryTable.ColDes( genreNameColumn ));
+ countryName.CreateL(iSongHistoryTable.ColDes( countryNameColumn ));
+ languageName.CreateL(iSongHistoryTable.ColDes( languageNameColumn ));
+
+ channelId=iSongHistoryTable.ColUint16( channelIdColumn );
+
+ channelMusicStatus.CreateL(iSongHistoryTable.ColDes( musicStatusColumn ));
+
+ if(aChannelId == channelId)
+ {
+ compFlagUrl = (channelUrl).Compare(aChannelUrl);
+ compFlagImageUrl = (imageUrl).Compare(aImageUrl);
+ compFlagGenreName = (genreName).Compare(aGenreName);
+ compFlagCountryName = (countryName).Compare(aCountryName);
+ compFlagLanguageName = (languageName).Compare(aLanguageName);
+ compFlagMusic = (channelMusicStatus).Compare(aMusicFlag);
+ compUrlChange = (aChannelUrl).Compare(KNo);
+
+ if(compFlagUrl && compUrlChange)
+ {
+ iSongHistoryTable.UpdateL();
+ iSongHistoryTable.SetColL(channelUrlColumn, aChannelUrl);
+ iSongHistoryTable.PutL();
+ channelChanged = ETrue ;
+ }
+ if(compFlagImageUrl)
+ {
+ iSongHistoryTable.UpdateL();
+ iSongHistoryTable.SetColL(imageUrlColumn, aImageUrl);
+ iSongHistoryTable.PutL();
+ channelChanged = ETrue ;
+ }
+ if(compFlagGenreName)
+ {
+ iSongHistoryTable.UpdateL();
+ iSongHistoryTable.SetColL(genreNameColumn, aGenreName);
+ iSongHistoryTable.PutL();
+ channelChanged = ETrue ;
+ }
+ if(compFlagCountryName)
+ {
+ iSongHistoryTable.UpdateL();
+ iSongHistoryTable.SetColL(countryNameColumn, aCountryName);
+ iSongHistoryTable.PutL();
+ channelChanged = ETrue ;
+ }
+ if(compFlagLanguageName)
+ {
+ iSongHistoryTable.UpdateL();
+ iSongHistoryTable.SetColL(languageNameColumn, aLanguageName);
+ iSongHistoryTable.PutL();
+ channelChanged = ETrue ;
+ }
+ if(compFlagMusic)
+ {
+ iSongHistoryTable.UpdateL();
+ iSongHistoryTable.SetColL(musicStatusColumn, aMusicFlag);
+ iSongHistoryTable.PutL();
+ channelChanged = ETrue ;
+ }
+
+ }
+ CleanupStack::PopAndDestroy(6);
+ }
+ iSongHistoryTable.Reset();
+ IRLOG_DEBUG( "CIRSongHistoryDb::UpdateSongHistoryDbL - Exiting." );
+ return channelChanged;
+}
+
+void CIRSongHistoryDb::SearchAndDeleteRecordL(const TDesC& aChannelName, const TDesC& aChannelUrl,
+ TInt aChannelType, TInt aPresetId)
+{
+ CDbColSet* columns = iSongHistoryTable.ColSetL();
+ TInt channelNameColumn = columns->ColNo( KSongHistoryDBChannelNameColumn );
+ TInt channelUrlColumn = columns->ColNo( KSongHistoryDBChannelUrlColumn );
+ TInt channelTypeColumn = columns->ColNo( KSongHistoryDBChannelTypeColumn );
+ TInt channelIdColumn = columns->ColNo(KSongHistoryDBChannelIdColumn);
+
+ delete columns;
+ columns = NULL;
+
+ for (iSongHistoryTable.LastL(); iSongHistoryTable.AtRow(); iSongHistoryTable.PreviousL())
+ {
+ iSongHistoryTable.GetL();
+ TPtrC channelName = iSongHistoryTable.ColDes(channelNameColumn);
+ TPtrC channelUrl = iSongHistoryTable.ColDes(channelUrlColumn);
+ TInt channelType = iSongHistoryTable.ColInt(channelTypeColumn);
+ TInt channelId = iSongHistoryTable.ColInt(channelIdColumn);
+
+ if (0 == aChannelType)
+ {
+ //user-defined channel
+ if (aChannelName == channelName && aChannelUrl == channelUrl)
+ {
+ iSongHistoryTable.DeleteL();
+ break;
+ }
+ }
+ else
+ {
+ //channel from ISDS server
+ if (aChannelName == channelName && aPresetId == channelId)
+ {
+ iSongHistoryTable.DeleteL();
+ break;
+ }
+ }
+ }
+
+ iSongHistoryTable.Reset();
+}