# -*- coding: iso-8859-15 -*- ### jack_config.py: default config settings for ### jack - extract audio from a CD and encode it using 3rd party software ### Copyright (C) 2002-2004 Arne Zellentin ### This program is free software; you can redistribute it and/or modify ### it under the terms of the GNU General Public License as published by ### the Free Software Foundation; either version 2 of the License, or ### (at your option) any later version. ### This program is distributed in the hope that it will be useful, ### but WITHOUT ANY WARRANTY; without even the implied warranty of ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ### GNU General Public License for more details. ### You should have received a copy of the GNU General Public License ### along with this program; if not, write to the Free Software ### Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA import types import os import string import jack_misc import locale import jack_version from jack_globals import * # this must be filled manually (done in main) # config space with attributes cf = jack_misc.dict2({ ### prefs ### 'debug': { 'type': 'toggle', 'val': 0, 'help': 1, 'usage': "show debug information", 'long': 'AUTO', }, 'debug_write': { 'type': 'toggle', 'val': 0, #'usage': "write debug information to a file", 'long': 'AUTO', }, 'plugin_path': { 'type': types.ListType, 'val': ["~/.jack_plugins",], 'usage': "directories in which jack plugins are searched for", 'long': 'AUTO', }, 'ripper': { 'type': types.StringType, 'val': "cdparanoia", 'doc': "use which program to rip: cdparanoia, tosha, cdda2wav, dagrab (untested)", 'usage': "which program to use for extracting the audio data", 'long': 'AUTO', }, 'cd_device': { 'type': types.StringType, 'val': "/dev/cdrom", 'usage': "use which device for ripping", 'long': 'device', }, 'gen_device': { 'type': types.StringType, 'val': None, 'doc': "cdda2wav may need the scsi generic device", 'long': 'AUTO', }, 'encoder': { 'type': types.StringType, 'val': "oggenc", 'doc': "this is a symbolic name (see helpers), NOT the executable's name", 'usage': "use which encoder", 'short': 'E', 'long': 'encoder-name', }, 'vbr': { 'type': 'toggle', 'val': 1, 'help': 1, 'doc': "use variable bitrate for encoders which support it", 'usage': "generate variable bitrate files", 'short': 'v', 'long': 'AUTO', }, 'vbr_quality': { 'type': types.FloatType, 'val': 6, 'help': 1, 'vbr_only': 1, # only show in --help if vbr is on 'usage': "vbr encoding quality. -1 is lowest, 10 highest.", 'long': 'quality', }, 'bitrate': { 'type': types.IntType, 'val': 160, 'help': 1, 'vbr_only': 0, 'doc': "default bitrate", 'usage': "target bitrate in kbit/s", 'short': 'b', 'long': 'AUTO', }, 'freedb_server': { 'type': types.StringType, 'val': "freedb", 'doc': "your freedb server, see freedb_servers", 'usage': "use which freedb server", 'long': 'server', }, 'disable_http_proxy': { 'type': 'toggle', 'val': 0, 'usage': "XXX todo!!! disable default proxy (environment variable \"http_proxy\") for freedb queries", 'long': 'AUTO', }, 'my_mail': { 'type': types.StringType, 'val': "@", 'usage': "your e-mail address, needed for freedb submissions", 'long': 'AUTO', }, 'rename_fmt': { 'type': types.StringType, 'val': "%a - %l - %n - %t", 'usage': "format of normal files", 'long': 'AUTO', 'doc': """specify how the resulting files are named: %n: track number %a: artist %t: track title %l: album title %y: album release year - individual track years are unsupported %g: album genre - individual track genres are unsupported""", }, 'rename_fmt_va': { 'type': types.StringType, 'val': "%l - %n - %a - %t", 'usage': "format of Various Artists files", 'long': 'AUTO', 'doc': """specify how the resulting files are named: %n: track number %a: artist %t: track title %l: album title %y: album release year - individual track years are unsupported %g: album genre - individual track genres are unsupported""", }, 'rename_num': { 'type': types.StringType, 'val': "%02d", 'long': 'AUTO', 'usage': "track number format for %n, printf() style", }, 'rename_dir': { 'type': 'toggle', 'val': 1, 'usage': "rename directory as well", 'long': 'AUTO', }, 'append_year': { 'type': types.StringType, 'val': " (%y)", 'usage': "if known, append the year to dir", 'long': 'AUTO', }, 'dir_template': { 'type': types.StringType, 'val': "%a/%l", 'usage': "if directories are renamed, this is the format used", 'doc': """specify how the resulting files are named: %a: artist %l: album title %g: album genre - individual track genres are unsupported""", 'long': 'AUTO', }, 'char_filter': { 'type': types.StringType, 'val': "", 'usage': "convert file names using a python method", 'doc': r"""an example which converts to lowercase, even with non-ascii charsets: ".lower()" """, 'long': 'AUTO', }, 'charset': { 'type': types.StringType, 'val': locale.getpreferredencoding(), 'usage': 'charset of filenames', 'doc': "examples: latin-1, utf-8, ...", 'long': 'AUTO', }, 'unusable_chars': { 'type': types.ListType, 'val': ["/", "\r"], 'usage': "characters which can't be used in filenames", 'doc': """ put chars which can't be used in filenames here and their replacements in replacement_chars. example 1: replace all " " by "_": unusable_chars = " " replacement_chars = "_" example 2: replace umlauts by an alternate representation and kill some special characters: unusable_chars = "äöüÄÖÜß?*^()[]{}" replacement_chars = ["ae", "oe", "ue", "Ae", "Oe", "Ue", "ss", ""]""", 'long': 'AUTO', }, 'replacement_chars': { 'type': types.ListType, 'val': ["%", ""], 'doc': "this is stretched to match unusable_chars' length using the last char as fill", 'usage': "unusable chars are replaced by the corresponding list item", 'long': 'AUTO', }, 'show_time': { 'type': 'toggle', 'val': 1, 'doc': "Display the track length in the status screen", }, 'show_names': { 'type': 'toggle', 'val': 1, 'doc': "XXX todo: auto id enough term width -- display freedb track names instead if \"track_01\", ... This will not fit in a 80x24 terminal.", }, 'scan_dirs': { 'type': types.IntType, 'val': 2, 'usage': "scan in cwd n dir levels deep, e.g. 0 to disable", 'long': 'AUTO', }, 'searchdirs': { 'type': types.ListType, 'val': [os.curdir], 'usage': "search which directories", 'long': 'search', }, 'base_dir': { 'type': types.StringType, 'val': os.curdir, 'usage': "where to create directories and put the files", 'long': 'workdir', 'short': 'w', }, 'update_interval': { 'type': types.FloatType, 'val': 1.0, 'doc': "update status screen every ... seconds", }, 'max_load': { 'type': types.FloatType, 'val': 10.0, 'usage': "only start new encoders if load < max_load", 'long': 'AUTO', }, 'xtermset_enable': { 'type': 'toggle', 'val': 0, 'doc': "leave disabled if you don't have xtermset installed", }, 'restore_xterm_width': { 'type': 'toggle', 'val': 0, 'doc': "XXX not implemented yet! reset xterm width when exiting", }, 'terminal': { 'type': types.StringType, 'val': "auto", 'doc': "use what kind of terminal", }, 'default_width': { 'type': types.IntType, 'val': 80, 'doc': "XXX unused! your xterm's width (autodetected with curses)", }, 'default_height': { 'type': types.IntType, 'val': 24, 'doc': "XXX unused! your xterm's height (autodetected with curses)", }, 'usage_win': { 'type': 'toggle', 'val': 1, 'usage': "show the help screen while running", 'long': "AUTO", }, 'keep_free': { 'type': types.IntType, 'val': 5*2**20, 'doc': "suspend if less than keep_free bytes are free. Don't set this to zero as encoded file size prediction is always a bit below actual sizes => we might need some extra space.", }, 'encoders': { 'type': types.IntType, 'val': 1, 'usage': "encode how many files in parallel", 'short': 'e', 'long': 'AUTO', }, 'otf': { 'type': 'toggle', 'val': 0, 'usage': "on-the-fly encoding *experimental*", 'long': 'AUTO', }, 'create_dirs': { 'type': 'toggle', 'val': 1, 'usage': "create subdir for files", 'short': 'D', 'long': 'AUTO', }, 'reorder': { 'type': 'toggle', 'val': 0, 'usage': "reorder tracks to save space while encoding", 'short': 'r', 'long': 'AUTO', }, 'keep_wavs': { 'type': 'toggle', 'val': 0, 'usage': "do not delete WAVs after encoding them", 'short': 'k', 'long': 'AUTO', }, 'only_dae': { 'type': 'toggle', 'val': 0, 'usage': "only produce WAVs, implies --keep_wavs", 'short': 'O', 'long': 'AUTO', }, 'read_ahead': { 'type': types.IntType, 'val': 99, 'usage': "read how many WAVs in advance", 'short': 'a', 'long': 'AUTO', }, 'nice_value': { 'type': types.IntType, 'val': 12, 'usage': "nice-level of encoders", 'short': 'n', 'long': 'nice', }, 'overwrite': { 'type': 'toggle', 'val': 0, 'usage': "overwrite existing files", 'short': 'o', 'long': 'AUTO', }, 'remove_files': { 'type': 'toggle', 'val': 0, 'usage': "remove jack.* file when done", 'long': 'AUTO', }, 'silent_mode': { 'type': 'toggle', 'val': 0, 'usage': "be quiet (no screen output)", 'long': 'AUTO', }, 'exec_when_done': { 'type': 'toggle', 'val': 0, 'usage': "run predefined command when finished", 'long': 'exec', 'short': 'x', }, 'exec_rip_done': { 'type': types.StringType, 'val': "eject /dev/cdrom", 'doc': "example: eject the CD when ripping is finished", }, 'exec_no_err': { 'type': types.StringType, 'val': "play /usr/local/audio/allok.wav", 'doc': "example: play sound when finished", }, 'exec_err': { 'type': types.StringType, 'val': "play /usr/local/audio/error.wav", 'doc': "example: this is played when an error occured", }, 'freedb_dir': { 'type': types.StringType, 'val': "", 'doc': "change this to something like \"/var/spool/freedb\" and all queries will be done in this (local) directory; failed local queries will be done via network", }, 'freedb_pedantic': { 'type': 'toggle', 'val': 0, 'doc': "don't be pedantic when parsing freedb data, e.g. the ambigous (various artists) TTITLE \"The Artist - Track a Title - Cool Remix\" is split at the first possible separator.", }, ### prefs0 ### 'force': { 'type': 'toggle', 'val': 0, 'usage': "don't ask.", 'long': 'AUTO', }, 'recheck_space': { 'type': 'toggle', 'val': 1, 'doc': "yes we want to react to disk space dropping.", }, 'swap_byteorder': { 'type': 'toggle', 'val': 1, 'usage': "swap byteorder when reading from image", 'long': 'swab', 'short': 'S', }, 'todo_exit': { 'type': 'toggle', 'val': 0, 'save': 0, 'usage': "print what would be done and exit", 'long': 'todo', }, 'space_from_argv': { 'type': types.IntType, 'val': 0, 'usage': "force usable disk space, in bytes", 'long': 'space', 'short': 's', }, 'check_toc': { 'type': 'toggle', 'val': 0, 'save': 0, 'usage': "compare toc-file and cd-toc, then exit", 'long': 'AUTO', }, 'undo_rename': { 'type': 'toggle', 'val': 0, 'save': 0, 'usage': "undo the last file renaming and exit", 'long': 'AUTO', 'short': 'u', }, 'dont_work': { 'type': 'toggle', 'val': 0, 'save': 0, 'usage': "don't do DAE, encoding, renaming or tagging", 'long': 'AUTO', 'short': 'd', }, 'update_freedb': { 'type': 'toggle', 'val': 0, 'save': 0, 'usage': "update the freedb info and exit", 'long': 'AUTO', 'short': 'U', }, 'sloppy': { 'type': 'toggle', 'val': 0, 'doc': "XXX", 'long': 'I-swear-I\'ll-never-give-these-files-to-anyone,-including-hot-babes-TM', }, 'tracks': { 'type': types.StringType, 'val': "", 'save': 0, 'usage': "which tracks to process (e.g. 1, 3, 5-9, 12-)", 'long': 'tracks', 'short': 't', }, 'name': { 'type': types.StringType, 'val': "track_%02d", 'doc': "filename template (before renaming)", }, 'rippers': { 'type': types.IntType, 'val': 1, 'doc': "not implemented: rip in parallel", }, 'toc_prog': { 'type': types.StringType, 'val': "CDDB.py", 'doc': "use which helper program to read cd's toc", }, ### prefs0 -- FREEDB stuff ### 'query_on_start': { 'type': 'toggle', 'val': 0, 'save': 0, 'help': 1, 'usage': "do freedb query when starting", 'long': 'query-now', 'short': 'Q', }, 'query_if_needed': { 'type': 'toggle', 'val': 0, 'help': 1, 'usage': "query freedb when starting if not queried already", 'long': 'AUTO', }, 'query_when_ready': { 'type': 'toggle', 'val': 0, 'save': 0, 'help': 1, 'usage': "do freedb query when all is done", 'long': 'query', 'short': 'q', }, 'cont_failed_query': { 'type': 'toggle', 'val': 0, 'usage': "continue without freedb data if query fails", 'long': 'AUTO', }, 'edit_freedb': { 'type': 'toggle', 'val': 0, 'usage': "edit CDDB information before using it", 'long': 'AUTO', }, 'various': { 'type': 'toggle', 'val': None, 'save': 0, 'usage': "assume CD has various artists", 'long': 'AUTO', }, 'various_swap': { 'type': 'toggle', 'val': 0, 'save': 0, 'usage': "exchange artist and title", 'long': 'AUTO', }, 'extt_is_artist': { 'type': 'toggle', 'val': 0, 'save': 0, 'usage': "extt contains artist", 'long': 'AUTO', }, 'extt_is_title': { 'type': 'toggle', 'val': 0, 'save': 0, 'usage': "extt contains track title", 'long': 'AUTO', }, 'extt_is_comment': { 'type': 'toggle', 'val': 0, 'save': 0, 'usage': "extt contains track comment", 'long': 'AUTO', }, 'freedb_submit': { 'type': 'toggle', 'val': 0, 'save': 0, 'usage': "http-submit freedb file to server and exit", 'long': 'submit', }, 'freedb_mailsubmit': { 'type': 'toggle', 'val': 0, 'save': 0, 'usage': "submit by e-mail - needs sendmail", 'long': 'mail-submit', 'short': 'm', }, 'read_freedb_file': { 'type': 'toggle', 'val': 0, 'save': 0, 'doc': "read freedb file", }, 'freedb_rename': { 'type': 'toggle', 'val': 0, 'help': 1, 'save': 0, 'usage': "rename according to freedb file, eg. after editing it", 'long': 'rename', 'short': 'R', }, 'set_id3tag': { 'type': 'toggle', 'val': 0, 'save': 0, 'doc': "set id3 tag info", }, 'id3_genre': { 'type': types.IntType, 'val': -1, 'save': 0, 'doc': "set ID3 genre (empty=don't set, help=list)", }, 'id3_year': { 'type': types.IntType, 'val': -1, 'save': 0, 'usage': "set ID3 year (0=don't set)", 'long': 'AUTO', 'short': 'Y', }, 'username': { 'type': types.StringType, 'val': None, 'doc': "required for freedb query", }, 'hostname': { 'type': types.StringType, 'val': None, 'doc': "required for freedb query", }, 'image_toc_file': { 'type': types.StringType, 'val': None, 'save': 0, 'usage': "read another toc file which may point to an image-file", 'long': 'from-tocfile', 'short': 'f', }, 'image_file': { 'type': types.StringType, 'val': None, 'save': 0, 'usage': "read audio from an image file", 'long': 'from-image', 'short': 'F', }, 'rip_from_device': { 'type': 'toggle', 'val': 1, 'save': 0, 'doc': "rip from physical device, not from image_file", }, 'toc_file': { 'type': types.StringType, 'val': jack_version.prog_name + ".toc", 'save': 0, 'doc': "the toc file which is actually used", }, 'def_toc': { 'type': types.StringType, 'val': jack_version.prog_name + ".toc", 'doc': "the default name of the toc file", }, 'freedb_form_file': { 'type': types.StringType, 'val': jack_version.prog_name + ".freedb", 'doc': "name of submission template", }, 'out_file': { 'type': types.StringType, 'val': jack_version.prog_name + ".out", 'doc': "in silent-mode, stdout goes here", }, 'err_file': { 'type': types.StringType, 'val': jack_version.prog_name + ".err", 'doc': "in silent-mode, stderr here", }, 'progress_file': { 'type': types.StringType, 'val': jack_version.prog_name + ".progress", 'doc': "subprocess output is cached here", }, 'progr_sep': { 'type': types.StringType, 'val': "/|\\", 'doc': "field separator in progress_file", }, 'guess_mp3s': { 'type': types.ListType, 'val': [], 'save': 0, 'usage': "guess TOC from files (until terminating \";\")", 'long': 'guess-toc', 'short': 'g', }, 'upd_progress': { 'type': 'toggle', 'val': 0, 'save': 0, 'usage': "re-generate progress file if \"lost\"", 'long': 'AUTO', }, 'multi_mode': { 'type': 'toggle', 'val': 0, 'save': 0, 'usage': "try to query freedb for all dirs in searchdirs which have no freedb data", 'long': 'AUTO', }, 'claim_dir': { 'type': 'toggle', 'val': 0, 'save': 0, 'usage': "rename the dir even if it was not created by jack", 'long': 'AUTO', 'short': 'C', }, 'wait_on_quit': { 'type': 'toggle', 'val': 0, 'usage': "wait for key press before quitting", 'long': 'wait', }, 'id3_genre_txt': { 'type': types.StringType, 'val': None, 'save': 0, 'usage': "set ID3 genre (empty=don't set, help=list)", 'long': 'id3-genre', 'short': 'G', }, 'save_args': { 'type': 'toggle', 'val': 0, 'save': 0, 'usage': "save options to rc file and exit", 'long': 'save', }, 'global_rc': { 'type': types.StringType, 'val': "/etc/jackrc", 'save': 0, 'doc': "system-wide config file", }, 'user_rc': { 'type': types.StringType, 'val': "~/.jack3rc", 'save': 0, 'doc': "user config file", }, 'write_m3u': { 'type': 'toggle', 'val': 0, 'usage': "create a playlist in .m3u format", 'long': 'AUTO', }, 'write_id3v1': { 'type': 'toggle', 'val': 1, 'usage': "write a smart id3v1 tag to the encoded file", 'long': 'AUTO', }, 'write_id3v2': { 'type': 'toggle', 'val': 1, 'usage': "write an id3v2 tag to the encoded file", 'long': 'AUTO', }, 'playorder': { 'type': 'toggle', 'val': 0, 'usage': "use the freedb PLAYORDER field to limit the tracks to rip (non-functional, sorry)", 'long': 'AUTO', }, }) for i in cf.keys(): # expand long options if cf[i].has_key('long') and cf[i]['long'] == "AUTO": cf[i]['long'] = string.replace(i, "_", "-") # init history cf[i]['history'] = [ ["config", cf[i]['val'],],]