aboutsummaryrefslogtreecommitdiffstats
path: root/sb_builder
diff options
context:
space:
mode:
Diffstat (limited to 'sb_builder')
-rw-r--r--sb_builder/hints_tab.py30
-rw-r--r--sb_builder/mainwindow.py1
2 files changed, 21 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):
diff --git a/sb_builder/mainwindow.py b/sb_builder/mainwindow.py
index 0331eb9..eeac61a 100644
--- a/sb_builder/mainwindow.py
+++ b/sb_builder/mainwindow.py
@@ -337,6 +337,7 @@ class MainWindow(QMainWindow):
if self.hints_tab is None:
self.hints_tab = HintsTab(self.remote, self.cfg)
self.hints_tab.start_requested.connect(lambda args: self.open_jobs().start(*args))
+ self.hints_tab.result_ready.connect(self.show_hint_result)
self.tabs.addTab(self.hints_tab, "Hints")
self.hints_tab.reload()
if name: