summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cutter/progress.py59
-rw-r--r--cutter/splitter.py66
2 files changed, 64 insertions, 61 deletions
diff --git a/cutter/progress.py b/cutter/progress.py
new file mode 100644
index 0000000..35ac7db
--- /dev/null
+++ b/cutter/progress.py
@@ -0,0 +1,59 @@
+class DummyProgress:
+ def __init__(self, callback, message):
+ self.callback = callback
+ self.message = message
+
+ def init(self, total):
+ pass
+
+ def update(self, value):
+ pass
+
+ def finish(self):
+ self.callback(self.message + "\n")
+
+class PercentProgress(DummyProgress):
+ def __init__(self, *args):
+ DummyProgress.__init__(self, *args)
+ self.progress_shown = False
+
+ 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):
+ self.callback("\b" * self._erase(len(msg)) + msg)
+
+ def _show_percent(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._show_percent()
+
+ def update(self, value):
+ self.current += value
+ percent = 100 * self.current // self.total
+ self.percent = min(max(percent, 0), 100)
+
+ self._show_percent()
+
+ def finish(self):
+ n = max(self.last_length - len(self.message), 0)
+ self._show(self.message + " " * n + "\n")
diff --git a/cutter/splitter.py b/cutter/splitter.py
index 4446bcc..18bfecb 100644
--- a/cutter/splitter.py
+++ b/cutter/splitter.py
@@ -1,4 +1,5 @@
from . coding import to_unicode, to_bytes
+from . progress import *
from . tools import *
from . import formats
@@ -74,65 +75,6 @@ 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"]
@@ -387,10 +329,12 @@ class Splitter:
return track.end - track.begin
def progress(self, message):
+ func = lambda msg: printf("%s", msg)
+
if self.opt.show_progress:
- return Progress(message)
+ return PercentProgress(func, message)
- return DummyProgress(message)
+ return DummyProgress(func, message)
def split_file(self, file):
stream = self.open_decode(file.path)