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):
|
class QueuePage(QWidget):
|
||||||
"""Live view of transfer jobs with progress, cancel, and delete."""
|
"""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):
|
def __init__(self, parent=None):
|
||||||
super().__init__(parent)
|
super().__init__(parent)
|
||||||
self.queue = None
|
self.queue = None
|
||||||
@@ -2331,11 +2339,11 @@ class QueuePage(QWidget):
|
|||||||
self.clear_finished_btn.clicked.connect(self._clear_finished)
|
self.clear_finished_btn.clicked.connect(self._clear_finished)
|
||||||
header.addWidget(self.clear_finished_btn)
|
header.addWidget(self.clear_finished_btn)
|
||||||
layout.addLayout(header)
|
layout.addLayout(header)
|
||||||
self.table = QTableWidget(0, 6)
|
self.table = QTableWidget(0, 7)
|
||||||
self.table.setHorizontalHeaderLabels(["Item", "Status", "Progress", "Destination", "", ""])
|
self.table.setHorizontalHeaderLabels(["Item", "Type", "Status", "Progress", "Destination", "", ""])
|
||||||
self.table.horizontalHeader().setSectionResizeMode(0, QHeaderView.Stretch)
|
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(5, QHeaderView.ResizeToContents)
|
||||||
|
self.table.horizontalHeader().setSectionResizeMode(6, QHeaderView.ResizeToContents)
|
||||||
self.table.verticalHeader().setVisible(False)
|
self.table.verticalHeader().setVisible(False)
|
||||||
layout.addWidget(self.table)
|
layout.addWidget(self.table)
|
||||||
|
|
||||||
@@ -2346,44 +2354,49 @@ class QueuePage(QWidget):
|
|||||||
q.job_finished.connect(self._on_updated)
|
q.job_finished.connect(self._on_updated)
|
||||||
q.job_removed.connect(self._on_removed)
|
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):
|
def _on_added(self, job):
|
||||||
row = self.table.rowCount()
|
row = self.table.rowCount()
|
||||||
self.table.insertRow(row)
|
self.table.insertRow(row)
|
||||||
self.table.setItem(row, 0, QTableWidgetItem(job["title"]))
|
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 = QProgressBar()
|
||||||
bar.setRange(0, 1000)
|
bar.setRange(0, 1000)
|
||||||
bar.setValue(int(job["progress"] * 1000))
|
bar.setValue(int(job["progress"] * 1000))
|
||||||
self.table.setCellWidget(row, 2, bar)
|
self.table.setCellWidget(row, 3, bar)
|
||||||
self.table.setItem(row, 3, QTableWidgetItem(job["dest"]))
|
self.table.setItem(row, 4, QTableWidgetItem(job["dest"]))
|
||||||
cancel = QPushButton("Cancel")
|
cancel = QPushButton("Cancel")
|
||||||
cancel.clicked.connect(lambda _=False, jid=job["id"]: self.queue.cancel(jid))
|
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 = QPushButton("✕")
|
||||||
delete.setToolTip("Remove this entry from the queue history")
|
delete.setToolTip("Remove this entry from the queue history")
|
||||||
delete.setFixedWidth(28)
|
delete.setFixedWidth(28)
|
||||||
delete.clicked.connect(lambda _=False, jid=job["id"]: self.queue.remove(jid))
|
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
|
self._rows[job["id"]] = row
|
||||||
|
|
||||||
def _on_updated(self, job):
|
def _on_updated(self, job):
|
||||||
row = self._rows.get(job["id"])
|
row = self._rows.get(job["id"])
|
||||||
if row is None:
|
if row is None:
|
||||||
return
|
return
|
||||||
status_item = self.table.item(row, 1)
|
status_item = self.table.item(row, 2)
|
||||||
if status_item is not None:
|
if status_item is not None:
|
||||||
status_item.setText(self._status_text(job))
|
status_item.setText(self._status_text(job))
|
||||||
bar = self.table.cellWidget(row, 2)
|
bar = self.table.cellWidget(row, 3)
|
||||||
if isinstance(bar, QProgressBar):
|
if isinstance(bar, QProgressBar):
|
||||||
if job["progress"] < 0:
|
if job["progress"] < 0:
|
||||||
bar.setRange(0, 0)
|
bar.setRange(0, 0)
|
||||||
else:
|
else:
|
||||||
bar.setRange(0, 1000)
|
bar.setRange(0, 1000)
|
||||||
bar.setValue(int(job["progress"] * 1000))
|
bar.setValue(int(job["progress"] * 1000))
|
||||||
cancel = self.table.cellWidget(row, 4)
|
cancel = self.table.cellWidget(row, 5)
|
||||||
if isinstance(cancel, QPushButton):
|
if isinstance(cancel, QPushButton):
|
||||||
cancel.setEnabled(job["status"] in ("queued", "running"))
|
cancel.setEnabled(job["status"] in ("queued", "running"))
|
||||||
delete = self.table.cellWidget(row, 5)
|
delete = self.table.cellWidget(row, 6)
|
||||||
if isinstance(delete, QPushButton):
|
if isinstance(delete, QPushButton):
|
||||||
delete.setEnabled(job["status"] not in ("running", "cancelling"))
|
delete.setEnabled(job["status"] not in ("running", "cancelling"))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user