[banshee] Fix importing of rating and play count when updating track



commit 0b7630cfaf89d5dfe110ada06ac98915132d3305
Author: Bertrand Lorentz <bertrand lorentz gmail com>
Date:   Mon Dec 12 12:43:07 2011 +0100

    Fix importing of rating and play count when updating track
    
    For tracks that were already imported, the rating and play count would
    never get updated from the file when rescanning the library or updating
    through the library watcher.
    
    We now look at those two tags during those operations, but only if the
    corresponding "Write ... to file" is set. If the option is not set, it
    means the value in the database is probably more up-to-date than the one
    in the file, so we don't import it from the file, to avoid data loss.
    
    Fixes bgo#638130 and bgo#665963.

 .../Banshee.Core/Banshee.Streaming/StreamTagger.cs |   15 ++++++++++-----
 .../DatabaseImportManager.cs                       |    2 +-
 .../Banshee.Collection/RescanPipeline.cs           |    5 ++++-
 .../Banshee.Metadata/Tests/TaglibReadWriteTests.cs |    2 +-
 .../Banshee.LibraryWatcher/SourceWatcher.cs        |    5 ++++-
 5 files changed, 20 insertions(+), 9 deletions(-)
---
diff --git a/src/Core/Banshee.Core/Banshee.Streaming/StreamTagger.cs b/src/Core/Banshee.Core/Banshee.Streaming/StreamTagger.cs
index 8e1817f..e291100 100644
--- a/src/Core/Banshee.Core/Banshee.Streaming/StreamTagger.cs
+++ b/src/Core/Banshee.Core/Banshee.Streaming/StreamTagger.cs
@@ -144,10 +144,10 @@ namespace Banshee.Streaming
 
         public static void TrackInfoMerge (TrackInfo track, TagLib.File file, bool preferTrackInfo)
         {
-            TrackInfoMerge (track, file, preferTrackInfo, false);
+            TrackInfoMerge (track, file, preferTrackInfo, false, false);
         }
 
