tag 320116 + patch
forwarded 320116 Arne Zellentin <[EMAIL PROTECTED]>
thanks
* Philipp Weis <[EMAIL PROTECTED]> [2005-07-27 00:04]:
> I just came accross a freedb entry which is so long that the resulting
> file name would be too long. I get the following error message:
>
> | Tagging. *error* Cannot rename "track_01.ogg" to "Béla Bartók- Krystian
> Zimerman -
> | Leif Ove Andsnes - Hélène Grimaud - Pierre Boulez - The Piano
> | Concertos Nos. 1-3 - Krystian Zimerman - Leif Ove Andsnes - Hélène
> | Grimaud - Pierre Boulez - 01 - Krystian Zimerman - Chicago Symphony
> | Orchestra - Pierre Boulez % Allegro moderato - Allegro.ogg"
> (Filename
> | is too long or has unusable characters)
>
> There is no obvious way to tell jack to tag these files without renaming them.
> I got it to work with '--rename-ftm "%n"', but something like '--rename=no'
> would be nicer.
I agree that such an option would be good.
> Another nice option would be to crop filenames that are too long.
I don't really like this idea, especially since there can be other
reasons why a rename fails (e.g. VFAT doesn't allow specific
characters).
Anyway, I looked at the code to see how this can be implemented... I
noticed there's a -R/--rename option but this code is really a
mess: -R doesn't actually do anything at all. And the internal
freedb_rename variable (which has nothing to do with -R) is completely
useless too: jack tries to do renames even when you don't use -Q/-q at
all (i.e. just 'jack -t 1') and then fails:
Traceback (most recent call last):
File "/usr/bin/jack", line 270, in ?
jack_tag.tag(1)
File "/usr/lib/python2.3/site-packages/jack_tag.py", line 70, in tag
if cf['_id3_year'] == -1 and len(track_names[0]) >= 3:
TypeError: unsubscriptable object
I tried to clean up the code, and I introduced a --dont-rename
variable. In the patch, I got rid of all the freedb_rename variables
(which don't actually do anything), got rid of -R/--rename (which
again, doesn't do anything, and doesn't make sense since -Q/-q
automatically renames).
I won't apply this to the Debian package for now since I'd ideally
like to hear comments from upstream. In particular, I'm not sure if
--dont-rename is such a good name but --rename=no doesn't seem good to
me either given that --rename=yes doesn't actually do anything (it's
implied by -Q/-q anyway).
Philipp, feel free to apply this patch though and let me know if this
is what you want. Oh, by the way, even with --dont-rename,
directories *are* renamed. This is because there's another option to
stop this: --rename-dir=bool Hmm, looking at this, maybe the
--dont-rename option should be called --rename-files=bool after all.
Arne/Michael, what do you think?
(BTW, this patch depends on some other Debian patches.)
diff -urN jack-3.1.1~/jack jack-3.1.1/jack
--- jack-3.1.1~/jack 2005-11-10 11:36:23.000000000 +0000
+++ jack-3.1.1/jack 2005-11-10 11:36:30.000000000 +0000
@@ -144,17 +144,16 @@
sys.exit(0)
### (9) do query on start
-freedb_rename = 0
if cf['_query_if_needed']:
if not os.path.exists(cf['_freedb_form_file'] + ".bak"):
cf['_query_on_start'] = 1
if cf['_query_on_start']:
- freedb_rename = jack_prepare.query_on_start(todo)
+ jack_prepare.query_on_start(todo)
### (10) update freedb dbfile
if cf['_update_freedb']:
if not jack_tag.track_names:
- err, jack_tag.track_names, jack_tag.locale_names, freedb_rename,
revision = jack_freedb.interpret_db_file(jack_ripstuff.all_tracks, todo,
cf['_freedb_form_file'], verb = 1, dirs = 0)
+ err, jack_tag.track_names, jack_tag.locale_names, revision =
jack_freedb.interpret_db_file(jack_ripstuff.all_tracks, todo,
cf['_freedb_form_file'], verb = 1, dirs = 0)
jack_freedb.freedb_template(jack_ripstuff.all_tracks,
jack_tag.track_names, revision + 1)
jack_utils.ex_edit(cf['_freedb_form_file'])
info("now submit your changes if you like, using the option --submit (via
http POST). Don't forget to activate your changes locally with -R")
@@ -251,7 +250,7 @@
jack_display.exit()
if cf['_query_when_ready'] or cf['_read_freedb_file'] or cf['_query_on_start']:
- err, jack_tag.track_names, jack_tag.locale_names, freedb_rename, revision
= jack_freedb.interpret_db_file(jack_ripstuff.all_tracks, todo,
cf['_freedb_form_file'], verb = 1, dirs = 1)
+ err, jack_tag.track_names, jack_tag.locale_names, revision =
jack_freedb.interpret_db_file(jack_ripstuff.all_tracks, todo,
cf['_freedb_form_file'], verb = 1, dirs = 1)
if err:
error("could not read freedb file")
@@ -266,7 +265,7 @@
os.system(cf['_exec_err'])
error("aborting because of previous error(s) [%i]." % global_error)
-jack_tag.tag(freedb_rename)
+jack_tag.tag()
if jack_functions.progress_changed:
jack_functions.progress("all", "done", time.strftime("%b %2d %H:%M:%S",
time.localtime(time.time())))
diff -urN jack-3.1.1~/jack.man jack-3.1.1/jack.man
--- jack-3.1.1~/jack.man 2005-11-10 11:36:23.000000000 +0000
+++ jack-3.1.1/jack.man 2005-11-10 11:38:23.000000000 +0000
@@ -147,6 +147,12 @@
.B \-\-dir-template string
if directories are renamed, this is the format used (default "%a/%l")
.TP
+.B \-\-dont\-rename
+don't rename audo files after tagging them. This can be useful on
+filesystems, such as FAT, which have filename limits. Another option
+in this case is to specify
+.B \-\-rename\-fmt.
+.TP
.B \-d, \-\-dont-work
don't do DAE, encoding, tagging or renaming. This may be useful if you only
want to do a FreeDB query, e.g. while another jack is running.
@@ -294,20 +300,6 @@
have Jack remove its temp jack*-files.
Be careful - don't delete them too early!
.TP
-.B \-R, \-\-rename
-rename and tag files according to FreeDB file. On startup, Jack
-creates a blank FreeDB entry file (except if
-.B \-\-query-now
-is used,
-then the file is queried from your FreeDB server). If you have
-changed its contents (e.g. because the CD was unknown to FreeDB)
-and want to rename and tag your MP3s accordingly, use this option.
-Give all other needed options too, like
-.B \-t
-,
-.B \-E
-, ...
-.TP
.B \-\-rename-dir=bool
rename directory as well (default).
.TP
diff -urN jack-3.1.1~/jack_checkopts.py jack-3.1.1/jack_checkopts.py
--- jack-3.1.1~/jack_checkopts.py 2005-11-10 11:36:23.000000000 +0000
+++ jack-3.1.1/jack_checkopts.py 2005-11-10 11:36:30.000000000 +0000
@@ -56,9 +56,6 @@
if cf2.has_key('create_dirs') and cf2['create_dirs']['val']:
cf.rupdate({'rename_dir': {'val': 1}}, "check")
- if cf2.has_key('freedb_rename') and cf2['freedb_rename']['val']:
- cf.rupdate({'read_freedb_file': {'val': 1}, 'set_id3tag':{'val': 1}},
"check")
-
if cf2.has_key('id3_genre_txt'):
genre = jack_functions.check_genre_txt(cf2['id3_genre_txt']['val'])
if genre != cf['_id3_genre']:
diff -urN jack-3.1.1~/jack_config.py jack-3.1.1/jack_config.py
--- jack-3.1.1~/jack_config.py 2005-11-10 11:36:23.000000000 +0000
+++ jack-3.1.1/jack_config.py 2005-11-10 11:36:30.000000000 +0000
@@ -585,14 +585,20 @@
'doc': "read freedb file",
},
'freedb_rename': {
+ # Only for backwards compatibility: doesn't do anything
'type': 'toggle',
'val': 0,
- 'help': 1,
- 'save': 0,
- 'usage': "rename according to freedb file, eg. after editing it",
+ 'help': 0,
'long': 'rename',
'short': 'R',
},
+ 'dont_rename': {
+ 'type': 'toggle',
+ 'val': 0,
+ 'save': 0,
+ 'usage': "don't rename files after tagging them",
+ 'long': 'AUTO',
+ },
'set_id3tag': {
'type': 'toggle',
'val': 0,
diff -urN jack-3.1.1~/jack_freedb.py jack-3.1.1/jack_freedb.py
--- jack-3.1.1~/jack_freedb.py 2005-11-10 11:36:23.000000000 +0000
+++ jack-3.1.1/jack_freedb.py 2005-11-10 11:36:30.000000000 +0000
@@ -57,16 +57,9 @@
def interpret_db_file(all_tracks, todo, freedb_form_file, verb, dirs = 0, warn
= None):
"read freedb file and rename dir(s)"
global names_available, dir_created
- freedb_rename = 0
- if warn == None:
- err, track_names, locale_names, cd_id, revision =
freedb_names(freedb_id(all_tracks), all_tracks, todo, freedb_form_file, verb =
verb)
- else:
- err, track_names, locale_names, cd_id, revision =
freedb_names(freedb_id(all_tracks), all_tracks, todo, freedb_form_file, verb =
verb, warn = warn)
- if (not err) and dirs:
- freedb_rename = 1
-
+ err, track_names, locale_names, cd_id, revision =
freedb_names(freedb_id(all_tracks), all_tracks, todo, freedb_form_file, verb =
verb)
+ if dirs and not err:
# The user wants us to use the current dir, unconditionally.
-
if cf['_claim_dir']:
dir_created = jack_utils.split_dirname(os.getcwd())[-1]
jack_functions.progress("all", "mkdir", dir_created)
@@ -80,7 +73,6 @@
# only do the following if we are where we think we are and the dir has to be
# renamed.
-
if jack_utils.check_path(dirs_created, old_dirs) and not
jack_utils.check_path(dirs_created, new_dirs):
jack_utils.rename_path(dirs_created, new_dirs)
print "Info: cwd now", os.getcwd()
@@ -88,9 +80,7 @@
if not err:
names_available = 1
- else:
- freedb_rename = 0
- return err, track_names, locale_names, freedb_rename, revision
+ return err, track_names, locale_names, revision
#/ end of interpret_db_file /#
def local_freedb(cd_id, freedb_dir, outfile = "/tmp/testfilefreedb"):
diff -urN jack-3.1.1~/jack_prepare.py jack-3.1.1/jack_prepare.py
--- jack-3.1.1~/jack_prepare.py 2005-11-10 11:36:23.000000000 +0000
+++ jack-3.1.1/jack_prepare.py 2005-11-10 11:36:30.000000000 +0000
@@ -519,12 +519,11 @@
freedb_submit(jack_progress.status_all['freedb_cat'])
if cf['_query_on_start']:
- err, jack_tag.track_names, jack_tag.locale_names, freedb_rename,
revision = jack_freedb.interpret_db_file(jack_ripstuff.all_tracks, todo,
cf['_freedb_form_file'], verb = cf['_query_on_start'], dirs = 1)
+ err, jack_tag.track_names, jack_tag.locale_names, revision =
jack_freedb.interpret_db_file(jack_ripstuff.all_tracks, todo,
cf['_freedb_form_file'], verb = cf['_query_on_start'], dirs = 1)
if err:
error("query on start failed to give a good freedb file,
aborting.")
else:
- err, jack_tag.track_names, jack_tag.locale_names, freedb_rename,
revision = jack_freedb.interpret_db_file(jack_ripstuff.all_tracks, todo,
cf['_freedb_form_file'], verb = cf['_query_on_start'], warn =
cf['_query_on_start'])
- return freedb_rename
+ err, jack_tag.track_names, jack_tag.locale_names, revision =
jack_freedb.interpret_db_file(jack_ripstuff.all_tracks, todo,
cf['_freedb_form_file'], verb = cf['_query_on_start'], warn =
cf['_query_on_start'])
def undo_rename(status, todo):
ext =
jack_targets.targets[jack_helpers.helpers[cf['_encoder']]['target']]['file_extension']
diff -urN jack-3.1.1~/jack_tag.py jack-3.1.1/jack_tag.py
--- jack-3.1.1~/jack_tag.py 2005-11-10 11:36:23.000000000 +0000
+++ jack-3.1.1/jack_tag.py 2005-11-10 11:36:30.000000000 +0000
@@ -41,7 +41,7 @@
a_artist = None
a_title = None
-def tag(freedb_rename):
+def tag():
global a_artist, a_title
ext =
jack_targets.targets[jack_helpers.helpers[cf['_encoder']]['target']]['file_extension']
@@ -63,7 +63,7 @@
p_artist = locale_names[0][0] # string
p_title = locale_names[0][1] # string
- if cf['_set_id3tag'] or freedb_rename:
+ if cf['_set_id3tag'] and jack_freedb.names_available:
jack_m3u.init()
# use freedb year and genre data if available
if cf['_id3_year'] == -1 and len(track_names[0]) >= 3:
@@ -192,7 +192,7 @@
if cf['_id3_year'] != -1:
oggi.add_tag('DATE', `cf['_id3_year']`)
oggi.write_to(mp3name)
- if freedb_rename:
+ if not cf['_dont_rename']:
if t_artist: # 'Various Artists'
replacelist = (("%n", cf['_rename_num'] % i[NUM]), ("%a",
t_artist), ("%t", t_name), ("%l", a_title), ("%y", `cf['_id3_year']`), ("%g",
genretxt))
newname = jack_misc.multi_replace(cf['_rename_fmt_va'],
replacelist)
--
Martin Michlmayr
http://www.cyrius.com/