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
95
96
97
98
99
100
101
102
103
104
105
106
107
|
Add support for DYEAR and DGENRE as defined in CDDB protocol level 5.
Debian #277932.
diff -urN a/jack_freedb.py jack-3.1.1+cvs20050801/jack_freedb.py
--- a/jack_freedb.py 2006-02-05 15:54:03.000000000 +0000
+++ jack-3.1.1+cvs20050801/jack_freedb.py 2006-02-05 15:54:32.000000000 +0000
@@ -179,6 +179,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
@@ -193,15 +210,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:
@@ -338,7 +346,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:
@@ -418,7 +426,29 @@
dtitle = "(unknown artist)/" + dtitle
names = [string.split(dtitle,"/",1)]
- if freedb.has_key('EXTD'):
+ year = -1
+ 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])
+ elif year != -1:
+ 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 a/jack_tag.py jack-3.1.1+cvs20050801/jack_tag.py
--- a/jack_tag.py 2006-02-05 15:54:03.000000000 +0000
+++ jack-3.1.1+cvs20050801/jack_tag.py 2006-02-05 15:54:25.000000000 +0000
@@ -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:
|