diff options
| author | Mikhail Osipov <mike.osipov@gmail.com> | 2013-11-05 01:06:17 +0400 |
|---|---|---|
| committer | Mikhail Osipov <mike.osipov@gmail.com> | 2013-11-05 01:06:17 +0400 |
| commit | 6cb3a8a1828ef2b3c480b6e4988a2421ec47d0c6 (patch) | |
| tree | 64fd4a5233255c244c76cf546a9e125537d0524e | |
| parent | 96d929f09aa28f1d5684743375721d0ac0e832e6 (diff) | |
select tracks by --tracks options
| -rw-r--r-- | TODO | 5 | ||||
| -rwxr-xr-x | cutter.py | 4 | ||||
| -rw-r--r-- | cutter/splitter.py | 28 |
3 files changed, 26 insertions, 11 deletions
@@ -9,5 +9,6 @@ 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 +OK 12. manually convert files +OK 13. use python wave module +14. show progress of encoding @@ -156,7 +156,7 @@ def option_check_range(option, value, min, max): return True -def tracks_parse(string): +def parse_tracks(string): tracks = set() for item in string.split(","): @@ -230,7 +230,7 @@ def process_options(opt): opt.use_tempdir = config.USE_TEMPDIR if opt.tracks is not None: - tracks = tracks_parse(opt.tracks) + tracks = parse_tracks(opt.tracks) if not tracks: printerr("invalid tracks option \"%s\"", opt.tracks) return False diff --git a/cutter/splitter.py b/cutter/splitter.py index 24e8eac..3109c14 100644 --- a/cutter/splitter.py +++ b/cutter/splitter.py @@ -4,10 +4,10 @@ from . tools import * from . import formats from tempfile import mkdtemp -from itertools import chain import collections import subprocess +import itertools import shutil import sys import os @@ -143,6 +143,7 @@ class Splitter: def __init__(self, cue, opt): self.cue = cue self.opt = opt + self.tracks = None self.encoder = formats.encoder(opt.type) self.tag_supported = self.encoder.is_tag_supported() @@ -201,10 +202,6 @@ class Splitter: return lst - def shntool_args(self, tool, info): - encode = self.encoder.encode(self.opt, info) - return [tool, "-w", "-d", self.dest, "-o", encode] - def track_name(self, track): return self.track_info[track].name @@ -317,10 +314,16 @@ class Splitter: return for track in file.tracks(): + ts = self.track_timerange(track) + + if track not in self.tracks: + if self.opt.verbose: + printf("split %s (%s): SKIP\n", quote(file.path), ts) + continue + trackname = self.track_name(track) path = os.path.join(self.dest, trackname) - ts = self.track_timerange(track) printf("split %s (%s) -> %s", quote(file.path), ts, quote(trackname)) printf("\n" if self.opt.dry_run else ": ") @@ -392,7 +395,18 @@ class Splitter: sys.exit(1) def all_tracks(self): - return chain(*[f.tracks() for f in self.cue.files()]) + if self.tracks: + return self.tracks + + tracks = itertools.chain(*[f.tracks() for f in self.cue.files()]) + + if self.opt.tracks is None: + self.tracks = list(tracks) + else: + mapped = zip(tracks, itertools.count(1)) + self.tracks = [t for t, n in mapped if n in self.opt.tracks] + + return self.tracks def dump_tags(self): add_line = False |
