tags 277932 + patch pending
thanks

* James R. Van Zandt <[EMAIL PROTECTED]> [2004-10-23 10:14]:
> CDDB protocol level 5 allows DYEAR and DGENRE lines, described as
> follows:
> 
> DYEAR:  This field contains the (4-digit) year, in which the CD was released. 
>       It should be empty (not 0) if the user hasn't entered a year.
> 
> DGENRE: This field contains the exact genre of the disc in a textual form 
>       (i.e. write the genre here and do not use e.g. simply the MP3 ID3V1 
>       genre code). Please note that this genre is not limited to the 
>       11 CDDB-genres. The Genre in this field should be capitalized, e.g. 
>       "New Age" instead of "newage" or "new age".
> 
> jack should include these entries in its blank file (between DTITLE
> and TTITLE0).  It should also fill them in (if the data is available),
> and use the DGENRE info to set the default for the the file submission
> (if it's a fuzzy match to one of the permitted values).  The patch
> below just adds the two lines.

I think the following patch does everything that is needed for DYEAR
and DGENRE support:


diff -urN jack-3.1.1~/jack_freedb.py jack-3.1.1/jack_freedb.py
--- jack-3.1.1~/jack_freedb.py  2005-07-30 00:17:58.000000000 +0100
+++ jack-3.1.1/jack_freedb.py   2005-07-30 21:37:47.853857856 +0100
@@ -180,6 +180,23 @@
             f.write(freedb_split("DTITLE", names[0][0] + " / " + names[0][1]))
     else:
         f.write("DTITLE=\n")
+    freedb_year, freedb_id3genre = -1, -1
+    if cf['_id3_genre'] >= 0 and cf['_id3_genre'] < len(id3genres) or 
cf['_id3_genre'] == 255:
+        freedb_id3genre = cf['_id3_genre']
+    elif names and len(names[0]) == 4:
+        freedb_id3genre = names[0][3]
+    if cf['_id3_year'] >= 0:
+        freedb_year = cf['_id3_year']
+    elif names and len(names[0]) == 4:
+        freedb_year = names[0][2]
+    if freedb_year >= 0:
+        f.write("DYEAR=%d\n" % freedb_year)
+    else:
+        f.write("DYEAR=\n")
+    if freedb_id3genre >= 0:
+        f.write("DGENRE=%s\n" % id3genres[freedb_id3genre])
+    else:
+        f.write("DGENRE=\n")
     for i in tracks:
         if names:
             if names[i[NUM]][0]: # various
@@ -194,15 +211,6 @@
                 f.write(freedb_split("TTITLE" + `i[NUM]-1`, names[i[NUM]][1]))
         else:
             f.write("TTITLE" + `i[NUM]-1` + "=\n")
-    freedb_year, freedb_id3genre = -1, -1
-    if cf['_id3_genre'] >= 0 and cf['_id3_genre'] < len(id3genres) or 
cf['_id3_genre'] == 255:
-        freedb_id3genre = cf['_id3_genre']
-    elif names and len(names[0]) == 4:
-        freedb_id3genre = names[0][3]
-    if cf['_id3_year'] >= 0:
-        freedb_year = cf['_id3_year']
-    elif names and len(names[0]) == 4:
-        freedb_year = names[0][2]
     if freedb_year >= 0 or freedb_id3genre >= 0:
         f.write("EXTD=\\nYEAR: %4s  ID3G: %3s\n" % (freedb_year, 
freedb_id3genre))
     else:
@@ -342,7 +350,7 @@
         line = string.replace(line, "\r", "")  # I consider "\r"s as bugs in 
db info
         if jack_functions.starts_with(line, "# Revision:"):
             revision = int(line[11:])
-        for i in ["DISCID", "DTITLE", "TTITLE", "EXTD", "EXTT", "PLAYORDER"]:
+        for i in ["DISCID", "DTITLE", "DYEAR", "DGENRE", "TTITLE", "EXTD", 
"EXTT", "PLAYORDER"]:
             if jack_functions.starts_with(line, i):
                 buf = line
                 if string.find(buf, "=") != -1:
@@ -423,7 +431,29 @@
             dtitle = "(unknown artist)/" + dtitle
 
     names = [string.split(dtitle,"/",1)]
-    if freedb.has_key('EXTD'):
+    year = 0
+    if freedb.has_key('DYEAR'):
+        try:
+            year = int(freedb['DYEAR'])
+        except ValueError:
+            warning("DYEAR has to be an integer but it's the string '%s'" % 
freedb['DYEAR'])
+        else:
+            if year == 0:
+                warning("DYEAR should not be 0 but empty")
+    genre = -1
+    if freedb.has_key('DGENRE'):
+        try:
+            genre = int(freedb['DGENRE'])
+        except ValueError:
+            if freedb['DGENRE'].upper() in [x.upper() for x in id3genres]:
+                genre = [x.upper() for x in 
id3genres].index(freedb['DGENRE'].upper())
+        else:
+            warning("DGENRE should be a string, not an integer.")
+    if genre != -1:
+        names[0].extend([year, genre])
+    else:
+        names[0].extend([year])
+    if freedb.has_key('EXTD') and not(freedb.has_key('DYEAR') or 
freedb.has_key('DGENRE')):
         extra_tag_pos = string.find(freedb['EXTD'], "\\nYEAR:")
         if extra_tag_pos >= 0:
             try:
diff -urN jack-3.1.1~/jack_tag.py jack-3.1.1/jack_tag.py
--- jack-3.1.1~/jack_tag.py     2005-07-30 00:17:58.000000000 +0100
+++ jack-3.1.1/jack_tag.py      2005-07-30 21:34:44.299762320 +0100
@@ -65,12 +65,11 @@
 
     if cf['_set_id3tag'] or freedb_rename:
         jack_m3u.init()
-        if len(track_names[0]) == 4:
-            # use freedb year and genre data if available
-            if cf['_id3_genre'] == -1:
-                cf['_id3_genre'] = track_names[0][3]
-            if cf['_id3_year'] == -1:
-                cf['_id3_year'] = track_names[0][2]
+        # use freedb year and genre data if available
+        if cf['_id3_year'] == -1 and len(track_names[0]) >= 3:
+            cf['_id3_year'] = track_names[0][2]
+        if cf['_id3_genre'] == -1 and len(track_names[0]) == 4:
+            cf['_id3_genre'] = track_names[0][3]
 
         print "Tagging",
         for i in jack_ripstuff.all_tracks_todo_sorted:

-- 
Martin Michlmayr
http://www.cyrius.com/


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to