feat: add "Open in Flashpoint" game action#3845
Merged
Merged
Conversation
Adds a v2 game action that hands a ROM's flashpoint_id to the OS `flashpoint://` protocol handler so the locally installed Flashpoint launcher starts the title. The action only appears when the ROM has a flashpoint_id. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Contributor
Greptile SummaryThis PR adds an Open in Flashpoint action to the v2 interface. The main changes are:
Confidence Score: 4/5The launch URI needs input validation before merging.
frontend/src/v2/composables/useGameActions/index.ts Important Files Changed
Prompt To Fix All With AIFix the following 1 code review issue. Work through them one at a time, proposing concise fixes.
---
### Issue 1 of 1
frontend/src/v2/composables/useGameActions/index.ts:292
**Unvalidated ID Changes Launch URI**
The ROM update API can store any non-empty string in `flashpoint_id`, but this line inserts that value directly into the URI. A stored value such as `game#variant` or `game?variant` is parsed as a fragment or query, so Flashpoint receives the wrong identifier and the enabled action silently fails. Validate the value as a UUID before exposing and launching this action.
Reviews (1): Last reviewed commit: 23ff801 | Re-trigger Greptile |
The ROM update API accepts any non-empty string in flashpoint_id. A value containing `#` or `?` would be parsed as a URI fragment/query, launching the wrong title. Gate both the action's visibility and the launch on a UUID match. Co-Authored-By: Claude Opus 4.8 (1M context) <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
Explain the changes or enhancements you are proposing with this pull request.
Adds a v2 game action, Open in Flashpoint, that launches a title in the locally installed Flashpoint launcher.
When a ROM has a
flashpoint_id(its Flashpoint game UUID, already present on the ROM schema), the action hands that UUID to the OSflashpoint://<uuid>protocol handler. The launch uses a synthesized, self-removing<a>element rather thanwindow.open, so no blank tab is left behind when the handler takes over. The button/menu item only appears when the ROM actually has aflashpoint_id.Changes:
useGameActionscomposable: newcanOpenInFlashpointgate andopenInFlashpoint()handler.GameActionBtn.vue: new"flashpoint"action + preset (mdi-rocket-launch-outline).GameActions.vueandGameActionsList.vue: render the action when available.rom.open-in-flashpointkey to all 18 locales (English value; translators can localize later).No backend changes are needed;
flashpoint_idis already exposed on the ROM schema.This is a frontend-v2-only feature, so it is gated behind the v2 UI.
AI assistance disclosure: This PR was implemented with AI assistance (Claude Code). The feature was reimplemented against the latest
master, and all code and locale entries were AI-generated and human-reviewed.Checklist
Please check all that apply.
Screenshots (if applicable)
🤖 Generated with Claude Code