banshee r3917 - in trunk/banshee: . src/Core/Banshee.Core/Banshee.Streaming tests/Banshee.Core



Author: gburt
Date: Mon May 12 23:20:22 2008
New Revision: 3917
URL: http://svn.gnome.org/viewvc/banshee?rev=3917&view=rev

Log:
2008-05-12  Gabriel Burt  <gabriel burt gmail com>

	* src/Core/Banshee.Core/Banshee.Streaming/SaveTrackMetadataJob.cs: Patch
	from Nicholas Parker working around bug in TagLib# where setting the genre
	to string [] {null} would crash.

	* tests/Banshee.Core/TaglibReadWriteTests.cs: Unit test for above fix.


Modified:
   trunk/banshee/ChangeLog
   trunk/banshee/src/Core/Banshee.Core/Banshee.Streaming/SaveTrackMetadataJob.cs
   trunk/banshee/tests/Banshee.Core/TaglibReadWriteTests.cs

Modified: trunk/banshee/src/Core/Banshee.Core/Banshee.Streaming/SaveTrackMetadataJob.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Core/Banshee.Streaming/SaveTrackMetadataJob.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Core/Banshee.Streaming/SaveTrackMetadataJob.cs	Mon May 12 23:20:22 2008
@@ -58,7 +58,10 @@
             TagLib.File file = StreamTagger.ProcessUri (track.Uri);
             file.Tag.Performers = new string [] { track.ArtistName };
             file.Tag.Album = track.AlbumTitle;
-            file.Tag.Genres = new string [] { track.Genre };
+            /* Bug in taglib-sharp-2.0.3.0: Crash if you send it a genre of "{ null }"
+             * on a song with both ID3v1 and ID3v2 metadata. It's happy with "{}", though.
+             * (see http://forum.taglib-sharp.com/viewtopic.php?f=5&t=239 ) */
+            file.Tag.Genres = (track.Genre == null) ? new string[] {} : new string [] { track.Genre };
             file.Tag.Title = track.TrackTitle;
             file.Tag.Track = (uint)track.TrackNumber;
             file.Tag.TrackCount = (uint)track.TrackCount;

Modified: trunk/banshee/tests/Banshee.Core/TaglibReadWriteTests.cs
==============================================================================
--- trunk/banshee/tests/Banshee.Core/TaglibReadWriteTests.cs	(original)
+++ trunk/banshee/tests/Banshee.Core/TaglibReadWriteTests.cs	Mon May 12 23:20:22 2008
@@ -49,17 +49,28 @@
     public void TestSystemIO ()
     {
         Banshee.IO.Provider.SetProvider (new Banshee.IO.SystemIO.Provider ());
-        WriteMetadata (files);
+        WriteMetadata (files, "My Genre");
     }
 
     [Test]
     public void TestUnixIO ()
     {
         Banshee.IO.Provider.SetProvider (new Banshee.IO.Unix.Provider ());
-        WriteMetadata (files);
+        WriteMetadata (files, "My Genre");
     }
 
-    private static void WriteMetadata (string [] files)
+    [Test]
+    public void TestNullGenreBug ()
+    {
+        // Bug in taglib-sharp-2.0.3.0: Crash if you send it a genre of "{ null }" on
+        // a song with both ID3v1 and ID3v2 metadata. It's happy with "{}", though.
+        // (see http://forum.taglib-sharp.com/viewtopic.php?f=5&t=239 )
+        // This tests our workaround.
+        Banshee.IO.Provider.SetProvider (new Banshee.IO.Unix.Provider ());
+        WriteMetadata (files, null);
+    }
+
+    private static void WriteMetadata (string [] files, string genre)
     {
         SafeUri newuri = null;
         bool write_metadata = LibrarySchema.WriteMetadata.Get();
@@ -71,7 +82,7 @@
 
                 Banshee.IO.File.Copy (new SafeUri (uri), newuri, true);
 
-                ChangeAndVerify (newuri);
+                ChangeAndVerify (newuri, genre);
             });
         } finally {
             LibrarySchema.WriteMetadata.Set (write_metadata);
@@ -82,7 +93,7 @@
 
 #region Utility methods
 
-    private static void ChangeAndVerify (SafeUri uri)
+    private static void ChangeAndVerify (SafeUri uri, string genre)
     {
         TagLib.File file = StreamTagger.ProcessUri (uri);
         TrackInfo track = new TrackInfo ();
@@ -92,7 +103,7 @@
         track.TrackTitle = "My Title";
         track.ArtistName = "My Artist";
         track.AlbumTitle = "My Album";
-        track.Genre = "My Genre";
+        track.Genre = genre;
         track.TrackNumber = 4;
         track.Disc = 4;
         track.Year = 1999;
@@ -109,7 +120,7 @@
         Assert.AreEqual ("My Title", track.TrackTitle);
         Assert.AreEqual ("My Artist", track.ArtistName);
         Assert.AreEqual ("My Album", track.AlbumTitle);
-        Assert.AreEqual ("My Genre", track.Genre);
+        Assert.AreEqual (genre, track.Genre);
         Assert.AreEqual (4, track.TrackNumber);
         Assert.AreEqual (4, track.Disc);
         Assert.AreEqual (1999, track.Year);



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