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 os
import sys import sys
import time
import logging import logging
import subprocess import subprocess
from queue import Queue from queue import Queue
@ -611,12 +612,16 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
self.conf.set_last_study(self._study.filename) self.conf.set_last_study(self._study.filename)
def _backup(self): def _backup(self):
logger.debug("Backup signal...")
if not self.conf.backup_enable: if not self.conf.backup_enable:
return return
if self._study is None: if self._study is None:
return return
if self._study.is_saved:
return
old = self._study.filename old = self._study.filename
file_name = "" file_name = ""
if old == "" or old is None: if old == "" or old is None:
@ -634,7 +639,7 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
try: try:
sql_request_count = self._study.sql_save_request_count() sql_request_count = self._study.sql_save_request_count()
progress = QProgressDialog( progress = QProgressDialog(
"Saving...", None, "Backup...", None,
0, sql_request_count, 0, sql_request_count,
parent=self parent=self
) )
@ -673,7 +678,14 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
res = dlg.exec() res = dlg.exec()
if res == QMessageBox.Ok: 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 return True
elif res == QMessageBox.Open: elif res == QMessageBox.Open:
self.open_model() self.open_model()
@ -681,6 +693,19 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
elif res == QMessageBox.Cancel: elif res == QMessageBox.Cancel:
return False 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): def dialog_close(self, cancel=True):
dlg = QMessageBox(self) dlg = QMessageBox(self)
@ -811,7 +836,7 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
dialog.setFileMode(QFileDialog.FileMode.ExistingFile) dialog.setFileMode(QFileDialog.FileMode.ExistingFile)
dialog.setDefaultSuffix(".pamhyr") dialog.setDefaultSuffix(".pamhyr")
# dialog.setFilter(dialog.filter() | QtCore.QDir.Hidden) # 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)) dialog.setDirectory(os.path.dirname(self.conf.last_study))
if dialog.exec_(): if dialog.exec_():