diff --git a/lib/read.py b/lib/read.py index 1085f7b..ff81dcb 100644 --- a/lib/read.py +++ b/lib/read.py @@ -78,8 +78,8 @@ class EditDialog(QDialog, Ui_Dialog): self.scrollBtn.clicked.connect(self.scrollAction) self.nextBtn.clicked.connect(self.nextAction) self.prevBtn.clicked.connect(self.prevAction) - #self.sessionSignal.connect(self.session.timerAction) - #self.sessionBtn.clicked.connect(self.sessionAction) + # self.sessionSignal.connect(self.session.timerAction) + # self.sessionBtn.clicked.connect(self.sessionAction) self.sessionBtn.clicked.connect(self.session.timerAction) self.paraEdit.verticalScrollBar().valueChanged.connect(self.scrollSlot) # diff --git a/lib/session.py b/lib/session.py index ef4bd1a..d7dc89f 100644 --- a/lib/session.py +++ b/lib/session.py @@ -4,9 +4,9 @@ from PyQt6.QtCore import Qt, QTime, QTimer, pyqtSignal, pyqtSlot from PyQt6.QtGui import ( QStandardItem, QStandardItemModel, + QTextBlockFormat, QTextCursor, QTextDocument, - QTextBlockFormat ) from PyQt6.QtSql import QSqlQuery from PyQt6.QtWidgets import QDialog @@ -65,7 +65,48 @@ class SessionDialog(QDialog, Ui_Dialog): @pyqtSlot() def accept(self) -> None: - print("Accepted") + if not self.sessionStart: + super().accept() + return + + if not self.sessionEnd: + self.sessionEnd = datetime.now() + query = QSqlQuery() + query.prepare( + "INSERT INTO sessions " + "(person_id, start, stop, notes) " + "VALUES (:person_id, :start, :stop, :notes)" + ) + query.bindValue(":person_id", self.person_id) + query.bindValue(":start", self.sessionStart.isoformat()) + query.bindValue(":stop", self.sessionEnd.isoformat()) + query.bindValue(":notes", self.textEdit.toPlainText()) + if not query.exec(): + query_error(query) + session_id = query.lastInsertId() + model = self.wordView.model() + sql = "INSERT INTO session_word (session_id,word_id) VALUES " + parameters = ["(?,?)" for x in range(model.rowCount())] + sql += ", ".join(parameters) + query.prepare(sql) + for row in range(model.rowCount()): + query.addBindValue(session_id) + query.addBindValue(model.item(row).data(SessionDialog.WordIdRole)) + if not query.exec(): + query_error(query) + sql = ( + "INSERT INTO session_block (session_id, section_id, block) VALUES " + ) + parameters = ["(?,?,?)" for x in range(self.blocks.rowCount())] + sql += ",".join(parameters) + query.prepare(sql) + for row in range(self.blocks.rowCount()): + query.addBindValue(session_id) + item = self.blocks.item(row) + query.addBindValue(item.data(SessionDialog.SectionIdRole)) + query.addBindValue(item.data(SessionDialog.BlockRole)) + if not query.exec(): + query_error(query) super().accept() return @@ -133,6 +174,8 @@ class SessionDialog(QDialog, Ui_Dialog): @pyqtSlot(int, int) def addBlock(self, section_id, block) -> None: + if not self.activeBox.isChecked(): + return new_block = QStandardItem() new_block.setData(section_id, SessionDialog.SectionIdRole) new_block.setData(block, SessionDialog.BlockRole) @@ -164,6 +207,9 @@ class SessionDialog(QDialog, Ui_Dialog): blockFormat = QTextBlockFormat() blockFormat.setTextIndent(25.0) self.textBrowser.textCursor().setBlockFormat(blockFormat) - self.textBrowser.textCursor().insertHtml('
'+textBlock.text()+'
') + self.textBrowser.textCursor().insertHtml( + "" + textBlock.text() + "
" + ) self.textBrowser.textCursor().insertBlock() + self.textBrowser.ensureCursorVisible() return diff --git a/main.py b/main.py index f63c148..15c32fc 100755 --- a/main.py +++ b/main.py @@ -192,6 +192,22 @@ SQL_CMDS = [ "(word_id INTEGER REFERENCES words ON DELETE CASCADE, " "section_id INTEGER REFERENCES sections ON DELETE CASCADE, " "block INTEGER NOT NULL, start INTEGER NOT NULL, end INTEGER NOT NULL)", + # + "CREATE TABLE IF NOT EXISTS sessions " + "(session_id INTEGER PRIMARY KEY AUTOINCREMENT, " + "person_id INTEGER REFERENCES people ON DELETE CASCADE, " + "start TEXT DEFAULT '', " + "stop TEXT DEFAULT '', " + "notes TEXT DEFAULT '')", + # + "CREATE TABLE IF NOT EXISTS session_word " + "(session_id INTEGER REFERENCES sessions ON DELETE CASCADE, " + "word_id INTEGER REFERENCES words ON DELETE CASCADE)", + # + "CREATE TABLE IF NOT EXISTS session_block " + "(session_id INTEGER REFERENCES sessions ON DELETE CASCADE, " + "section_id INTEGER REFERENCES sections ON DELETE CASCADE, " + "block INTEGER)", ]