Fix progress of chained operations (#1817)

* Fix progress of chained operations

Especially aborting colpkg import.

* Notify about missing progress dialog
This commit is contained in:
RumovZ 2022-04-22 06:47:17 +02:00 committed by GitHub
parent 2b739d76b2
commit aea7eb667e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 9 additions and 9 deletions

View file

@ -14,7 +14,7 @@ import aqt.modelchooser
from anki.errors import Interrupted from anki.errors import Interrupted
from anki.importing.anki2 import V2ImportIntoV1 from anki.importing.anki2 import V2ImportIntoV1
from anki.importing.apkg import AnkiPackageImporter from anki.importing.apkg import AnkiPackageImporter
from aqt import AnkiQt, gui_hooks from aqt.main import AnkiQt, gui_hooks
from aqt.operations import QueryOp from aqt.operations import QueryOp
from aqt.qt import * from aqt.qt import *
from aqt.utils import ( from aqt.utils import (
@ -460,12 +460,13 @@ def full_apkg_import(mw: AnkiQt, file: str) -> None:
def replace_with_apkg( def replace_with_apkg(
mw: aqt.AnkiQt, filename: str, callback: Callable[[bool], None] mw: AnkiQt, filename: str, callback: Callable[[bool], None]
) -> None: ) -> None:
"""Tries to replace the provided collection with the provided backup, """Tries to replace the provided collection with the provided backup,
then calls the callback. True if success. then calls the callback. True if success.
""" """
dialog = mw.progress.start(immediate=True) if not (dialog := mw.progress.start(immediate=True)):
print("No progress dialog during import; aborting will not work")
timer = QTimer() timer = QTimer()
timer.setSingleShot(False) timer.setSingleShot(False)
timer.setInterval(100) timer.setInterval(100)

View file

@ -217,6 +217,10 @@ class QueryOp(Generic[T]):
def wrapped_done(future: Future) -> None: def wrapped_done(future: Future) -> None:
assert mw assert mw
if self._progress:
mw.progress.finish()
mw._decrease_background_ops() mw._decrease_background_ops()
# did something go wrong? # did something go wrong?
if exception := future.exception(): if exception := future.exception():
@ -230,11 +234,6 @@ class QueryOp(Generic[T]):
# BaseException like SystemExit; rethrow it # BaseException like SystemExit; rethrow it
future.result() future.result()
result = future.result() self._success(future.result())
try:
self._success(result)
finally:
if self._progress:
mw.progress.finish()
mw.taskman.run_in_background(wrapped_op, wrapped_done) mw.taskman.run_in_background(wrapped_op, wrapped_done)