From f9d9d639ed0b52241feb67c47ee34dda6ce99f26 Mon Sep 17 00:00:00 2001 From: Mathieu Moran Date: Mon, 7 Sep 2026 18:27:43 -0400 Subject: [PATCH] queue: add job Type column (Download/Copy to PSP/PS1 convert/etc.) Add a 'Type' column to the Queue table mapping each job kind to a friendly label, so downloads, copies, PS1 conversions, UMD dumps and save syncs are distinguishable at a glance. --- app/gui.py | 37 +++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/app/gui.py b/app/gui.py index 7db85a7..88ec646 100644 --- a/app/gui.py +++ b/app/gui.py @@ -2319,6 +2319,14 @@ class StorePage(QWidget): class QueuePage(QWidget): """Live view of transfer jobs with progress, cancel, and delete.""" + _KIND_LABELS = { + "download": "Download", + "psp-install": "Copy to PSP", + "ps1-convert": "PS1 convert", + "umd-dump": "UMD dump", + "save-sync": "Save sync", + } + def __init__(self, parent=None): super().__init__(parent) self.queue = None @@ -2331,11 +2339,11 @@ class QueuePage(QWidget): self.clear_finished_btn.clicked.connect(self._clear_finished) header.addWidget(self.clear_finished_btn) layout.addLayout(header) - self.table = QTableWidget(0, 6) - self.table.setHorizontalHeaderLabels(["Item", "Status", "Progress", "Destination", "", ""]) + self.table = QTableWidget(0, 7) + self.table.setHorizontalHeaderLabels(["Item", "Type", "Status", "Progress", "Destination", "", ""]) self.table.horizontalHeader().setSectionResizeMode(0, QHeaderView.Stretch) - self.table.horizontalHeader().setSectionResizeMode(4, QHeaderView.ResizeToContents) self.table.horizontalHeader().setSectionResizeMode(5, QHeaderView.ResizeToContents) + self.table.horizontalHeader().setSectionResizeMode(6, QHeaderView.ResizeToContents) self.table.verticalHeader().setVisible(False) layout.addWidget(self.table) @@ -2346,44 +2354,49 @@ class QueuePage(QWidget): q.job_finished.connect(self._on_updated) q.job_removed.connect(self._on_removed) + @classmethod + def _kind_label(cls, kind): + return cls._KIND_LABELS.get(kind, str(kind or "")) + def _on_added(self, job): row = self.table.rowCount() self.table.insertRow(row) self.table.setItem(row, 0, QTableWidgetItem(job["title"])) - self.table.setItem(row, 1, QTableWidgetItem(self._status_text(job))) + self.table.setItem(row, 1, QTableWidgetItem(self._kind_label(job.get("kind")))) + self.table.setItem(row, 2, QTableWidgetItem(self._status_text(job))) bar = QProgressBar() bar.setRange(0, 1000) bar.setValue(int(job["progress"] * 1000)) - self.table.setCellWidget(row, 2, bar) - self.table.setItem(row, 3, QTableWidgetItem(job["dest"])) + self.table.setCellWidget(row, 3, bar) + self.table.setItem(row, 4, QTableWidgetItem(job["dest"])) cancel = QPushButton("Cancel") cancel.clicked.connect(lambda _=False, jid=job["id"]: self.queue.cancel(jid)) - self.table.setCellWidget(row, 4, cancel) + self.table.setCellWidget(row, 5, cancel) delete = QPushButton("✕") delete.setToolTip("Remove this entry from the queue history") delete.setFixedWidth(28) delete.clicked.connect(lambda _=False, jid=job["id"]: self.queue.remove(jid)) - self.table.setCellWidget(row, 5, delete) + self.table.setCellWidget(row, 6, delete) self._rows[job["id"]] = row def _on_updated(self, job): row = self._rows.get(job["id"]) if row is None: return - status_item = self.table.item(row, 1) + status_item = self.table.item(row, 2) if status_item is not None: status_item.setText(self._status_text(job)) - bar = self.table.cellWidget(row, 2) + bar = self.table.cellWidget(row, 3) if isinstance(bar, QProgressBar): if job["progress"] < 0: bar.setRange(0, 0) else: bar.setRange(0, 1000) bar.setValue(int(job["progress"] * 1000)) - cancel = self.table.cellWidget(row, 4) + cancel = self.table.cellWidget(row, 5) if isinstance(cancel, QPushButton): cancel.setEnabled(job["status"] in ("queued", "running")) - delete = self.table.cellWidget(row, 5) + delete = self.table.cellWidget(row, 6) if isinstance(delete, QPushButton): delete.setEnabled(job["status"] not in ("running", "cancelling"))