Make it possible to delete revisions in the history dialog
Some checks failed
CI / test (push) Successful in 4m57s
Lint / test (push) Failing after 31s
Trivy / test (push) Successful in 24s

This commit is contained in:
Miguel Jacq 2025-11-24 10:56:04 +11:00
parent 4ec8c64994
commit 807a21e9af
Signed by: mig5
GPG key ID: 59B3F0C24135C6A9
4 changed files with 46 additions and 4 deletions

View file

@ -1,3 +1,7 @@
# 0.4.5
* Make it possible to delete revisions
# 0.4.4.1
* Adjust some widget heights/settings text wrap

View file

@ -369,6 +369,17 @@ class DBManager:
(version_id, date_iso),
)
def delete_version(self, *, version_id: int) -> bool | None:
"""
Delete a specific version by version_id.
"""
cur = self.conn.cursor()
row = cur.execute(
"DELETE FROM versions WHERE id=?;",
(version_id,),
)
return True
# ------------------------- Export logic here ------------------------#
def get_all_entries(self) -> List[Entry]:
"""

View file

@ -13,6 +13,7 @@ from PySide6.QtWidgets import (
QMessageBox,
QTextBrowser,
QTabWidget,
QAbstractItemView,
)
from . import strings
@ -82,6 +83,7 @@ class HistoryDialog(QDialog):
# Top: list of versions
top = QHBoxLayout()
self.list = QListWidget()
self.list.setSelectionMode(QAbstractItemView.ExtendedSelection)
self.list.setMinimumSize(500, 650)
self.list.currentItemChanged.connect(self._on_select)
top.addWidget(self.list, 1)
@ -104,9 +106,12 @@ class HistoryDialog(QDialog):
row.addStretch(1)
self.btn_revert = QPushButton(strings._("history_dialog_revert_to_selected"))
self.btn_revert.clicked.connect(self._revert)
self.btn_delete = QPushButton(strings._("history_dialog_delete"))
self.btn_delete.clicked.connect(self._delete)
self.btn_close = QPushButton(strings._("close"))
self.btn_close.clicked.connect(self.reject)
row.addWidget(self.btn_revert)
row.addWidget(self.btn_delete)
row.addWidget(self.btn_close)
root.addLayout(row)
@ -145,20 +150,24 @@ class HistoryDialog(QDialog):
@Slot()
def _on_select(self):
selected_items = self.list.selectedItems()
item = self.list.currentItem()
if not item:
if not item or len(selected_items) > 1:
self.preview.clear()
self.diff.clear()
self.btn_revert.setEnabled(False)
return
sel_id = item.data(Qt.UserRole)
sel = self._db.get_version(version_id=sel_id)
self.preview.setMarkdown(sel["content"])
# Diff vs current (textual diff)
cur = self._db.get_version(version_id=self._current_id)
self.diff.setHtml(_colored_unified_diff_html(cur["content"], sel["content"]))
# Enable revert only if selecting a non-current version
# Enable revert and delete buttons only if selecting a non-current version
self.btn_revert.setEnabled(sel_id != self._current_id)
self.btn_delete.setEnabled(sel_id != self._current_id)
@Slot()
def _revert(self):
@ -175,3 +184,19 @@ class HistoryDialog(QDialog):
)
return
self.accept()
@Slot()
def _delete(self):
selected_items = self.list.selectedItems()
for item in selected_items:
sel_id = item.data(Qt.UserRole)
if sel_id == self._current_id:
return
try:
self._db.delete_version(version_id=sel_id)
except Exception as e:
QMessageBox.critical(
self, strings._("history_dialog_delete_failed"), str(e)
)
return
return self._load_versions()

View file

@ -22,7 +22,7 @@
"key_changed_explanation": "The notebook was re-encrypted with the new key!",
"error": "Error",
"success": "Success",
"close": "Close",
"close": "&Close",
"find": "Find",
"file": "File",
"locale": "Language",
@ -81,8 +81,10 @@
"find_bar_match_case": "Match case",
"history_dialog_preview": "Preview",
"history_dialog_diff": "Diff",
"history_dialog_revert_to_selected": "Revert to selected",
"history_dialog_revert_to_selected": "&Revert to selected",
"history_dialog_revert_failed": "Revert failed",
"history_dialog_delete": "&Delete revision",
"history_dialog_delete_failed": "Could not delete revision",
"key_prompt_enter_key": "Enter key",
"lock_overlay_locked_due_to_inactivity": "Locked due to inactivity",
"lock_overlay_unlock": "Unlock",