Controller Mode: Navigation Enhancements, Library UX Improvements, and Bitrate Controls#147
Merged
zortos293 merged 28 commits intoOpenCloudGaming:devfrom Mar 19, 2026
Merged
Conversation
…mic button rendering based on controller type
…ved URL resolution
…and pointer lock release
…r mode and implement related IPC handlers
…ogic in ControllerLibraryPage
… ControllerLibraryPage
…vior in ControllerLibraryPage
Contributor
There was a problem hiding this comment.
Pull request overview
This PR expands “Controller Mode” across the Electron app by adding a controller-first library UI (including playtime/session indicators and media browsing), improving controller input routing/overlay behavior, and introducing cache + media IPC endpoints (plus metadata enrichment/caching on the main process).
Changes:
- Add a full controller-first Library experience (XMB-style UI, playtime/session elapsed, favorites, media browsing).
- Improve controller input routing (overlay handling, back behavior, pausing stream input while overlay is open).
- Add caching/refresh services + IPC endpoints for cache management and media thumbnails/listing; enrich game metadata from GFN.
Reviewed changes
Copilot reviewed 19 out of 21 changed files in this pull request and generated 16 comments.
Show a summary per file
| File | Description |
|---|---|
| opennow-stable/src/shared/ipc.ts | Adds IPC channel constants for fullscreen, cache, and media operations. |
| opennow-stable/src/shared/gfn.ts | Extends shared Settings/GameInfo types and OpenNowApi contract (media, cache, fullscreen). |
| opennow-stable/src/renderer/src/utils/usePlaytime.ts | New localStorage-backed playtime tracking hook + formatting helpers. |
| opennow-stable/src/renderer/src/gfn/webrtcClient.ts | Adds inputPaused and gates input dispatch when paused. |
| opennow-stable/src/renderer/src/controllerNavigation.ts | Adds extensibility hooks for controller events (direction/activate variants) and overlay focus scoping. |
| opennow-stable/src/renderer/src/components/StreamView.tsx | Adds className support and portals exit prompt to document.body. |
| opennow-stable/src/renderer/src/components/SettingsPage.tsx | Adds aspect-ratio UI, controller mode toggles, and “Delete Cache” action. |
| opennow-stable/src/renderer/src/components/ControllerLibraryPage.tsx | New controller-first library UI (categories, settings, media browsing, favorites, session clock). |
| opennow-stable/src/renderer/src/components/ControllerButtons.tsx | New SVG button glyph components for controller hints (Xbox/PS). |
| opennow-stable/src/renderer/src/App.tsx | Integrates controller mode library, overlay routing, playtime, aspect ratio filtering, cache deletion, and game switching flow. |
| opennow-stable/src/preload/index.ts | Wires new IPC endpoints into window.openNow API (fullscreen, media, cache). |
| opennow-stable/src/main/settings.ts | Adds new persisted settings fields (aspect ratio + controller mode options + favorites). |
| opennow-stable/src/main/services/refreshScheduler.ts | New background refresh scheduler for cache refresh cycles. |
| opennow-stable/src/main/services/cacheManager.ts | New file-based cache manager with TTL and delete-all support. |
| opennow-stable/src/main/services/cacheEventBus.ts | New typed-ish EventEmitter for cache refresh lifecycle events. |
| opennow-stable/src/main/index.ts | Adds new IPC handlers (fullscreen, media list/thumb/show, cache ops) and thumbnail generation support. |
| opennow-stable/src/main/gfn/games.ts | Adds caching around game fetches and enriches games with metadata (features/genres/longDescription). |
| opennow-stable/src/main/gfn/cloudmatch.ts | Adds DNS fallback resolution for ICE servers and adjusts claim/resume behavior + logging. |
| opennow-stable/src/main/gfn/auth.ts | Adds Gravatar fallback avatar generation and additional debug logging. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
…limit from settings
…es for enhanced loading experience
… input in ControllerLibraryPage
…ng visuals in controller mode
…tyles in ControllerStreamLoading component
Collaborator
|
lmk when this is done then i can merge it 👍 |
…and improving cache clearing logic
Author
It's done |
Author
|
Forgot to sync this last one lol. |
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.
Summary
This PR delivers a focused set of Controller Mode improvements aimed at making the controller-driven experience feel native, predictable, and responsive when using a gamepad.
✅ What’s included
Controller navigation enhancements
Controller mode library UX polish
Bitrate settings improvements
🧪 How to test (Controller Mode)
🧩 Files touched (high-level)
opennow-stable/src/renderer/src/App.tsx(controller input routing, overlay + back logic)opennow-stable/src/renderer/src/components/ControllerLibraryPage.tsx(UI / elapsed time / remaining playtime)opennow-stable/src/renderer/src/styles.css(new styles for controller mode indicators)--