diff --git a/docs/images/queue.jpg b/docs/images/queue.jpg deleted file mode 100644 index 877fa95..0000000 Binary files a/docs/images/queue.jpg and /dev/null differ diff --git a/web/app.js b/web/app.js index 7bb29c8..ff01615 100644 --- a/web/app.js +++ b/web/app.js @@ -353,7 +353,9 @@ function renderGames() { // Prospero) and whether it installs or only downloads is shown on the card. function gameCategory(game) { const policy = sourcePolicy(game); - if (game.patch_title_match === false || (!policy.allow_download && !policy.allow_install)) + // Not supported = PatchDL can't install it. Download-only sources (Shadowmount) + // still offer the download on the card. + if (game.patch_title_match === false || !policy.allow_install) return "blocked"; if (game.downloading || game.resumable || game.downloaded || game.installing || game._jobState) return "updates"; @@ -521,7 +523,9 @@ function primaryButton(game) { if (game.patch_title_match === false) return null; if (regionLockedUpdate(game) && !game.downloading && !game.resumable && !game.downloaded) return null; if (canGetOlderPatch(game)) - return { label: "Old FW patch", action: "guide", variant: "update", hint: `Get ${game.prospero_version} from Prospero Patches, the newest patch that runs on this firmware.` }; + return sourcePolicy(game).allow_install + ? { label: "Old FW patch", action: "guide", variant: "update", hint: `Get ${game.prospero_version} from Prospero Patches, the newest patch that runs on this firmware.` } + : { label: "Old FW download", action: "guide", variant: "update", hint: `Download ${game.prospero_version} from Prospero Patches. PatchDL can't install patches for this game.` }; if (game.resumable && isDownloadAllowed(game)) return { label: "Resume", action: "download", variant: "update", hint: "Continue the paused download where it stopped." }; const hasPatch = game.status === "available" || Boolean(game.manual_version); @@ -581,11 +585,15 @@ function versionsHtml(game) { function statusPill(game) { if (game.installing) return `Installing…`; if (game.status === "checking") return `Checking…`; - if (sourceType(game) === "fake") return `Not supported`; + if (game.status === "blocked" || sourceType(game) === "fake") + return `Not supported`; if (game.patch_title_match === false) return `Title mismatch`; + if (!sourcePolicy(game).allow_install && sourcePolicy(game).allow_download && + (game.status === "available" || game.manual_version || hasOlderPatch(game))) + return `Download only`; if (game.manual_version || hasOlderPatch(game)) return `Via Prospero`; if (regionLockedUpdate(game)) return `Region patch \u00b7 can't install`; - if (game.status === "available" && !isInstallAllowed(game)) + if (game.status === "available" && !sourcePolicy(game).allow_install) return `Download only`; if (game.status === "available") return `Update available`; if (game.status === "incompatible_fw") @@ -595,7 +603,8 @@ function statusPill(game) { } function storagePill(game) { - return hasSharedStorage(game) && !regionLockedUpdate(game) ? `Shared master` : ""; + return hasSharedStorage(game) && sourcePolicy(game).allow_install && !regionLockedUpdate(game) + ? `Shared master` : ""; } function sourcePill(game) { @@ -1451,12 +1460,12 @@ function openGuide(game, fromLink = false) { ` : ""; body = ` -
Sony only offers ${escapeHtml(game.latest_version || "the newest patch")}, which needs FW ${escapeHtml(game.latest_required_fw || "?")}. Prospero Patches still lists ${ver}, which runs on FW ${escapeHtml(game.prospero_required_fw || "?")}.
+Sony only offers ${escapeHtml(game.latest_version || "the newest patch")}, which needs FW ${escapeHtml(game.latest_required_fw || "?")}. Prospero Patches still lists ${ver}, which runs on FW ${escapeHtml(game.prospero_required_fw || "?")}.${sourcePolicy(game).allow_install ? "" : " PatchDL only downloads it: patches for this game can't be installed."}
${handoff}