gui: switch to Queue tab on PS1 convert; PS1 Category Lite folder

- _on_ps1_convert now opens the Queue tab so the user sees the conversion
  job start when converting from the Library or PS1 tab.
- Add a 'PS1 category (Category Lite)' setting (ps1_category) alongside the
  existing ISO category; PS1 EBOOTs copy to /PSP/GAME/<category>/<ID>/
  when set, matching the ISO category behaviour.
This commit is contained in:
2026-09-07 18:05:53 -04:00
parent f61a77a31f
commit bcc2f4f73c
+16 -3
View File
@@ -1055,7 +1055,7 @@ class SettingsPage(QWidget):
def __init__(self, games_dir, videos_dir, store_dir, ppsspp_dir, cloud_dir, ppsspp_exe, def __init__(self, games_dir, videos_dir, store_dir, ppsspp_dir, cloud_dir, ppsspp_exe,
store_server_url, store_token, store_archive_id, store_archive_sig, store_archive_user, store_server_url, store_token, store_archive_id, store_archive_sig, store_archive_user,
iso_category, ps1_dir, ps1_output_dir, ps1_base_pbp, parent=None): iso_category, ps1_category, ps1_dir, ps1_output_dir, ps1_base_pbp, parent=None):
super().__init__(parent) super().__init__(parent)
outer = QVBoxLayout(self) outer = QVBoxLayout(self)
outer.setContentsMargins(0, 0, 0, 0) outer.setContentsMargins(0, 0, 0, 0)
@@ -1107,6 +1107,9 @@ class SettingsPage(QWidget):
self.iso_category_edit = QLineEdit(iso_category) self.iso_category_edit = QLineEdit(iso_category)
self.iso_category_edit.setPlaceholderText("e.g. Homebrew (blank = ISO root)") self.iso_category_edit.setPlaceholderText("e.g. Homebrew (blank = ISO root)")
form.addRow("ISO category (Category Lite):", self.iso_category_edit) form.addRow("ISO category (Category Lite):", self.iso_category_edit)
self.ps1_category_edit = QLineEdit(ps1_category)
self.ps1_category_edit.setPlaceholderText("e.g. PS1 (blank = PSP/GAME root)")
form.addRow("PS1 category (Category Lite):", self.ps1_category_edit)
self.tabs.addTab(page, "PSP") self.tabs.addTab(page, "PSP")
# -- Cover sources ------------------------------------------------ # # -- Cover sources ------------------------------------------------ #
@@ -1259,6 +1262,9 @@ class SettingsPage(QWidget):
def iso_category(self): def iso_category(self):
return self.iso_category_edit.text().strip() return self.iso_category_edit.text().strip()
def ps1_category(self):
return self.ps1_category_edit.text().strip()
def ps1_dir(self): def ps1_dir(self):
return self.ps1_edit.text().strip() return self.ps1_edit.text().strip()
@@ -3467,6 +3473,7 @@ class MainWindow(QMainWindow):
self._auto_sync_saves = str(self.settings.value("auto_sync_saves", "false")).lower() == "true" self._auto_sync_saves = str(self.settings.value("auto_sync_saves", "false")).lower() == "true"
self._ppsspp_exe = str(self.settings.value("ppsspp_exe", "") or "") self._ppsspp_exe = str(self.settings.value("ppsspp_exe", "") or "")
self._iso_category = str(self.settings.value("iso_category", "") or "") self._iso_category = str(self.settings.value("iso_category", "") or "")
self._ps1_category = str(self.settings.value("ps1_category", "") or "")
self._ps1_dir = self._first_existing(config.PS1_ROOTS) or str(self.settings.value("ps1_dir", "") or "") self._ps1_dir = self._first_existing(config.PS1_ROOTS) or str(self.settings.value("ps1_dir", "") or "")
self._ps1_output_dir = str(self.settings.value("ps1_output_dir", str(config.PS1_OUTPUT_DIR)) or "") self._ps1_output_dir = str(self.settings.value("ps1_output_dir", str(config.PS1_OUTPUT_DIR)) or "")
self._ps1_base_pbp = str(self.settings.value("ps1_base_pbp", "") or "") self._ps1_base_pbp = str(self.settings.value("ps1_base_pbp", "") or "")
@@ -3678,6 +3685,7 @@ class MainWindow(QMainWindow):
self._ppsspp_saves_dir, self._cloud_saves_dir, self._ppsspp_exe, self._ppsspp_saves_dir, self._cloud_saves_dir, self._ppsspp_exe,
self._store_server_url, self._store_token, self._store_archive_id, self._store_server_url, self._store_token, self._store_archive_id,
self._store_archive_sig, self._store_archive_user, self._iso_category, self._store_archive_sig, self._store_archive_user, self._iso_category,
self._ps1_category,
self._ps1_dir, self._ps1_output_dir, self._ps1_base_pbp) self._ps1_dir, self._ps1_output_dir, self._ps1_base_pbp)
self.settings_page.saved.connect(self._on_settings_saved) self.settings_page.saved.connect(self._on_settings_saved)
return self.settings_page return self.settings_page
@@ -3707,6 +3715,7 @@ class MainWindow(QMainWindow):
self._auto_sync_saves = self.settings_page.auto_sync_saves() self._auto_sync_saves = self.settings_page.auto_sync_saves()
self._ppsspp_exe = self.settings_page.ppsspp_exe() self._ppsspp_exe = self.settings_page.ppsspp_exe()
self._iso_category = self.settings_page.iso_category() self._iso_category = self.settings_page.iso_category()
self._ps1_category = self.settings_page.ps1_category()
self._ps1_dir = self.settings_page.ps1_dir() self._ps1_dir = self.settings_page.ps1_dir()
self._ps1_output_dir = self.settings_page.ps1_output_dir() self._ps1_output_dir = self.settings_page.ps1_output_dir()
self._ps1_base_pbp = self.settings_page.ps1_base_pbp() self._ps1_base_pbp = self.settings_page.ps1_base_pbp()
@@ -3719,6 +3728,7 @@ class MainWindow(QMainWindow):
self.settings.setValue("auto_sync_saves", self._auto_sync_saves) self.settings.setValue("auto_sync_saves", self._auto_sync_saves)
self.settings.setValue("ppsspp_exe", self._ppsspp_exe) self.settings.setValue("ppsspp_exe", self._ppsspp_exe)
self.settings.setValue("iso_category", self._iso_category) self.settings.setValue("iso_category", self._iso_category)
self.settings.setValue("ps1_category", self._ps1_category)
self._update_saves_locations() self._update_saves_locations()
self._update_dir_status() self._update_dir_status()
@@ -4124,9 +4134,11 @@ class MainWindow(QMainWindow):
if system == "videos": if system == "videos":
dest_dir = psp_root / "ISO" / "VIDEO" dest_dir = psp_root / "ISO" / "VIDEO"
elif system == "ps1": elif system == "ps1":
# PS1 EBOOTs install as a whole game folder under /PSP/GAME. # PS1 EBOOTs install as a whole game folder under /PSP/GAME
# (optionally nested in a Category Lite folder).
src_folder = Path(item["path"]).parent src_folder = Path(item["path"]).parent
dest_dir = psp_root / "PSP" / "GAME" ps1_cat = "".join(c for c in (self._ps1_category or "").strip() if c not in "/\\")
dest_dir = (psp_root / "PSP" / "GAME" / ps1_cat) if ps1_cat else (psp_root / "PSP" / "GAME")
log.info("copying ps1 game to psp: %s -> %s", src_folder, dest_dir / src_folder.name) log.info("copying ps1 game to psp: %s -> %s", src_folder, dest_dir / src_folder.name)
self.queue.enqueue(transfers.TreeCopySource(str(src_folder)), dest_dir, self.queue.enqueue(transfers.TreeCopySource(str(src_folder)), dest_dir,
{"dest_name": src_folder.name}, item.get("name") or src_folder.name, {"dest_name": src_folder.name}, item.get("name") or src_folder.name,
@@ -4249,6 +4261,7 @@ class MainWindow(QMainWindow):
out_dir = Path(self._ps1_output_dir) if self._ps1_output_dir else Path.cwd() / "ps1_converted" out_dir = Path(self._ps1_output_dir) if self._ps1_output_dir else Path.cwd() / "ps1_converted"
source = transfers.Ps1ConvertSource(self._ps1_base_pbp) source = transfers.Ps1ConvertSource(self._ps1_base_pbp)
self.queue.enqueue(source, out_dir, item, item.get("title") or item["source"], kind="ps1-convert") self.queue.enqueue(source, out_dir, item, item.get("title") or item["source"], kind="ps1-convert")
self.tabs.setCurrentWidget(self.queue_page)
def _on_queue_job_done(self, job): def _on_queue_job_done(self, job):
if self._closing: if self._closing: