summaryrefslogtreecommitdiff
blob: 8ac299a490fb584b792b64a7ef57fa5eab3ed837 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
--- src/Core/Banshee.Core/Banshee.Streaming/SaveTrackMetadataJob.cs.orig	2008-12-10 16:03:27.913232707 -0700
+++ src/Core/Banshee.Core/Banshee.Streaming/SaveTrackMetadataJob.cs	2008-12-10 16:16:00.617267829 -0700
@@ -29,6 +29,7 @@
 using System;
 using Mono.Unix;
 
+using Banshee.Base;
 using Banshee.Collection;
 using Banshee.Configuration.Schema;
 
@@ -86,24 +87,26 @@
             file.Tag.DiscCount = (uint)track.DiscCount;
             file.Tag.Year = (uint)track.Year;
             file.Tag.BeatsPerMinute = (uint)track.Bpm;
-            
-            SaveIsCompilation (file.Tag, track.IsCompilation);
+
+            SaveIsCompilation (file, track.IsCompilation);
             file.Save ();
         }
         
-        private static void SaveIsCompilation (TagLib.Tag tag, bool is_compilation)
+        private static void SaveIsCompilation (TagLib.File file, bool is_compilation)
         {
-            TagLib.Id3v2.Tag id3v2_tag = tag as TagLib.Id3v2.Tag;
-            if (id3v2_tag != null) {
-                id3v2_tag.IsCompilation = is_compilation;
-                return;
-            }
+            try {
+                 TagLib.Id3v2.Tag id3v2_tag = file.GetTag(TagLib.TagTypes.Id3v2, true) as TagLib.Id3v2.Tag;
+                 if (id3v2_tag != null) {
+                     id3v2_tag.IsCompilation = is_compilation;
+                 }
+            } catch {}
 
-            TagLib.Mpeg4.AppleTag apple_tag = tag as TagLib.Mpeg4.AppleTag;
-            if (apple_tag != null) {
-                apple_tag.IsCompilation = is_compilation;
-                return;
-            }
+            try {
+                 TagLib.Mpeg4.AppleTag apple_tag = file.GetTag(TagLib.TagTypes.Apple,true) as TagLib.Mpeg4.AppleTag;
+                 if (apple_tag != null) {
+                     apple_tag.IsCompilation = is_compilation;
+                 }
+            } catch {}
         }
     }
 }
--- src/Core/Banshee.Core/Banshee.Streaming/StreamTagger.cs.orig	2008-10-06 10:27:31.000000000 -0600
+++ src/Core/Banshee.Core/Banshee.Streaming/StreamTagger.cs	2008-12-10 16:17:49.355233640 -0700
@@ -130,7 +130,7 @@
                 track.ArtistName = Choose (file.Tag.JoinedPerformers, track.ArtistName, preferTrackInfo);
                 track.AlbumTitle = Choose (file.Tag.Album, track.AlbumTitle, preferTrackInfo);
                 track.AlbumArtist = Choose (file.Tag.FirstAlbumArtist, track.AlbumArtist, preferTrackInfo);
-                track.IsCompilation = IsCompilation (file.Tag);
+                track.IsCompilation = IsCompilation (file);
                 
                 track.TrackTitle = Choose (file.Tag.Title, track.TrackTitle, preferTrackInfo);
                 track.Genre = Choose (file.Tag.FirstGenre, track.Genre, preferTrackInfo);
@@ -171,18 +171,22 @@
             // TODO these ideas could also be done in an extension that collects such hacks
         }
             
-        private static bool IsCompilation (TagLib.Tag tag)
+        private static bool IsCompilation (TagLib.File file)
         {
-            TagLib.Id3v2.Tag id3v2_tag = tag as TagLib.Id3v2.Tag;
-            if (id3v2_tag != null && id3v2_tag.IsCompilation)
-                return true;
-
-            TagLib.Mpeg4.AppleTag apple_tag = tag as TagLib.Mpeg4.AppleTag;
-            if (apple_tag != null && apple_tag.IsCompilation)
-                return true;
+            try {
+                 TagLib.Id3v2.Tag id3v2_tag = file.GetTag(TagLib.TagTypes.Id3v2, true) as TagLib.Id3v2.Tag;
+                 if (id3v2_tag != null && id3v2_tag.IsCompilation)
+                      return true;
+            } catch {}
+            
+            try {
+                 TagLib.Mpeg4.AppleTag apple_tag = file.GetTag(TagLib.TagTypes.Apple,true) as TagLib.Mpeg4.AppleTag;
+                 if (apple_tag != null && apple_tag.IsCompilation)
+                     return true;
+            } catch {}
             
-            if (tag.Performers.Length > 0 && tag.AlbumArtists.Length > 0 &&
-                (tag.Performers.Length != tag.AlbumArtists.Length || tag.FirstAlbumArtist != tag.FirstPerformer)) {
+            if (file.Tag.Performers.Length > 0 && file.Tag.AlbumArtists.Length > 0 &&
+                (file.Tag.Performers.Length != file.Tag.AlbumArtists.Length || file.Tag.FirstAlbumArtist != file.Tag.FirstPerformer)) {
                 return true;
             }
             return false;