aboutsummaryrefslogtreecommitdiffstats
path: root/sb_builder/hints_tab.py
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-10-20 11:43:02 +0200
committerDanilo M. <danix@danix.xyz>2026-10-20 11:43:02 +0200
commit5be93186f2a8ee04aa1fdc392a7e4bf0f513155e (patch)
treeeeeb4618dad73f51232eaf23d864cb95ab5d8c5f /sb_builder/hints_tab.py
parentdddf9edde7ad89ba358af482e7206749d9e16426 (diff)
downloadsb-builder-5be93186f2a8ee04aa1fdc392a7e4bf0f513155e.tar.gz
sb-builder-5be93186f2a8ee04aa1fdc392a7e4bf0f513155e.zip
Hints: Delete hint acts on the ticked packages, then offers Revert
Rows with only a stanza have no hint and are skipped. The deletes open the same dialog as a hint job: each removed hint's diff and Revert, which had no place in the GUI before. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'sb_builder/hints_tab.py')
-rw-r--r--sb_builder/hints_tab.py30
1 files changed, 20 insertions, 10 deletions
diff --git a/sb_builder/hints_tab.py b/sb_builder/hints_tab.py
index bf2011a..b78ec69 100644
--- a/sb_builder/hints_tab.py
+++ b/sb_builder/hints_tab.py
@@ -38,6 +38,7 @@ HINT_JOBS = ("hint-update", "hint-new")
class HintsTab(QWidget):
start_requested = pyqtSignal(list) # job-start arguments
+ result_ready = pyqtSignal(dict) # {"ok", "failed"} of hint changes made here, for the dialog
def __init__(self, remote, cfg, stanzas=upstream.STANZAS, parent=None):
super().__init__(parent)
@@ -201,17 +202,26 @@ class HintsTab(QWidget):
if pairs:
self.start_requested.emit(["hint-update", *pairs] + (["--no-dl"] if self.no_dl.isChecked() else []))
- def delete(self):
- name = self.current()
- if name and QMessageBox.question(self, "Delete hint", f"Delete the hint of {name}? "
- "(kept as .bak, Revert restores it)") \
- == QMessageBox.StandardButton.Yes:
- self.remote.call(self._changed, "hint-delete", name)
+ def confirm(self, title, text):
+ return QMessageBox.question(self, title, text) == QMessageBox.StandardButton.Yes
- def _changed(self, _data, err):
- if err:
- QMessageBox.warning(self, "Hint", err)
- self.reload()
+ def delete(self):
+ """Delete the hints of the ticked packages, then the dialog to revert them."""
+ ticked = set(self.checked())
+ names = [r["name"] for r in self.rows if r["name"] in ticked and r["hint_path"]]
+ if not names or not self.confirm(
+ "Delete hint", f"Delete the hint of {len(names)} package(s): {', '.join(names)}?\n"
+ "Each is kept as .bak; the next dialog can revert it."):
+ return
+ result = {"ok": [], "failed": []}
+
+ def done(name, err):
+ (result["failed"].append([name, err]) if err else result["ok"].append(name))
+ if len(result["ok"]) + len(result["failed"]) == len(names):
+ self.reload()
+ self.result_ready.emit(result)
+ for name in names:
+ self.remote.call(lambda _d, err, n=name: done(n, err), "hint-delete", name)
class DiffColors(QSyntaxHighlighter):