From df127b1af7ee87ca816aae90a158b817972a557d Mon Sep 17 00:00:00 2001 From: Taylor Obyen <162023405+taylorobyen@users.noreply.github.com> Date: Wed, 25 Sep 2024 06:21:59 -0400 Subject: [PATCH] Add revert to backup option to file menu (#3434) * Add revert to backup context item * Fix contributors a new way * Change relative time to filename * Update ftl/qt/qt-accel.ftl (dae) --- CONTRIBUTORS | 2 +- ftl/qt/qt-accel.ftl | 1 + ftl/qt/qt-misc.ftl | 2 +- qt/aqt/about.py | 1 + qt/aqt/forms/main.ui | 6 +++++ qt/aqt/main.py | 58 ++++++++++++++++++++++++++++++++------------ 6 files changed, 53 insertions(+), 17 deletions(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 7f6ab57ef..862c332c5 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -191,7 +191,7 @@ Ben Nguyen <105088397+bpnguyen107@users.noreply.github.com> Themis Demetriades Luke Bartholomew Gregory Abrasaldo -Taylor Obyen +Taylor Obyen Kris Cherven twwn diff --git a/ftl/qt/qt-accel.ftl b/ftl/qt/qt-accel.ftl index d04529785..60dc6a23e 100644 --- a/ftl/qt/qt-accel.ftl +++ b/ftl/qt/qt-accel.ftl @@ -43,3 +43,4 @@ qt-accel-reset-zoom = &Reset Zoom qt-accel-zoom-editor-in = Zoom Editor &In qt-accel-zoom-editor-out = Zoom Editor &Out qt-accel-create-backup = Create &Backup +qt-accel-load-backup = &Revert to Backup diff --git a/ftl/qt/qt-misc.ftl b/ftl/qt/qt-misc.ftl index fc31a78bb..1f13b1c02 100644 --- a/ftl/qt/qt-misc.ftl +++ b/ftl/qt/qt-misc.ftl @@ -38,7 +38,7 @@ qt-misc-please-select-1-card = (please select 1 card) qt-misc-please-select-a-deck = Please select a deck. qt-misc-please-use-fileimport-to-import-this = Please use File>Import to import this file. qt-misc-processing = Processing... -qt-misc-replace-your-collection-with-an-earlier = Replace your collection with an earlier backup? +qt-misc-replace-your-collection-with-an-earlier = Replace your collection with an earlier backup from { $val }? qt-misc-revert-to-backup = Revert to backup # please do not change the quote character, and please only change the font name if you have confirmed the new name is a valid Windows font qt-misc-segoe-ui = "Segoe UI" diff --git a/qt/aqt/about.py b/qt/aqt/about.py index 25dfa28cb..cf0173592 100644 --- a/qt/aqt/about.py +++ b/qt/aqt/about.py @@ -147,6 +147,7 @@ def show(mw: aqt.AnkiQt) -> QDialog: "Susanna Björverud", "Sylvain Durand", "Tacutu", + "Taylor Obyen", "Timm Preetz", "Timo Paulssen", "Ursus", diff --git a/qt/aqt/forms/main.ui b/qt/aqt/forms/main.ui index b80137aa6..596ea985c 100644 --- a/qt/aqt/forms/main.ui +++ b/qt/aqt/forms/main.ui @@ -75,6 +75,7 @@ + @@ -277,6 +278,11 @@ qt_accel_create_backup + + + qt_accel_load_backup + + diff --git a/qt/aqt/main.py b/qt/aqt/main.py index 58be32fd4..370bb812c 100644 --- a/qt/aqt/main.py +++ b/qt/aqt/main.py @@ -424,32 +424,59 @@ class AnkiQt(QMainWindow): self.pm.remove(self.pm.name) self.refreshProfilesList() - def onOpenBackup(self) -> None: - if not askUser( - tr.qt_misc_replace_your_collection_with_an_earlier(), - msgfunc=QMessageBox.warning, - defaultno=True, - ): - return + def _handle_load_backup_success(self) -> None: + """ + Actions that occur when profile backup has been loaded successfully + """ + if self.state == "profileManager": + self.profileDiag.closeWithoutQuitting() - def doOpen(path: str) -> None: - self._openBackup(path) + self.loadProfile() + + def _handle_load_backup_failure(self, error: Exception) -> None: + """ + Actions that occur when a profile has loaded unsuccessfully + """ + showWarning(str(error)) + if self.state != "profileManager": + self.loadProfile() + + def onOpenBackup(self) -> None: + + def do_open(path: str) -> None: + if not askUser( + tr.qt_misc_replace_your_collection_with_an_earlier( + os.path.basename(path) + ), + msgfunc=QMessageBox.warning, + defaultno=True, + ): + return + + showInfo(tr.qt_misc_automatic_syncing_and_backups_have_been()) + + # Collection is still loaded if called from main window, so we unload. This is already + # unloaded if called from the ProfileManager window. + if self.col: + self.unloadProfile(lambda: self._start_restore_backup(path)) + return + + self._start_restore_backup(path) getFile( - self.profileDiag, + self.profileDiag if self.state == "profileManager" else self, tr.qt_misc_revert_to_backup(), - cb=doOpen, # type: ignore + cb=do_open, # type: ignore filter="*.colpkg", dir=self.pm.backupFolder(), ) - def _openBackup(self, path: str) -> None: + def _start_restore_backup(self, path: str): self.restoring_backup = True - showInfo(tr.qt_misc_automatic_syncing_and_backups_have_been()) import_collection_package_op( - self, path, success=self.onOpenProfile - ).run_in_background() + self, path, success=self._handle_load_backup_success + ).failure(self._handle_load_backup_failure).run_in_background() def _on_downgrade(self) -> None: self.progress.start() @@ -1349,6 +1376,7 @@ title="{}" {}>{}""".format( qconnect(m.actionImport.triggered, self.onImport) qconnect(m.actionExport.triggered, self.onExport) qconnect(m.action_create_backup.triggered, self.on_create_backup_now) + qconnect(m.action_open_backup.triggered, self.onOpenBackup) qconnect(m.actionExit.triggered, self.close) # Help