[banshee] Fix importing of rating and play count when updating track
- From: Bertrand Lorentz <blorentz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [banshee] Fix importing of rating and play count when updating track
- Date: Mon, 12 Dec 2011 11:58:49 +0000 (UTC)
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]