feat(install): "Install all" button for staged packages (#137)#174
Merged
Conversation
…n order Implements #137's install-all request (and completes the WIP trimmed in #173). The Install Package screen gains an "Install all (N)" header button that installs every staged, not-yet-installed package sequentially through the existing readiness-gated install() cascade, in base -> update -> DLC order so an add-on never installs before its base (Sony's installer accepts an update/DLC whose base isn't present yet but then lands nothing). - pkgLibrary.ts: `pkgEntryInstallOrder` (mirrors uploadQueue.installOrderPriority for a PkgEntry) + `installAll` action + `installingAll` state. installAll snapshots the idle, not-installed rows, sorts by order, and awaits each install() (which self-serializes on `installing` and never throws), counting outcomes; one summary bell at the end. No-op if an install is already running. - InstallPackage screen: "Install all (N)" button, shown only when >1 row is installable (a single row already has its own Install button), disabled while any install runs. - pkgLibrary.test.ts: 5 cases pinning pkgEntryInstallOrder (category order, path-hint fallback, category-beats-path, batch sort). - en.ts + i18n-known-missing.json: two new keys, allowlisted for all 17 non-English locales per the coverage gate. Client-only; no payload/engine changes. typecheck + lint + 759 tests + i18n (18 langs) + vite build all green. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Implements #137 — an "Install all" button on the Install Package screen — and completes the WIP that was trimmed in #173.
Today, installing several staged packages means clicking Install on each row and waiting. This adds one button that installs every staged, not-yet-installed package sequentially, in the correct order.
Why the ordering matters
Sony's installer will accept an update or DLC whose base game isn't installed yet — and then land nothing. So a naive "install all" that hit rows in listing order could silently no-op the add-ons.
installAllsorts bypkgEntryInstallOrder(base → update → DLC, from the PARAM.SFO category with a/updates/·/dlc/path-hint fallback for headerless rows), mirroring the existinguploadQueue.installOrderPriority.Changes
state/pkgLibrary.ts—pkgEntryInstallOrderhelper,installAll(host)action,installingAllstate.installAllsnapshots the idle/not-installed rows, sorts them, and awaits each existinginstall()(which self-serializes oninstallingand never throws — a single failure can't abort the batch). One summary bell at the end; each item's own success/failure bell still fires. No-op if an install is already running.screens/InstallPackage/index.tsx— "Install all (N)" header button, shown only when >1 row is installable (a single row already has its own Install button), disabled while any install runs.state/pkgLibrary.test.ts— 5 cases pinningpkgEntryInstallOrder.i18n/locales/en.ts+scripts/i18n-known-missing.json— two new keys, allowlisted for all 17 non-English locales per the coverage gate.Client-only — no payload/engine changes.
Type of Change
Testing
typecheck+lint+ 759 Vitest tests (5 new) + i18n coverage (18 langs) + vite build all green.Closes #137.
🤖 Generated with Claude Code