From d7630449fc7cd6cff94a5b4b6dc02ed48221e55a Mon Sep 17 00:00:00 2001 From: Mikhail Osipov Date: Wed, 6 Nov 2013 16:57:22 +0400 Subject: move progress to progress.py --- cutter/progress.py | 59 ++++++++++++++++++++++++++++++++++++++++++++++++ cutter/splitter.py | 66 +++++------------------------------------------------- 2 files changed, 64 insertions(+), 61 deletions(-) create mode 100644 cutter/progress.py 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) -- cgit v1.2.3-70-g09d2