issue126-backup #198

Merged
dominik merged 7 commits from issue126-backup into master 2024-01-03 12:30:05 +00:00
3 changed files with 68 additions and 46 deletions
Showing only changes of commit 09f366f0ba - Show all commits

View File

@ -17,24 +17,31 @@ from nmreval.lib.logger import handle_exception
sys.excepthook = handle_exception
from gui_qt import App
from gui_qt.Qt import QtCore
app = App(['Team Rocket FTW!'])
from gui_qt.main.mainwindow import NMRMainWindow
from gui_qt.lib.backup import Backup
from gui_qt.lib.backup import BackupManager
backuping = Backup()
backuping = BackupManager()
pid = os.getpid()
files = backuping.search_unsaved()
print(files)
bck_name = backuping.create_entry(pid)
mplQt = NMRMainWindow(bck_file=bck_name)
print(sys.executable, sys.argv)
timer = QtCore.QTimer()
timer.timeout.connect(mplQt._autosave)
timer.timeout.connect(backuping.update_last_save)
timer.start(3 * 1000)
app.aboutToQuit.connect(backuping.close)
mplQt = NMRMainWindow()
mplQt.show()
sys.exit(app.exec())

View File

@ -1,12 +1,15 @@
import os
import sqlite3
from datetime import datetime
from pathlib import Path
from ..Qt import QtCore
from nmreval.configs import config_paths
from ..Qt import QtCore, QtWidgets
DB_FILE = '/autohome/dominik/nmreval/nmreval.db'
class Backup(QtCore.QObject):
class BackupManager(QtCore.QObject):
def __init__(self):
super().__init__()
self.create_table()
@ -15,18 +18,21 @@ class Backup(QtCore.QObject):
def create_table(self):
con = sqlite3.connect(DB_FILE)
con.execute(
"CREATE TABLE IF NOT EXISTS sessions (pid INTEGER NOT NULL, backup_file TEXT NOT NULL );"
"CREATE TABLE IF NOT EXISTS sessions "
"(pid INTEGER NOT NULL, backup_file TEXT NOT NULL, last_save INTEGER);"
)
def create_entry(self, pid: int):
backup_path = config_paths() / f'{datetime.now().strftime("%Y-%m-%d_%H%M%S")}.nmr'
con = sqlite3.connect(DB_FILE)
con.execute('INSERT INTO sessions VALUES(?, ?);',
(pid, f'/autohome/dominik/nmreval/tmp_{pid}.nmr'))
con.execute('INSERT INTO sessions VALUES(?, ?, ?);',
(pid, str(backup_path), None))
con.commit()
con.close()
self._pid = pid
return
return backup_path
def remove_entry(self, pid: int = None):
if pid is None:
@ -36,10 +42,15 @@ class Backup(QtCore.QObject):
cursor = con.execute('DELETE FROM sessions WHERE pid = ?;', (pid,))
res = cursor.execute('SELECT COUNT(sessions.pid) FROM sessions GROUP BY sessions.pid;')
con.commit()
print(res.fetchall())
remaining_processes = res.fetchone()
con.close()
if remaining_processes is None:
self.delete_db()
def delete_db(self):
Path(DB_FILE).unlink()
def close(self):
self.remove_entry()
@ -61,3 +72,31 @@ class Backup(QtCore.QObject):
return missing_processes
def update_last_save(self):
con = sqlite3.connect(DB_FILE)
con.execute(
'UPDATE sessions SET last_save = ? WHERE pid = ?',
(datetime.now(), self._pid)
)
con.commit()
con.close()
#
# def check_for_backup(self):
# backup_by_date = sorted(backups, key=lambda x: x[1])
# msg = (QtWidgets.QMessageBox()
# , 'Backup found',)
# f'{len(backups)} backup files in directory {backup_by_date[-1][0].parent} found.\n\n'
# f'Latest backup date: {backup_by_date[-1][1]}\n\n'
# f'Press Ok to load, Cancel to delete backup, Close to do nothing.',
# QtWidgets.QMessageBox.Ok | QtWidgets.QMessageBox.Cancel | QtWidgets.QMessageBox.Close
# )
#
# if msg == QtWidgets.QMessageBox.Ok:
# self.management.load_files([str(backup_by_date[-1][0])])
# backup_by_date[-1][0].unlink()
# elif msg == QtWidgets.QMessageBox.Cancel:
# backup_by_date[-1][0].unlink()
# else:
# pass
#

