From b7c72bca4c3503196ed8cfb8e15ad78e6243144d Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Sat, 6 Feb 2021 19:01:48 +1000 Subject: [PATCH] fix backup not being taken before full download --- qt/aqt/main.py | 13 ++++++++++++- qt/aqt/sync.py | 8 +++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/qt/aqt/main.py b/qt/aqt/main.py index 27b734e78..5f54d7610 100644 --- a/qt/aqt/main.py +++ b/qt/aqt/main.py @@ -565,6 +565,13 @@ class AnkiQt(QMainWindow): if not corrupt and not self.restoringBackup: self.backup() + def _close_for_full_download(self) -> None: + "Backup and prepare collection to be overwritten." + self.col.close(downgrade=False) + self.backup() + self.col.reopen(after_full_sync=False) + self.col.close_for_full_sync() + # Backup and auto-optimize ########################################################################## @@ -585,6 +592,9 @@ class AnkiQt(QMainWindow): z.close() def backup(self) -> None: + "Read data into memory, and complete backup on a background thread." + assert not self.col or not self.col.db + nbacks = self.pm.profile["numBackups"] if not nbacks or devMode: return @@ -615,7 +625,8 @@ class AnkiQt(QMainWindow): fname = backups.pop(0) path = os.path.join(dir, fname) os.unlink(path) - gui_hooks.backup_did_complete() + + self.taskman.run_on_main(gui_hooks.backup_did_complete) def maybeOptimize(self) -> None: # have two weeks passed? diff --git a/qt/aqt/sync.py b/qt/aqt/sync.py index 9686515c9..939348786 100644 --- a/qt/aqt/sync.py +++ b/qt/aqt/sync.py @@ -173,8 +173,6 @@ def on_full_sync_timer(mw: aqt.main.AnkiQt) -> None: def full_download(mw: aqt.main.AnkiQt, on_done: Callable[[], None]) -> None: - mw.col.close_for_full_sync() - def on_timer() -> None: on_full_sync_timer(mw) @@ -182,6 +180,10 @@ def full_download(mw: aqt.main.AnkiQt, on_done: Callable[[], None]) -> None: qconnect(timer.timeout, on_timer) timer.start(150) + def download() -> None: + mw._close_for_full_download() + mw.col.full_download(mw.pm.sync_auth()) + def on_future_done(fut: Future) -> None: timer.stop() mw.col.reopen(after_full_sync=True) @@ -194,7 +196,7 @@ def full_download(mw: aqt.main.AnkiQt, on_done: Callable[[], None]) -> None: return on_done() mw.taskman.with_progress( - lambda: mw.col.full_download(mw.pm.sync_auth()), + download, on_future_done, label=tr(TR.SYNC_DOWNLOADING_FROM_ANKIWEB), )