Skip to content

Controller Mode: Navigation Enhancements, Library UX Improvements, and Bitrate Controls#147

Merged
zortos293 merged 28 commits intoOpenCloudGaming:devfrom
Jayian1890:feature/controller-mode
Mar 19, 2026
Merged

Controller Mode: Navigation Enhancements, Library UX Improvements, and Bitrate Controls#147
zortos293 merged 28 commits intoOpenCloudGaming:devfrom
Jayian1890:feature/controller-mode

Conversation

@Jayian1890
Copy link

@Jayian1890 Jayian1890 commented Mar 16, 2026

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

    • Shoulder button navigation (page-left/page-right) now works consistently across pages.
    • Back button behavior in Controller Mode Library: cancels subcategory navigation before closing the overlay.
    • Controller overlay is now managed safely (back button closes overlay, input is ignored when overlay handles it).
    • Controller input is only routed while not streaming or when overlay/exit prompt is open.
  • Controller mode library UX polish

    • Added session elapsed time display while streaming.
    • Added remaining playtime display and supporting styles.
    • Improved media management UI (thumbnail generation/display for game items).
    • Enhanced library navigation focus behavior when controller mode is active.
  • Bitrate settings improvements

    • Updated max bitrate limits and UI controls to match expected streaming constraints.
    • Ensures bitrate settings are reflected in the stream configuration reliably.

🧪 How to test (Controller Mode)

  1. Enable Controller Mode in Settings.
  2. Connect a gamepad (or use the browser gamepad emulator) and:
    • Verify Left/Right shoulder buttons navigate between pages (Home/Library/Settings).
    • In Library mode, open a category and press Back: it should cancel the category view rather than closing the overlay.
    • Open the controller overlay (Meta/Home button) while streaming and verify back closes it.
    • Check that session elapsed time renders and updates while streaming.
    • Validate that changing bitrate in Settings updates stream rate (verify via diagnostics/stream details).

🧩 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)

--

Screenshot_2026-03-13_at_1 19 45_PM Screenshot_2026-03-13_at_12 35 42_PM

…mic button rendering based on controller type
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@Jayian1890 Jayian1890 marked this pull request as draft March 17, 2026 22:09
@zortos293
Copy link
Collaborator

lmk when this is done then i can merge it 👍

@Jayian1890 Jayian1890 marked this pull request as ready for review March 17, 2026 22:37
@Jayian1890 Jayian1890 marked this pull request as draft March 17, 2026 22:38
@Jayian1890
Copy link
Author

lmk when this is done then i can merge it 👍

It's done

@Jayian1890 Jayian1890 marked this pull request as ready for review March 18, 2026 00:16
@Jayian1890
Copy link
Author

Forgot to sync this last one lol.

@zortos293 zortos293 merged commit a5bc6dc into OpenCloudGaming:dev Mar 19, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants