diff --git a/src/View/MainWindow.py b/src/View/MainWindow.py index bf0a36512ae26e0d712330d58d4ac26819388f8e..edd68cb14dc4de9eb357da5bffe3724cb61b672b 100644 --- a/src/View/MainWindow.py +++ b/src/View/MainWindow.py @@ -18,6 +18,7 @@ import os import sys +import time import logging import subprocess from queue import Queue @@ -611,12 +612,16 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit): self.conf.set_last_study(self._study.filename) def _backup(self): + logger.debug("Backup signal...") if not self.conf.backup_enable: return if self._study is None: return + if self._study.is_saved: + return + old = self._study.filename file_name = "" if old == "" or old is None: @@ -634,7 +639,7 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit): try: sql_request_count = self._study.sql_save_request_count() progress = QProgressDialog( - "Saving...", None, + "Backup...", None, 0, sql_request_count, parent=self ) @@ -673,7 +678,14 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit): res = dlg.exec() if res == QMessageBox.Ok: - self.open_study(self.conf.last_study) + old = self.conf.last_study + file = self.dialog_reopen_study_select_backup( + self.conf.last_study + ) + + self.open_study(file) + self._study.filename = old + self.conf.set_last_study(old) return True elif res == QMessageBox.Open: self.open_model() @@ -681,6 +693,19 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit): elif res == QMessageBox.Cancel: return False + def dialog_reopen_study_select_backup(self, filename): + file = self.conf.last_study + backup = self.conf.last_study + ".backup" + + if os.path.exists(backup): + file_modified_date = time.ctime(os.path.getmtime(file)) + backup_modified_date = time.ctime(os.path.getmtime(backup)) + if backup_modified_date > file_modified_date: + logger.info(f"Select backup ({backup})") + file = backup + + return file + def dialog_close(self, cancel=True): dlg = QMessageBox(self) @@ -811,7 +836,7 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit): dialog.setFileMode(QFileDialog.FileMode.ExistingFile) dialog.setDefaultSuffix(".pamhyr") # dialog.setFilter(dialog.filter() | QtCore.QDir.Hidden) - dialog.setNameFilters(['PamHyr (*.pamhyr)']) + dialog.setNameFilters(['PamHyr (*.pamhyr)', 'PamHyr backup (*.pamhyr.backup)']) dialog.setDirectory(os.path.dirname(self.conf.last_study)) if dialog.exec_():