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