From 7b249334370477fbc2076ef6982344e26865945b Mon Sep 17 00:00:00 2001 From: Mikhail Osipov Date: Wed, 30 Oct 2013 23:10:48 +0400 Subject: add --tracks option (not used yet) --- TODO | 2 ++ cutter.py | 36 ++++++++++++++++++++++++++++++++++++ cutter/cue.py | 2 +- cutter/splitter.py | 27 +++++++++++++++------------ 4 files changed, 54 insertions(+), 13 deletions(-) diff --git a/TODO b/TODO index 79ab0d8..4733a1f 100644 --- a/TODO +++ b/TODO @@ -9,3 +9,5 @@ OK 8. add charset coding argument OK 9. prepare setup OK 10. create default config on startup OK 11. make cchardet optional +12. manually convert files +13. use python wave module diff --git a/cutter.py b/cutter.py index 78e6cf5..9fa0cff 100755 --- a/cutter.py +++ b/cutter.py @@ -9,6 +9,9 @@ from optparse import OptionParser, OptionGroup import sys import os +import re + +re_range = re.compile("^(\d+)-(\d+)$") try: from cutter import config @@ -100,6 +103,8 @@ def parse_args(): dest="bitrate", default=config.MP3_BITRATE, help="audio bitrate (used for mp3)") + enc.add_option("--tracks", dest="tracks", help="select tracks") + parser.add_option_group(enc) fname = OptionGroup(parser, "Filename options") @@ -152,6 +157,29 @@ def option_check_range(option, value, min, max): return True +def tracks_parse(string): + tracks = set() + + for item in string.split(","): + try: + value = int(item) + tracks.add(value) + except ValueError: + m = re_range.match(item) + if not m: + return None + + start, end = int(m.group(1)), int(m.group(2)) + if start <= 0 or end <= 0 or start == end: + return None + + if start > end: + start, end = end, start + + tracks.update(range(start, end + 1)) + + return None if len(tracks) == 0 else tracks + def process_options(opt): def choose(a, b): return a if a is not None else b @@ -202,6 +230,14 @@ def process_options(opt): if opt.use_tempdir is None: opt.use_tempdir = config.USE_TEMPDIR + if opt.tracks is not None: + tracks = tracks_parse(opt.tracks) + if not tracks: + printerr("invalid tracks option \"%s\"", opt.tracks) + return False + + opt.tracks = tracks + return True def find_cuefile(path): diff --git a/cutter/cue.py b/cutter/cue.py index 043884b..a876eff 100644 --- a/cutter/cue.py +++ b/cutter/cue.py @@ -45,7 +45,7 @@ class File: self._tracks.append(track) def isaudio(self): - return self.type == "WAVE" + return self.type in ("WAVE", "FLAC") def has_audio_tracks(self): return len(list(self.tracks())) > 0 diff --git a/cutter/splitter.py b/cutter/splitter.py index 024a9ee..45cd0be 100644 --- a/cutter/splitter.py +++ b/cutter/splitter.py @@ -124,14 +124,7 @@ class Splitter: printerr("invalid format option: %s", err) sys.exit(1) - def __init__(self, cue, opt): - self.cue = cue - self.opt = opt - self.tracktotal = len(list(self.all_tracks())) - - self.enctype = formats.handler(opt.type, logger=printf) - self.tag_supported = self.enctype.is_tag_supported() - + def init_tags(self): self.tags = { "album": self.opt.album or self.cue.get("title"), "date": self.opt.date or self.cue.get("date"), @@ -144,13 +137,13 @@ class Splitter: "albumartist": self.opt.albumartist } - tmp = self.format_by_tags(os.path.dirname(opt.fmt), self.tags, True) + tmp = self.format_by_tags(os.path.dirname(self.opt.fmt), self.tags, True) - if opt.convert_chars: + if self.opt.convert_chars: tmp = convert_characters(tmp) - self.dest = os.path.join(opt.dir, tmp) - track_fmt = os.path.basename(opt.fmt) + self.dest = os.path.join(self.opt.dir, tmp) + track_fmt = os.path.basename(self.opt.fmt) tracknumber = 0 self.track_info = {} @@ -160,6 +153,16 @@ class Splitter: track, tracknumber, track_fmt ) + def __init__(self, cue, opt): + self.cue = cue + self.opt = opt + self.tracktotal = len(list(self.all_tracks())) + + self.enctype = formats.handler(opt.type, logger=printf) + self.tag_supported = self.enctype.is_tag_supported() + + self.init_tags() + def get_track_info(self, track, tracknumber, fmt): tags = dict(self.tags) tags.update({ -- cgit v1.2.3-70-g09d2