diff --git a/bin/evaluate.py b/bin/evaluate.py index a9692dd..a0870c3 100755 --- a/bin/evaluate.py +++ b/bin/evaluate.py @@ -2,6 +2,7 @@ import sys import pathlib +import os sys.path.append(str(pathlib.Path(__file__).absolute().parent.parent / 'src')) from nmreval.configs import check_for_config @@ -20,6 +21,18 @@ from gui_qt import App app = App(['Team Rocket FTW!']) from gui_qt.main.mainwindow import NMRMainWindow +from gui_qt.lib.backup import Backup + +backuping = Backup() +pid = os.getpid() + +files = backuping.search_unsaved() +print(files) + +bck_name = backuping.create_entry(pid) +print(sys.executable, sys.argv) + +app.aboutToQuit.connect(backuping.close) mplQt = NMRMainWindow() mplQt.show() diff --git a/src/gui_qt/_py/basewindow.py b/src/gui_qt/_py/basewindow.py index e1534f4..5c0bff4 100644 --- a/src/gui_qt/_py/basewindow.py +++ b/src/gui_qt/_py/basewindow.py @@ -1,8 +1,8 @@ # -*- coding: utf-8 -*- -# Form implementation generated from reading ui file 'src/resources/_ui/basewindow.ui' +# Form implementation generated from reading ui file 'resources/_ui/basewindow.ui' # -# Created by: PyQt5 UI code generator 5.15.9 +# Created by: PyQt5 UI code generator 5.15.10 # # WARNING: Any manual changes made to this file will be lost when pyuic5 is # run again. Do not edit this file unless you know what you are doing. diff --git a/src/gui_qt/lib/backup.py b/src/gui_qt/lib/backup.py new file mode 100644 index 0000000..5fa19ae --- /dev/null +++ b/src/gui_qt/lib/backup.py @@ -0,0 +1,63 @@ +import os +import sqlite3 + +from ..Qt import QtCore + +DB_FILE = '/autohome/dominik/nmreval/nmreval.db' + + +class Backup(QtCore.QObject): + def __init__(self): + super().__init__() + self.create_table() + self._pid = None + + 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 );" + ) + + def create_entry(self, pid: int): + con = sqlite3.connect(DB_FILE) + con.execute('INSERT INTO sessions VALUES(?, ?);', + (pid, f'/autohome/dominik/nmreval/tmp_{pid}.nmr')) + con.commit() + con.close() + self._pid = pid + + return + + def remove_entry(self, pid: int = None): + if pid is None: + pid = self._pid + + con = sqlite3.connect(DB_FILE) + 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()) + + con.close() + + def close(self): + self.remove_entry() + + def search_unsaved(self): + con = sqlite3.connect(DB_FILE) + cursor = con.cursor() + res = cursor.execute('SELECT sessions.pid, sessions.backup_file FROM sessions;') + con.commit() + data = res.fetchall() + con.close() + + missing_processes = [] + + for pid, fname in data: + try: + os.kill(pid, 0) + except ProcessLookupError: + missing_processes.append((pid, fname)) + + return missing_processes + diff --git a/src/gui_qt/main/mainwindow.py b/src/gui_qt/main/mainwindow.py index 87d6e2c..0d5f0c0 100644 --- a/src/gui_qt/main/mainwindow.py +++ b/src/gui_qt/main/mainwindow.py @@ -22,6 +22,7 @@ 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 @@ -54,6 +55,7 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow): self.management = UpperManagement(self) + self.fitlimitvalues = [None, None] self.fitpreview = [] self._fit_plot_id = None @@ -89,7 +91,8 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow): self.fit_timer = QtCore.QTimer() self.fit_timer.setInterval(500) self.fit_timer.timeout.connect( - lambda: self.status.setText(f'Fit running... ({self.management.fitter.step} evaluations)')) + lambda: self.status.setText(f'Fit running... ({self.management.fitter.step} evaluations)') + ) def _init_gui(self): self.setupUi(self) @@ -235,8 +238,6 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow): self.actionNext_window.triggered.connect(lambda: self.area.activateNextSubWindow()) self.actionPrevious.triggered.connect(lambda: self.area.activatePreviousSubWindow()) - self.closeSignal.connect(self.close) - self.action_norm_max.triggered.connect(lambda: self.management.apply('norm', ('max',))) self.action_norm_max_abs.triggered.connect(lambda: self.management.apply('norm', ('maxabs',))) self.action_norm_first.triggered.connect(lambda: self.management.apply('norm', ('first',))) @@ -864,10 +865,6 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow): def item_from_graph(self, item, graph_id): self.management.graphs[graph_id].remove_external(item) - def closeEvent(self, evt): - # self._write_settings() - self.close() - @QtCore.pyqtSlot(int) def request_data(self, idx): idd = self.datawidget.get_indexes(idx=idx-1) @@ -1097,6 +1094,8 @@ class NMRMainWindow(QtWidgets.QMainWindow, Ui_BaseWindow): # remove backup file when closing self.__backup_path.unlink(missing_ok=True) + print('Close me', self.sender()) + super().close() def read_state(self):