aboutsummaryrefslogtreecommitdiffstats
path: root/sb_builder/mainwindow.py
diff options
context:
space:
mode:
Diffstat (limited to 'sb_builder/mainwindow.py')
-rw-r--r--sb_builder/mainwindow.py43
1 files changed, 38 insertions, 5 deletions
diff --git a/sb_builder/mainwindow.py b/sb_builder/mainwindow.py
index 734811b..e84389c 100644
--- a/sb_builder/mainwindow.py
+++ b/sb_builder/mainwindow.py
@@ -26,6 +26,7 @@ from . import VERSION, config
from .dashboard import Dashboard
from .fmt import job_title
from .jobs import JobsTab
+from .packages import PackagesTab
from .remote import DOWN, MISSING
NOTIFY = "org.freedesktop.Notifications"
@@ -66,6 +67,7 @@ class MainWindow(QMainWindow):
self.notifier = notifier or Notifier(self)
self.notifier.clicked.connect(self.open_job)
self.jobs_tab = None
+ self.packages_tab = None
self.seen = None # job id -> status at the last poll; None before the first
self.online = None # None until the first answer
self.overlays = []
@@ -79,6 +81,8 @@ class MainWindow(QMainWindow):
self.tabs.currentChanged.connect(lambda _i: self.poll_stats())
self.dashboard = Dashboard()
self.dashboard.refresh_btn.clicked.connect(self.poll_stats)
+ self.dashboard.tiles["Packages"].link(self.open_packages)
+ self.dashboard.jobs.link(self.open_jobs)
self.tabs.addTab(self.dashboard, "Dashboard")
self.tabs.tabBar().setTabButton(0, QTabBar.ButtonPosition.RightSide, None)
self.setCentralWidget(self.tabs)
@@ -86,20 +90,24 @@ class MainWindow(QMainWindow):
file_menu = self.menuBar().addMenu("&File")
file_menu.addAction("&Reload config", self.reload_config)
file_menu.addAction("&Quit", self.close).setShortcut("Ctrl+Q")
- self.menuBar().addMenu("&Open").addAction("&Jobs", self.open_jobs)
+ open_menu = self.menuBar().addMenu("&Open")
+ open_menu.addAction("&Packages", self.open_packages)
+ open_menu.addAction("&Jobs", self.open_jobs)
self.conn = QLabel("● connecting")
+ self.key = QLabel()
+ self.key.hide()
self.vm_btn = QPushButton()
self.vm_btn.clicked.connect(lambda: self._vm_do(self.vm_action))
self.vm_btn.hide()
self.job_btn = QPushButton(flat=True)
self.job_btn.clicked.connect(lambda: self.open_job(self.running_id))
self.job_btn.hide()
- for w in (self.job_btn, self.vm_btn, self.conn):
+ for w in (self.job_btn, self.key, self.vm_btn, self.conn):
self.statusBar().addPermanentWidget(w)
self.jobs_timer = QTimer(self, timeout=self.poll_jobs)
- self.stats_timer = QTimer(self, timeout=self.poll_stats)
+ self.stats_timer = QTimer(self, timeout=self.poll_slow)
self._start_timers()
QTimer.singleShot(0, self.poll_jobs)
@@ -112,6 +120,18 @@ class MainWindow(QMainWindow):
def poll_jobs(self):
self.remote.call(self._got_jobs, "jobs")
+ def poll_slow(self):
+ self.poll_stats()
+ if self.online:
+ self.remote.call(self._got_key, "gpg-status")
+
+ def _got_key(self, data, err):
+ if err:
+ return self._failed(err)
+ self.key.setVisible(data["unlocked"] is not None)
+ self.key.setText("🔓 key unlocked" if data["unlocked"] else "🔒 key locked")
+ self.key.setToolTip(f"package signing key {data['key']}")
+
def poll_stats(self):
if self.online and self.tabs.currentWidget() is self.dashboard:
self.remote.call(self._got_stats, "stats")
@@ -154,7 +174,7 @@ class MainWindow(QMainWindow):
self.dashboard.set_stale(None)
self.jobs_timer.setInterval(self.cfg["refresh"]["jobs"] * 1000)
self.remote.call(self._got_version, "version")
- self.poll_stats()
+ self.poll_slow()
if self.vm_woken:
self.vm_woken = False
self.notify("vm-up", f"{self.cfg['vm']['domain']} is up")
@@ -229,12 +249,14 @@ class MainWindow(QMainWindow):
event = END_EVENT.get(j["status"])
if event and prev.get(j["id"], "running") != j["status"]:
self.notify(event, job_title(j), j["id"])
+ if j["kind"] in ("slackrepo", "publish") and self.packages_tab:
+ self.packages_tab.reload() # build state changed
# ── tabs ────────────────────────────────────────────────────────────────
def open_jobs(self):
if self.jobs_tab is None:
- self.jobs_tab = JobsTab(self.remote)
+ self.jobs_tab = JobsTab(self.remote, self.cfg["builds"]["publish"])
self.jobs_tab.refresh_requested.connect(self.poll_jobs)
self.jobs_tab.set_overlays(self.overlays)
self.tabs.addTab(self.jobs_tab, "Jobs")
@@ -242,6 +264,15 @@ class MainWindow(QMainWindow):
self.tabs.setCurrentWidget(self.jobs_tab)
return self.jobs_tab
+ def open_packages(self):
+ if self.packages_tab is None:
+ self.packages_tab = PackagesTab(self.remote)
+ self.packages_tab.start_requested.connect(lambda args: self.open_jobs().start(*args))
+ self.tabs.addTab(self.packages_tab, "Packages")
+ self.packages_tab.reload()
+ self.tabs.setCurrentWidget(self.packages_tab)
+ return self.packages_tab
+
def open_job(self, jid):
self.show()
self.raise_()
@@ -257,6 +288,8 @@ class MainWindow(QMainWindow):
if w is self.jobs_tab:
self.jobs_tab = None
w.stop()
+ if w is self.packages_tab:
+ self.packages_tab = None
w.deleteLater()
def reload_config(self):