Package: mc-foo
Version: 0.0.13
Severity: minor

The attached patch makes mc-foo use the Mutagen ID3 reader (in
python-mutagen) instead of ID3.py (in python-id3). Switching to Mutagen
allows mc-foo to read ID3v2 tags of all versions, have proper Unicode
support, and read multiple values and an extended date format in a way
similar to Vorbis tags. Mutagen has no external dependencies on other
libraries.

Two notes about the patch:
 * c["GENRE"] was being set to a string rather than a list of strings
   (like the other tags, and the Vorbis code). I understood this to be
   a bug; the Mutagen code currently sets it to a list of strings
 * c["YEAR"] is being set instead of c["DATE"], but the latter is
   much more common. I didn't fix this, but the TDRC frame Mutagen
   reads is capable of a full date, as opposed to the ID3v1 year.

If there are any problems with the patch, I'll be happy to fix them.
-- 
Joe Wreschnig <[EMAIL PROTECTED]>
--- file.py.old	2006-03-11 12:07:38.000000000 -0600
+++ file.py	2006-03-11 12:52:11.000000000 -0600
@@ -1,9 +1,9 @@
-import ID3
 import string
 import exceptions
 import os.path
 
 from errno import ENOENT
+from mutagen.id3 import ID3, error as ID3Error
 
 McFooBackendFileUnknownFormat='McFooBackendFileUnknownFormat'
 McFooBackendFileDoesNotExist='McFooBackendFileDoesNotExist'
@@ -91,25 +91,21 @@
             return (buf, len(buf), 0)
     def comment(self):
         try:
-            id3=ID3.ID3(self.filename)
-        except ID3.InvalidTagError:
+            id3 = ID3(self.filename)
+        except ID3Error:
             return {}
 
         c={}
-        c['TITLE']=[string.strip(id3.title)]
-        c['ARTIST']=[string.strip(id3.artist)]
-        c['ALBUM']=[string.strip(id3.album)]
-        c['YEAR']=[string.strip(id3.year)]
-        genre=id3.genre
-        try:
-            genre=id3.genres[genre]
-        except IndexError:
-            genre=str(genre)
-        c['GENRE']=genre
-        c['COMMENT']=[string.strip(id3.comment)]
-        for key in c.keys():
-            if len(c[key])==1 and c[key][0]=='':
-                del c[key]
+        for frame, name in [
+            ("TIT2", "TITLE"),
+            ("TPE1", "ARTIST"),
+            ("TALB", "ALBUM"),
+            ("TDRC", "YEAR")]:
+            try: c[name] = list(id3[name])
+            except KeyError: pass
+        if "TCON" in id3: self["GENRE"] = id3["TCON"].genres
+        comments = id3.getall("COMM")
+        if comments: c["COMMENT"] = sum([list(c) for c in comments], [])
         return c
     def time_total(self):
         return 0

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to