View File

@ -22,7 +22,6 @@ from ..graphs.graphwindow import QGraphWindow
from ..graphs.movedialog import QMover
from ..io.fcbatchreader import QFCReader
from ..io.filedialog import *
from ..lib.backup import Backup
from ..lib.iconloading import make_action_icons, get_icon
from ..lib.pg_objects import RegionItem
from ..lib.starter import make_starter
@ -43,7 +42,7 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
save_ses_sig = QtCore.pyqtSignal(str)
rest_ses_sig = QtCore.pyqtSignal(str)
def __init__(self, parents=None, path=None):
def __init__(self, parents=None, path=None, bck_file=None):
super().__init__(parent=parents)
if path is None:
@ -81,7 +80,7 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
if Updater.get_update_information(os.getenv('APPIMAGE'))[0]:
self.look_for_update()
self.check_for_backup()
# self.check_for_backup()
self.__timer = QtCore.QTimer()
self.__backup_path = config_paths() / f'{datetime.datetime.now().strftime("%Y-%m-%d_%H%M%S")}.nmr'
@ -133,12 +132,15 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
self.fitregion = RegionItem()
self._fit_plot_id = None
self.setGeometry(QtWidgets.QStyle.alignedRect(QtCore.Qt.LeftToRight, QtCore.Qt.AlignCenter,
self.size(), QtWidgets.qApp.desktop().availableGeometry()))
self.setGeometry(QtWidgets.QStyle.alignedRect(
QtCore.Qt.LayoutDirection.LeftToRight,
QtCore.Qt.AlignmentFlag.AlignCenter,
self.size(),
QtWidgets.qApp.desktop().availableGeometry()),
)
self.datawidget.management = self.management
self.integralwidget.management = self.management
# self.drawingswidget.graphs = self.management.graphs
self.ac_group = QtWidgets.QActionGroup(self)
self.ac_group.addAction(self.action_lm_fit)
@ -992,7 +994,7 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
self.editor = QUsermodelEditor(config_paths() / 'usermodels.py', parent=self)
self.editor.modelsChanged.connect(lambda: self.fit_dialog.read_and_load_functions())
self.editor.setWindowModality(QtCore.Qt.ApplicationModal)
self.editor.setWindowModality(QtCore.Qt.WindowModality.ApplicationModal)
self.editor.show()
@QtCore.pyqtSlot(list)
@ -1057,13 +1059,13 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
if self.sender() == self.actionLife:
from ..lib.gol import QGameOfLife
game = QGameOfLife(parent=self)
game.setWindowModality(QtCore.Qt.NonModal)
game.setWindowModality(QtCore.Qt.WindowModality.NonModal)
game.show()
elif self.sender() == self.actionMine:
from ..lib.stuff import QMines
game = QMines(parent=self)
game.setWindowModality(QtCore.Qt.NonModal)
game.setWindowModality(QtCore.Qt.WindowModality.NonModal)
game.show()
else:
@ -1128,32 +1130,6 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow):
self.status.setText('')
def check_for_backup(self):
backups = []
for filename in config_paths().glob('*.nmr'):
try:
backups.append((filename, datetime.datetime.strptime(filename.stem, "%Y-%m-%d_%H%M%S")))
except ValueError:
continue
if backups:
backup_by_date = sorted(backups, key=lambda x: x[1])
msg = QtWidgets.QMessageBox.information(
self, 'Backup found',
f'{len(backups)} backup files in directory {backup_by_date[-1][0].parent} found.\n\n'
f'Latest backup date: {backup_by_date[-1][1]}\n\n'
f'Press Ok to load, Cancel to delete backup, Close to do nothing.',
QtWidgets.QMessageBox.Ok | QtWidgets.QMessageBox.Cancel | QtWidgets.QMessageBox.Close
)
if msg == QtWidgets.QMessageBox.Ok:
self.management.load_files([str(backup_by_date[-1][0])])
backup_by_date[-1][0].unlink()
elif msg == QtWidgets.QMessageBox.Cancel:
backup_by_date[-1][0].unlink()
else:
pass
@QtCore.pyqtSlot(name='on_actionCreate_starter_triggered')
def create_starter(self):
make_starter(os.getenv('APPIMAGE'))