-        public static void TrackInfoMerge (TrackInfo track, TagLib.File file, bool preferTrackInfo, bool import_rating_and_play_count)
+        public static void TrackInfoMerge (TrackInfo track, TagLib.File file, bool preferTrackInfo, bool import_rating, bool import_play_count)
         {
             // TODO support these as arrays:
             // Performers[] (track artists), AlbumArtists[], Composers[], Genres[]
@@ -192,11 +192,16 @@ namespace Banshee.Streaming
                 track.Year = Choose ((int)file.Tag.Year, track.Year, preferTrackInfo);
                 track.Bpm = Choose ((int)file.Tag.BeatsPerMinute, track.Bpm, preferTrackInfo);
 
-                if (import_rating_and_play_count) {
+                if (import_rating || import_play_count) {
                     int file_rating = 0, file_playcount = 0;
                     StreamRatingTagger.GetRatingAndPlayCount (file, ref file_rating, ref file_playcount);
-                    track.Rating = Choose (file_rating, track.Rating, preferTrackInfo);
-                    track.PlayCount = Choose (file_playcount, track.PlayCount, preferTrackInfo);
+                    if (import_rating) {
+                        Log.DebugFormat ("### Importing rating for {0}", track.TrackTitle);
+                        track.Rating = Choose (file_rating, track.Rating, preferTrackInfo);
+                    }
+                    if (import_play_count) {
+                        track.PlayCount = Choose (file_playcount, track.PlayCount, preferTrackInfo);
+                    }
                 }
             } else {
                 track.MediaAttributes = TrackMediaAttributes.AudioStream;
diff --git a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseImportManager.cs b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseImportManager.cs
index 1be82ae..f4d2552 100644
--- a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseImportManager.cs
+++ b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseImportManager.cs
@@ -176,7 +176,7 @@ namespace Banshee.Collection.Database
 
             DatabaseTrackInfo track = new DatabaseTrackInfo () { Uri = uri };
             using (var file = StreamTagger.ProcessUri (uri)) {
-                StreamTagger.TrackInfoMerge (track, file, false, true);
+                StreamTagger.TrackInfoMerge (track, file, false, true, true);
             }
 
             track.Uri = uri;
diff --git a/src/Core/Banshee.Services/Banshee.Collection/RescanPipeline.cs b/src/Core/Banshee.Services/Banshee.Collection/RescanPipeline.cs
index 82441e2..453cce1 100644
--- a/src/Core/Banshee.Services/Banshee.Collection/RescanPipeline.cs
+++ b/src/Core/Banshee.Services/Banshee.Collection/RescanPipeline.cs
@@ -39,6 +39,7 @@ using Banshee.Base;
 using Banshee.Sources;
 using Banshee.Collection.Database;
 using Banshee.Library;
+using Banshee.Metadata;
 using Banshee.ServiceStack;
 
 namespace Banshee.Collection
@@ -215,7 +216,9 @@ namespace Banshee.Collection
             // If the file was modified since we last scanned, parse the file's metadata
             if (mtime > track.FileModifiedStamp) {
                 using (var file = Banshee.Streaming.StreamTagger.ProcessUri (track.Uri)) {
-                    Banshee.Streaming.StreamTagger.TrackInfoMerge (track, file, false);
+                    Banshee.Streaming.StreamTagger.TrackInfoMerge (track, file, false,
+                        SaveTrackMetadataService.WriteRatingsEnabled.Value,
+                        SaveTrackMetadataService.WritePlayCountsEnabled.Value);
                 }
             }
         }
diff --git a/src/Core/Banshee.Services/Banshee.Metadata/Tests/TaglibReadWriteTests.cs b/src/Core/Banshee.Services/Banshee.Metadata/Tests/TaglibReadWriteTests.cs
index ee2b306..04788d7 100644
--- a/src/Core/Banshee.Services/Banshee.Metadata/Tests/TaglibReadWriteTests.cs
+++ b/src/Core/Banshee.Services/Banshee.Metadata/Tests/TaglibReadWriteTests.cs
@@ -191,7 +191,7 @@ namespace Banshee.Metadata
             // Read changes
             file = StreamTagger.ProcessUri (uri);
             track = new TrackInfo ();
-            StreamTagger.TrackInfoMerge (track, file, false, true);
+            StreamTagger.TrackInfoMerge (track, file, false, true, true);
             file.Dispose ();
 
             // Verify changes
diff --git a/src/Extensions/Banshee.LibraryWatcher/Banshee.LibraryWatcher/SourceWatcher.cs b/src/Extensions/Banshee.LibraryWatcher/Banshee.LibraryWatcher/SourceWatcher.cs
index 77fa20a..ceb03db 100644
--- a/src/Extensions/Banshee.LibraryWatcher/Banshee.LibraryWatcher/SourceWatcher.cs
+++ b/src/Extensions/Banshee.LibraryWatcher/Banshee.LibraryWatcher/SourceWatcher.cs
@@ -41,6 +41,7 @@ using Banshee.Base;
 using Banshee.Collection;
 using Banshee.Collection.Database;
 using Banshee.Library;
+using Banshee.Metadata;
 using Banshee.ServiceStack;
 using Banshee.Sources;
 using Banshee.Streaming;
@@ -208,7 +209,9 @@ namespace Banshee.LibraryWatcher
                     var track_info = DatabaseTrackInfo.Provider.Load (reader);
                     if (Banshee.IO.File.GetModifiedTime (track_info.Uri) > track_info.FileModifiedStamp) {
                         using (var file = StreamTagger.ProcessUri (track_info.Uri)) {
-                            StreamTagger.TrackInfoMerge (track_info, file, false);
+                            StreamTagger.TrackInfoMerge (track_info, file, false,
+                                SaveTrackMetadataService.WriteRatingsEnabled.Value,
+                                SaveTrackMetadataService.WritePlayCountsEnabled.Value);
                         }
                         track_info.LastSyncedStamp = DateTime.Now;
                         track_info.Save (false);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]