mirror of
https://github.com/ankitects/anki.git
synced 2025-09-22 16:02:23 -04:00
Mutate ProgressUpdate in progress_update callback
This commit is contained in:
parent
92319116d4
commit
8c5311e8ae
5 changed files with 27 additions and 18 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in a new issue