internetradio2.0/songhistorysrc/irsonghistorydb.cpp
changeset 5 0930554dc389
parent 3 ee64f059b8e1
child 8 3b03c28289e6
--- a/internetradio2.0/songhistorysrc/irsonghistorydb.cpp	Fri May 14 15:43:29 2010 +0300
+++ b/internetradio2.0/songhistorysrc/irsonghistorydb.cpp	Thu May 27 12:46:34 2010 +0300
@@ -58,6 +58,9 @@
 _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");
@@ -154,20 +157,23 @@
 // ---------------------------------------------------------------------------
 //
 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& aMusicFlag
-											)
+                                            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" );
 
@@ -215,6 +221,9 @@
 	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();
@@ -235,6 +244,9 @@
 		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();
 		);
@@ -256,7 +268,7 @@
 // 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& aMusicFlag)
@@ -378,6 +390,9 @@
     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;
@@ -399,6 +414,9 @@
         TInt bitrate;
         RBuf channelDesc;
         RBuf imageUrl;
+        RBuf genreName;
+        RBuf countryName;
+        RBuf languageName;
         RBuf channelMusicStatus;
         
         songName.CreateL(iSongHistoryTable.ColDes( songColumn ));
@@ -425,16 +443,26 @@
         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]->SetHistoryInfo(songName, artistName, channelUrl,
                          channelName,channelType,channelId,bitrate,channelDesc ,
-                         imageUrl, channelMusicStatus);
-        ++song;
- 
-        
+                         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);
@@ -586,6 +614,54 @@
     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.
@@ -667,9 +743,9 @@
 * ---------------------------------------------------------------------------
 * SongHistoryTable
 *---------------------------
-*| SongName | ArtistName | ChannelName | ChannelUrl | ChannelType | ChannelId | Bitrate | ChannelDesc | ImageUrl 
+*| 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 | EDbColUint8 | EDbColUint16 | EDbColUint16 | EDbColText  | EDbColText | EDbColText | EDbColText  | EDbColText   | EDbColText 
 *----------------------------------------------------------------------------
 */
 void CIRSongHistoryDb::CreateSongHistoryTablesL()
@@ -687,6 +763,9 @@
     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 );
@@ -942,6 +1021,9 @@
     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;
@@ -953,12 +1035,18 @@
 			iSongHistoryTable.GetL();
 			// Extracting the values from the database.
 				TInt channelId;
-				RBuf imageUrl;
+				RBuf imageUrl, genreName, countryName, languageName;
                 RBuf channelMusicStatus;
                 
 				channelId=iSongHistoryTable.ColUint16( channelIdColumn );
-				imageUrl.Create(iSongHistoryTable.ColDes( imageUrlColumn ));
-				imageUrl.CleanupClosePushL();
+                imageUrl.Create(iSongHistoryTable.ColDes( imageUrlColumn ));
+                imageUrl.CleanupClosePushL();
+                genreName.Create(iSongHistoryTable.ColDes( genreNameColumn ));
+                genreName.CleanupClosePushL();
+                countryName.Create(iSongHistoryTable.ColDes( countryNameColumn ));
+                countryName.CleanupClosePushL();
+                languageName.Create(iSongHistoryTable.ColDes( languageNameColumn ));
+                languageName.CleanupClosePushL();
 				channelMusicStatus.Create(iSongHistoryTable.ColDes( musicStatusColumn ));
                 channelMusicStatus.CleanupClosePushL();
 
@@ -968,11 +1056,17 @@
 	                iSongHistoryTable.UpdateL();
 		            iSongHistoryTable.SetColL(channelTypeColumn, 0);
 		            iSongHistoryTable.SetColL(channelIdColumn, 0);
-		            iSongHistoryTable.SetColL(imageUrlColumn, KNo);
+                    iSongHistoryTable.SetColL(imageUrlColumn, KNo);
+                    iSongHistoryTable.SetColL(genreNameColumn, KNo);
+                    iSongHistoryTable.SetColL(countryNameColumn, KNo);
+                    iSongHistoryTable.SetColL(languageNameColumn, KNo);
 		            iSongHistoryTable.SetColL(musicStatusColumn, KNo);
 		            iSongHistoryTable.PutL();
 	                }
                 CleanupStack::PopAndDestroy(&channelMusicStatus);
