pamhyr: Reopen backup if newer than last save in case of crash.

setup.py
Pierre-Antoine Rouby 2024-03-22 10:55:48 +01:00
parent 7f3cf46ee1
commit f8c16d8c7c
1 changed files with 28 additions and 3 deletions

View File

@ -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_():