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.
This commit is contained in:
+25
-12
@@ -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"))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user