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()
def export_progress_update(progress: Progress) -> ProgressUpdate | None:
def export_progress_update(progress: Progress, update: ProgressUpdate) -> None:
if not progress.HasField("exporting"):
return None
return ProgressUpdate(
label=tr.exporting_exported_media_file(count=progress.exporting)
)
update.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:
if progress.HasField("importing"):
return ProgressUpdate(label=progress.importing)
return None
def import_progress_update(progress: Progress, update: ProgressUpdate) -> None:
if not progress.HasField("importing"):
return
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
_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]):
self._parent = parent
@ -88,7 +88,7 @@ class CollectionOp(Generic[ResultWithChanges]):
return self
def with_backend_progress(
self, progress_update: Callable[[Progress], ProgressUpdate | None] | None
self, progress_update: Callable[[Progress, ProgressUpdate], None] | None
) -> CollectionOp[ResultWithChanges]:
self._progress_update = progress_update
return self
@ -196,7 +196,7 @@ class QueryOp(Generic[T]):
_failure: Callable[[Exception], Any] | None = None
_progress: bool | str = False
_progress_update: Callable[[Progress], ProgressUpdate | None] | None = None
_progress_update: Callable[[Progress, ProgressUpdate], None] | None = None
def __init__(
self,
@ -222,7 +222,7 @@ class QueryOp(Generic[T]):
return self
def with_backend_progress(
self, progress_update: Callable[[Progress], ProgressUpdate | None] | None
self, progress_update: Callable[[Progress, ProgressUpdate], None] | None
) -> QueryOp[T]:
self._progress_update = progress_update
return self

View file

@ -171,7 +171,7 @@ class ProgressManager:
def start_with_backend_updates(
self,
progress_update: Callable[[Progress], ProgressUpdate | None],
progress_update: Callable[[Progress, ProgressUpdate], None],
start_label: str | None = None,
parent: QWidget | None = None,
) -> None:
@ -185,12 +185,14 @@ class ProgressManager:
def on_progress() -> None:
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()
if not (update := progress_update(progress)):
return
if dialog and dialog.wantCancel:
progress_update(progress, update)
if update.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)
self._backend_timer.start()
@ -334,3 +336,8 @@ class ProgressUpdate:
label: str | None = None
value: 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(
self,
task: Callable,
progress_update: Callable[[Progress], ProgressUpdate | None],
progress_update: Callable[[Progress, ProgressUpdate], None],
on_done: Callable[[Future], None] | None = None,
parent: QWidget | None = None,
start_label: str | None = None,