Merge Latest Desktop Into iOS for compatibility#384
Conversation
Show a short on-stream message when Anti-AFK is toggled during streaming so users get feedback even when the persistent indicator is disabled. Skip redundant 'on' ack when the badge is visible. Fixes #331 Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(.gitignore): add .serena/ to ignore list * Merge branch 'OpenCloudGaming:dev' into dev * feat(controller): enhance game hub with media captures and session metadata * refactor(ControllerLibraryPage): simplify game variant and session state logic; update styles for responsiveness * Merge branch 'OpenCloudGaming:dev' into dev * Merge branch 'OpenCloudGaming:dev' into dev * Merge branch 'OpenCloudGaming:dev' into dev * Merge branch 'OpenCloudGaming:dev' into dev * Implement enhanced fullscreen management across the application - Introduced a new state variable `rendererControlledFullscreen` in the main process to manage fullscreen behavior more effectively. - Updated IPC handlers to synchronize fullscreen state changes between the main and renderer processes. - Added a new state variable `sessionFullscreen` in the App component to track fullscreen status and ensure proper handling of fullscreen requests. - Refactored fullscreen handling in the StreamView component to utilize the new `isFullscreen` prop, improving clarity and maintainability. - Enhanced error handling for fullscreen requests in the GfnWebRtcClient to support both native and standard fullscreen APIs. These changes improve user experience by providing more consistent fullscreen behavior and better state management. * Enhance fullscreen and pointer lock management in the application - Improved fullscreen handling in the App component to include error handling for both native and standard fullscreen requests. - Updated StreamView component to support pointer lock release callbacks, enhancing user experience during pointer lock transitions. - Introduced keyboard lock management in GfnWebRtcClient to prevent unintentional pointer lock release when exiting fullscreen. - Added timers for pointer lock retention, ensuring smoother user interactions during pointer lock loss. These changes contribute to a more robust and user-friendly experience when managing fullscreen and pointer lock states. * Implement pointer lock state management and external Escape handling Co-authored-by: Copilot <copilot@github.com> * Merge branch 'dev' into Jayian1890/issue372 * Add setting to allow Escape key to exit fullscreen mode
…376) * fix(.gitignore): add .serena/ to ignore list * Merge branch 'OpenCloudGaming:dev' into dev * feat(controller): enhance game hub with media captures and session metadata * refactor(ControllerLibraryPage): simplify game variant and session state logic; update styles for responsiveness * Merge branch 'OpenCloudGaming:dev' into dev * Merge branch 'OpenCloudGaming:dev' into dev * Merge branch 'OpenCloudGaming:dev' into dev * Merge branch 'OpenCloudGaming:dev' into dev * fix: surface fetch failure cause chain for IPC and logs (#374) - Add shared networkError helpers to walk error.cause with errno metadata - Fold cause into IPC error messages via enrichErrorForIpc in session handlers - Log CreateSession claim/hydrate failures with formatErrorChainForLog - Add unit tests; include networkError.test.ts in npm test Co-authored-by: Cursor <cursoragent@cursor.com>
) * feat(settings): add controller theme customization options - Introduced new settings for controller theme style and color, allowing users to customize the background visuals in controller mode. - Added functions to normalize and clamp theme color values. - Updated the SettingsManager to handle migrations for the new theme settings. - Enhanced the ControllerLibraryPage to utilize the new theme settings for improved visual consistency. - Updated styles to reflect the new theme options, including multiple preset styles. This enhancement improves user experience by providing more personalization options for the controller interface. * refactor(styles): update theme colors in CSS for improved consistency - Replaced hardcoded color values with theme-based RGB variables for better customization. - Simplified CSS selectors by removing unnecessary classes and consolidating animations. - Enhanced visual elements in the ControllerLibraryPage to align with the new theme settings. These changes improve the maintainability of the styles and ensure a cohesive look across the application. * feat(styles): implement PS5-style layout and animations for game hub - Added new CSS styles for the PS5-themed games hub, including blurred hero art and a horizontal shelf layout. - Enhanced animations for various components within the XMB wrapper to improve visual transitions. - Introduced new class selectors for game items, categories, and menu tiles to align with the PS5 aesthetic. These changes enhance the user interface and provide a more immersive experience for users navigating the game hub. * feat(controller): enhance ControllerLibraryPage with media navigation and parallax effects - Added new icons for category labels to improve visual representation. - Implemented parallax backdrop tiles for a dynamic background experience. - Enhanced navigation logic to support media browsing alongside games. - Updated state management to handle media selection and transitions effectively. These changes enrich the user interface and provide a more engaging experience while navigating the controller library. * feat(controller): enhance PS5 row navigation and detail rail functionality - Introduced state management for PS5 row navigation, allowing transitions between top, main, and detail views. - Added detail rail items for enhanced media and game interaction, improving user engagement. - Updated navigation logic to support new detail rail interactions, including cycling through items and activating selections. - Enhanced CSS styles for PS5 detail cards, improving visual presentation and responsiveness. These changes provide a more dynamic and immersive experience for users navigating the controller library. * feat(controller): refine PS5 row navigation and CSS styles - Enhanced PS5 row navigation logic to conditionally allow transitions between detail and top views based on active states. - Updated CSS styles for improved visual presentation of detail rails and shelf components, including adjustments to opacity and layout. - Improved responsiveness of shelf track elements to enhance user experience during navigation. These changes contribute to a more intuitive and visually appealing interface for users interacting with the controller library. * feat(controller): update PS5 menu styles and navigation logic - Modified CSS styles for the PS5 menu, enhancing the visual presentation with new background and overlay effects. - Improved navigation logic in the ControllerLibraryPage to better handle transitions between top-level and settings submenus. - Introduced new classes for resume tiles, providing a live snapshot feature for current streaming games. These changes enhance the user experience by creating a more visually appealing and intuitive interface for navigating the controller library. * feat(controller): enhance navigation and sorting in ControllerLibraryPage - Introduced library sorting options, allowing users to sort games by recent playtime, alphabetical order, or favorites. - Updated navigation logic to manage state for spotlight and categories, improving user interaction with the game library. - Enhanced audio feedback for navigation actions with adjusted sound profiles. - Refined CSS styles for better visual presentation and responsiveness of the library interface. These changes improve the overall user experience by providing more intuitive navigation and organization within the controller library. * feat(controller): improve shelf navigation and CSS transitions - Added new properties for lazy-loading shelf art to enhance performance during image rendering. - Implemented a function to compute shelf translation for centering active tiles, improving user experience in dual-shelf navigation. - Updated CSS transitions to utilize a variable for consistent timing across components, ensuring a cohesive feel during interactions. These changes enhance the navigation experience and visual consistency within the ControllerLibraryPage. * feat(controller): implement full-screen game hub styles and navigation logic - Added new CSS styles for the full-screen game hub, enhancing the visual layout and user interaction with game tiles and descriptions. - Introduced state management for the game hub, allowing for focused navigation and improved user experience when browsing games. - Updated the ControllerLibraryPage to integrate the game hub functionality, including handling transitions and focus states. These changes provide a more immersive and visually appealing interface for users navigating the game library. * feat(controller): enhance game hub visuals and screenshot handling - Added new CSS styles for the game hub, improving layout and visual presentation of game posters and screenshots. - Updated the ControllerGameHub component to utilize local screenshot URLs, enhancing the display of game visuals. - Modified the ControllerLibraryPage to manage and load screenshots dynamically when the game hub is opened. These changes provide a more engaging and visually appealing experience for users interacting with the game hub. * feat(controller): enhance cloud session resume functionality and PS5-style loading visuals - Implemented a PS5-style resume tile in the ControllerLibraryPage, allowing users to continue cloud sessions seamlessly. - Added new CSS styles for cloud session visuals, including a resume badge and loading animations. - Updated the ControllerStreamLoading component to utilize PS5-themed loading indicators, improving the user experience during stream setup. - Enhanced logging for session recovery and connection processes to aid in debugging and user feedback. These changes provide a more engaging and visually appealing experience for users resuming cloud sessions and enhance the overall loading experience. * feat(controller): improve session claim handling and deduplication - Introduced a mechanism to deduplicate concurrent claim/resume calls for the same Cloud session, enhancing performance and user experience. - Added a reference to manage in-flight claim promises, ensuring that multiple requests for the same session are handled efficiently. - Updated the claimAndConnectSession function to utilize the new deduplication logic, improving error handling and session management. These changes streamline the session resume process, reducing unnecessary network calls and improving overall responsiveness during session claims. * feat(controller): enhance in-stream menu functionality and visuals - Integrated new in-stream menu features, allowing users to toggle microphone and adjust stream volume directly from the overlay. - Updated the ControllerGameHub and ControllerLibraryPage components to support in-stream navigation and actions, improving user interaction during streaming sessions. - Added CSS styles for the in-stream overlay, ensuring a visually appealing and functional interface that maintains readability of the underlying game. - Implemented state management for restoring navigation in the in-stream menu, enhancing user experience by preserving context during gameplay. These changes provide a more seamless and engaging experience for users interacting with the in-stream features of the application. * refactor(controller): remove unused stream preset functionality and clean up CSS - Eliminated the handleApplyStreamPreset and handleCycleAspectRatio functions from the App component, streamlining the codebase. - Removed the associated stream preset props from the ControllerLibraryPage component, enhancing clarity and reducing complexity. - Cleaned up CSS by removing the .cis-elapsed class, which was no longer in use, contributing to a more maintainable style sheet. These changes improve code readability and maintainability by removing obsolete features and associated styles. * refactor(controller): remove unused remaining playtime functionality and associated styles - Eliminated the formatRemainingPlaytimeFromSubscription function from the App component, simplifying the codebase. - Removed the remainingPlaytimeText prop from the ControllerInStreamShell component, enhancing clarity and reducing complexity. - Cleaned up CSS by deleting the .cis-remaining class, which was no longer in use, contributing to a more maintainable style sheet. These changes improve code readability and maintainability by removing obsolete features and associated styles.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 5ce9fc97ee
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| if (rendererControlledFullscreen) { | ||
| return; |
There was a problem hiding this comment.
Clear renderer-controlled flag on HTML fullscreen exit
The leave-html-full-screen handler exits early whenever rendererControlledFullscreen is true, but that flag is only assigned in the SET_FULLSCREEN/TOGGLE_FULLSCREEN IPC handlers and is not cleared when Chromium exits HTML fullscreen. In Windows flows that entered fullscreen through setFullscreen(true), pressing Escape with allowEscapeToExitFullscreen enabled can leave DOM fullscreen while native fullscreen remains on, desynchronizing fullscreen state until the user toggles it manually.
Useful? React with 👍 / 👎.
| migrated = this.enforceCompatibility(merged) || migrated; | ||
|
|
||
| const themeStyleBefore = merged.controllerThemeStyle; | ||
| const themeColorBefore = { ...merged.controllerThemeColor }; |
There was a problem hiding this comment.
Validate theme color before object spread in migration
Settings migration spreads merged.controllerThemeColor before normalization, so a persisted value like "controllerThemeColor": null throws a runtime TypeError during startup (Cannot convert undefined or null to object). Because this happens while loading settings, a malformed or partially written settings file can block app initialization instead of falling back to defaults.
Useful? React with 👍 / 👎.
This pull request introduces improvements to error handling, fullscreen and pointer lock management, and controller-mode settings in the application. The changes enhance user experience during streaming sessions, provide more robust error reporting, and add new customization options for controller mode. The most notable updates are grouped below.
Fullscreen & Pointer Lock Handling:
opennow-stable/src/main/index.ts,opennow-stable/src/preload/index.ts) [1] [2] [3] [4]rendererControlledFullscreenflag to distinguish between user-initiated and renderer-initiated fullscreen changes, ensuring correct fullscreen state management. (opennow-stable/src/main/index.ts) [1] [2] [3]Error Handling Improvements:
enrichErrorForIpcandformatErrorChainForLogfor IPC error propagation and logging, making error chains more informative and robust. (opennow-stable/src/main/index.ts) [1] [2] [3] [4]Controller Mode & Settings:
controllerThemeStyleandcontrollerThemeColor, with normalization and migration logic for robust persistence. Also introduced a settingallowEscapeToExitFullscreento control Escape key behavior during pointer lock. (opennow-stable/src/main/settings.ts,opennow-stable/src/renderer/src/App.tsx) [1] [2] [3] [4] [5] [6] [7] [8]opennow-stable/src/main/settings.ts) [1] [2]Miscellaneous:
testscript inpackage.jsonto improve test coverage. (opennow-stable/package.json)opennow-stable/src/renderer/src/App.tsx) [1] [2] [3] [4] [5]These changes collectively improve the app's resilience, user experience in streaming and controller modes, and maintainability.## Description