Add trove auto save function

This commit is contained in:
Andrew Mulbrook 2026-03-26 16:08:10 -05:00
parent 01e9780bb8
commit a67b9c48c2
2 changed files with 41 additions and 14 deletions

View file

@ -22,20 +22,20 @@ class TroveMainWindow(QMainWindow):
self.setWindowTitle("Trove") self.setWindowTitle("Trove")
# ── Toolbar ── # ── Toolbar ──
toolbar = QToolBar("Main") # toolbar = QToolBar("Main")
toolbar.setObjectName("maintoolbar") # toolbar.setObjectName("maintoolbar")
toolbar.setMovable(False) # toolbar.setMovable(False)
self.addToolBar(toolbar) # self.addToolBar(toolbar)
#
new_action = QAction("New", self) # new_action = QAction("New", self)
new_action.setShortcut(QKeySequence.StandardKey.New) # new_action.setShortcut(QKeySequence.StandardKey.New)
toolbar.addAction(new_action) # toolbar.addAction(new_action)
#
save_action = QAction("Save", self) # save_action = QAction("Save", self)
save_action.setShortcut(QKeySequence.StandardKey.Save) # save_action.setShortcut(QKeySequence.StandardKey.Save)
toolbar.addAction(save_action) # toolbar.addAction(save_action)
#
toolbar.addSeparator() # toolbar.addSeparator()
# ── Central layout ── # ── Central layout ──
central = QWidget() central = QWidget()

View file

@ -1,5 +1,6 @@
"""Tool Supporting Basic Editor Functions""" """Tool Supporting Basic Editor Functions"""
from typing import cast, Protocol from typing import cast, Protocol
from PySide6.QtCore import QTimer
from PySide6.QtWidgets import QTextEdit, QVBoxLayout from PySide6.QtWidgets import QTextEdit, QVBoxLayout
import trovedb.trove as tr import trovedb.trove as tr
@ -16,7 +17,33 @@ class ToolBasicEditor(Tool):
self._text_edit = QTextEdit() self._text_edit = QTextEdit()
layout.addWidget(self._text_edit) layout.addWidget(self._text_edit)
self._content_dirty = False
self._auto_save_timer = QTimer(self)
self._auto_save_timer.setSingleShot(True)
self._auto_save_timer.setInterval(2000) # 2 seconds after typing stops
self._auto_save_timer.timeout.connect(self._perform_auto_save)
self._text_edit.textChanged.connect(self._schedule_auto_save)
self.refresh() self.refresh()
def refresh(self): def refresh(self):
self._text_edit.setPlainText(self.note.read_content().decode("utf-8")) self._text_edit.setPlainText(self.note.read_content().decode("utf-8"))
self._content_dirty = False
def _schedule_auto_save(self):
self._content_dirty = True
self._auto_save_timer.stop()
self._auto_save_timer.start()
def _perform_auto_save(self):
if self._content_dirty:
content = self._text_edit.toPlainText().encode("utf-8")
self.note.write_content(content)
self._content_dirty = False
def closeEvent(self, event):
if self._content_dirty:
self._perform_auto_save()
super().closeEvent(event)