issue126-backup #198
@ -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())
|
||||
|
@ -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
|
||||
#
|
||||
|
||||
|
@ -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'))
|
||||
|
Loading…
Reference in New Issue
Block a user