Mutate ProgressUpdate in progress_update callback

This commit is contained in:
RumovZ 2022-05-01 09:26:06 +02:00
parent 92319116d4
commit 8c5311e8ae
5 changed files with 27 additions and 18 deletions

View file

@ -227,9 +227,9 @@ class ApkgExporter(Exporter):
).with_backend_progress(export_progress_update).run_in_background() ).with_backend_progress(export_progress_update).run_in_background()
def export_progress_update(progress: Progress) -> ProgressUpdate | None: def export_progress_update(progress: Progress, update: ProgressUpdate) -> None:
if not progress.HasField("exporting"): if not progress.HasField("exporting"):
return None return None
return ProgressUpdate( update.label = tr.exporting_exported_media_file(count=progress.exporting)
label=tr.exporting_exported_media_file(count=progress.exporting) if update.user_wants_abort:
) update.abort = True

View file

@ -143,7 +143,9 @@ def stringify_log(log: Any) -> str:
) )
def import_progress_update(progress: Progress) -> ProgressUpdate | None: def import_progress_update(progress: Progress, update: ProgressUpdate) -> None:
if progress.HasField("importing"): if not progress.HasField("importing"):
return ProgressUpdate(label=progress.importing) return
return None update.label = progress.importing
if update.user_wants_abort:
update.abort = True

View file

@ -69,7 +69,7 @@ class CollectionOp(Generic[ResultWithChanges]):
_success: Callable[[ResultWithChanges], Any] | None = None _success: Callable[[ResultWithChanges], Any] | None = None
_failure: Callable[[Exception], Any] | None = None _failure: Callable[[Exception], Any] | None = None
_progress_update: Callable[[Progress], ProgressUpdate | None] | None = None _progress_update: Callable[[Progress, ProgressUpdate], None] | None = None
def __init__(self, parent: QWidget, op: Callable[[Collection], ResultWithChanges]): def __init__(self, parent: QWidget, op: Callable[[Collection], ResultWithChanges]):
self._parent = parent self._parent = parent
@ -88,7 +88,7 @@ class CollectionOp(Generic[ResultWithChanges]):
return self return self
def with_backend_progress( def with_backend_progress(
self, progress_update: Callable[[Progress], ProgressUpdate | None] | None self, progress_update: Callable[[Progress, ProgressUpdate], None] | None
) -> CollectionOp[ResultWithChanges]: ) -> CollectionOp[ResultWithChanges]:
self._progress_update = progress_update self._progress_update = progress_update
return self return self
@ -196,7 +196,7 @@ class QueryOp(Generic[T]):
_failure: Callable[[Exception], Any] | None = None _failure: Callable[[Exception], Any] | None = None
_progress: bool | str = False _progress: bool | str = False
_progress_update: Callable[[Progress], ProgressUpdate | None] | None = None _progress_update: Callable[[Progress, ProgressUpdate], None] | None = None
def __init__( def __init__(
self, self,
@ -222,7 +222,7 @@ class QueryOp(Generic[T]):
return self return self
def with_backend_progress( def with_backend_progress(
self, progress_update: Callable[[Progress], ProgressUpdate | None] | None self, progress_update: Callable[[Progress, ProgressUpdate], None] | None
) -> QueryOp[T]: ) -> QueryOp[T]:
self._progress_update = progress_update self._progress_update = progress_update
return self return self

View file

@ -171,7 +171,7 @@ class ProgressManager:
def start_with_backend_updates( def start_with_backend_updates(
self, self,
progress_update: Callable[[Progress], ProgressUpdate | None], progress_update: Callable[[Progress, ProgressUpdate], None],
start_label: str | None = None, start_label: str | None = None,
parent: QWidget | None = None, parent: QWidget | None = None,
) -> None: ) -> None:
@ -185,12 +185,14 @@ class ProgressManager:
def on_progress() -> None: def on_progress() -> None:
assert self.mw assert self.mw
user_wants_abort = dialog and dialog.wantCancel or False
update = ProgressUpdate(user_wants_abort=user_wants_abort)
progress = self.mw.backend.latest_progress() progress = self.mw.backend.latest_progress()
if not (update := progress_update(progress)): progress_update(progress, update)
return if update.abort:
if dialog and dialog.wantCancel:
self.mw.backend.set_wants_abort() self.mw.backend.set_wants_abort()
self.update(label=update.label, value=update.value, max=update.max) if update.has_update():
self.update(label=update.label, value=update.value, max=update.max)
qconnect(self._backend_timer.timeout, on_progress) qconnect(self._backend_timer.timeout, on_progress)
self._backend_timer.start() self._backend_timer.start()
@ -334,3 +336,8 @@ class ProgressUpdate:
label: str | None = None label: str | None = None
value: int | None = None value: int | None = None
max: int | None = None max: int | None = None
user_wants_abort: bool = False
abort: bool = False
def has_update(self) -> bool:
return self.label is not None or self.value is not None or self.max is not None

View file

@ -94,7 +94,7 @@ class TaskManager(QObject):
def with_backend_progress( def with_backend_progress(
self, self,
task: Callable, task: Callable,
progress_update: Callable[[Progress], ProgressUpdate | None], progress_update: Callable[[Progress, ProgressUpdate], None],
on_done: Callable[[Future], None] | None = None, on_done: Callable[[Future], None] | None = None,
parent: QWidget | None = None, parent: QWidget | None = None,
start_label: str | None = None, start_label: str | None = None,