+                CleanupStack::PopAndDestroy(&languageName);
+                CleanupStack::PopAndDestroy(&countryName);
+                CleanupStack::PopAndDestroy(&genreName);
                 CleanupStack::PopAndDestroy(&imageUrl);
 		}
 	iSongHistoryTable.Reset();
@@ -1034,7 +1128,10 @@
 TInt CIRSongHistoryDb::UpdateSongHistoryDbL(	TInt aChannelId,
 											const TDesC& aChannelName, 
 											const TDesC& aChannelUrl,
-											const TDesC& aImageUrl,
+                                            const TDesC& aImageUrl,
+                                            const TDesC& aGenreName,
+                                            const TDesC& aCountryName,
+                                            const TDesC& aLanguageName,
 											const TDesC& aMusicFlag)
 {
  	IRLOG_DEBUG( "CIRSongHistoryDb::UpdateSongHistoryDbL" );
@@ -1042,7 +1139,7 @@
  	TBool channelChanged = EFalse ;
  	TInt compFlagName ;
  	TInt compFlagUrl ;
- 	TInt compFlagImageUrl ;
+ 	TInt compFlagImageUrl, compFlagGenreName, compFlagCountryName, compFlagLanguageName;
  	TInt compFlagMusic ;
  	TInt compUrlChange ;
 
@@ -1058,6 +1155,9 @@
     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;
@@ -1071,7 +1171,7 @@
 			// Extracting the values from the database.
 				RBuf channelName;
 				RBuf channelUrl;
-				RBuf imageUrl;
+				RBuf imageUrl, genreName, countryName, languageName;
 				TInt channelId;
                 RBuf channelMusicStatus;
 				channelName.Create(iSongHistoryTable.ColDes( channelColumn ));
@@ -1082,6 +1182,12 @@
 				
 				imageUrl.Create(iSongHistoryTable.ColDes( imageUrlColumn ));
 				imageUrl.CleanupClosePushL();
+                genreName.Create(iSongHistoryTable.ColDes( genreNameColumn ));
+                genreName.CleanupClosePushL();
+                countryName.Create(iSongHistoryTable.ColDes( countryNameColumn ));
+                countryName.CleanupClosePushL();
+                languageName.Create(iSongHistoryTable.ColDes( languageNameColumn ));
+                languageName.CleanupClosePushL();
 
 				channelId=iSongHistoryTable.ColUint16( channelIdColumn );
                 
@@ -1092,7 +1198,10 @@
 	                {
 					compFlagName =  (channelName).Compare(aChannelName);
 	                compFlagUrl =   (channelUrl).Compare(aChannelUrl);
-	                compFlagImageUrl = (imageUrl).Compare(aImageUrl);
+                    compFlagImageUrl = (imageUrl).Compare(aImageUrl);
+                    compFlagGenreName = (genreName).Compare(aGenreName);
+                    compFlagCountryName = (countryName).Compare(aCountryName);
+                    compFlagLanguageName = (languageName).Compare(aLanguageName);
 	                compFlagMusic = (channelMusicStatus).Compare(aMusicFlag);
 	                if(compFlagName)
 		                {
@@ -1110,13 +1219,34 @@
 		                iSongHistoryTable.PutL();
 		                channelChanged = ETrue ;
 		                }
-	                if(compFlagImageUrl)
-	                    {
-	                    iSongHistoryTable.UpdateL();
-	                    iSongHistoryTable.SetColL(imageUrlColumn, aImageUrl);
-	                    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();
@@ -1127,6 +1257,9 @@
 	                
 	                }
                 CleanupStack::PopAndDestroy(&channelMusicStatus);
+                CleanupStack::PopAndDestroy(&languageName);
+                CleanupStack::PopAndDestroy(&countryName);
+                CleanupStack::PopAndDestroy(&genreName);
                 CleanupStack::PopAndDestroy(&imageUrl);
 				CleanupStack::PopAndDestroy(&channelUrl);
 				CleanupStack::PopAndDestroy(&channelName);