diff options
Diffstat (limited to 'sb_builder')
| -rw-r--r-- | sb_builder/hints_tab.py | 30 | ||||
| -rw-r--r-- | sb_builder/mainwindow.py | 1 |
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: |
