summaryrefslogtreecommitdiff
path: root/cutter/splitter.py
diff options
context:
space:
mode:
authorMikhail Osipov <mike.osipov@gmail.com>2013-11-06 02:56:01 +0400
committerMikhail Osipov <mike.osipov@gmail.com>2013-11-06 02:56:01 +0400
commit425a97f98026d154651feac9cb0884a1f8af7cc5 (patch)
tree41644042eb80db38926d1271ef0223771d6ce840 /cutter/splitter.py
parent1c899a6f29e1fb65b26eb553162d13b63353c1ea (diff)
show progress of encoding
Diffstat (limited to 'cutter/splitter.py')
-rw-r--r--cutter/splitter.py69
1 files changed, 66 insertions, 3 deletions
diff --git a/cutter/splitter.py b/cutter/splitter.py
index 332ce50..4446bcc 100644
--- a/cutter/splitter.py
+++ b/cutter/splitter.py
@@ -74,6 +74,65 @@ class StreamInfo:
return stream.info()
+class Progress:
+ def __init__(self, message):
+ self.progress_shown = False
+ self.message = message
+
+ def erase(self, n):
+ if not self.progress_shown:
+ self.last_length = n
+ self.progress_shown = True
+ return 0
+
+ prev, self.last_length = self.last_length, n
+ return prev
+
+ def show(self, msg):
+ printf("%s", "\b" * self.erase(len(msg)) + msg)
+
+ def do_print(self):
+ if self.percent > self.last_percent:
+ self.show("%3d%% " % self.percent)
+ self.last_percent = self.percent
+
+ def clear(self):
+ if self.last_length:
+ self.show(" " * self.last_length)
+
+ def init(self, total):
+ self.total = total
+ self.current = 0
+ self.percent = 0
+ self.last_percent = -1
+ self.last_length = 0
+
+ self.do_print()
+
+ def update(self, value):
+ self.current += value
+ percent = 100 * self.current // self.total
+ self.percent = min(max(percent, 0), 100)
+
+ self.do_print()
+
+ def finish(self):
+ n = max(self.last_length - len(self.message), 0)
+ self.show(self.message + " " * n + "\n")
+
+class DummyProgress:
+ def __init__(self, message):
+ self.message = message
+
+ def init(self, total):
+ pass
+
+ def update(self, value):
+ pass
+
+ def finish(self):
+ printf("%s\n", self.message)
+
class Splitter:
EXT = ["ape", "flac", "wv"]
@@ -327,6 +386,12 @@ class Splitter:
return track.end - track.begin
+ def progress(self, message):
+ if self.opt.show_progress:
+ return Progress(message)
+
+ return DummyProgress(message)
+
def split_file(self, file):
stream = self.open_decode(file.path)
if not stream:
@@ -364,11 +429,9 @@ class Splitter:
printf("FAILED\n")
sys.exit(1)
- out.process()
+ out.process(self.progress("OK"))
out.close()
- printf("OK\n")
-
self.tag(track, path)
stream.close()