Commit Graph

37 Commits

Author SHA1 Message Date
Chubby Granny Chaser 0458a93b60 feat: add friends window and review replies (#2301)
* fix: make onInAppAchievementUnlocked optional in renderer declaration and add runtime check for safe handling

* feat: add friends window and review replies

* style: format friends window styles

* feat: refine friends window and review UI

* feat: add friends window review replies

* style: format friend request event files

* chore: sync proto submodule

---------

Co-authored-by: Hachi-R <drive8hachi@gmail.com>
Co-authored-by: Chubby Granny Chaser <hydralauncher@proton.me>
Co-authored-by: Helio Kroger <me@heliokroger.com>
2026-06-12 18:04:13 +01:00
João Lucas 113b8e3f66 fix: wait for JS downloader completion (#2229)
Co-authored-by: Chubby Granny Chaser <weak.fern2638@heliokroger.com>
2026-06-11 02:21:02 +01:00
Moyase 784cc0af22 feat: add emulator support (#2231)
* feat: add emulator support

* chore: update known binaries and enhance disc sniffing logic

- Changed version flag for known binaries from --version to -version.
- Increased buffer size for disc sniffing from 4MB to 16MB.
- Expanded DiscPlatform type to include ps3.
- Added PS3 markers for improved detection of PS3 discs.
- Adjusted alignment in emulator detail styles for better UI consistency.
- Removed unused rescan button from emulator detail component.

* feat: integrate launchbox support in game catalogue

- Added support for the launchbox shop in the game catalogue, allowing users to fetch and display game details from Launchbox.
- Introduced new interfaces for handling Launchbox game data and assets.
- Updated the catalogue search state to include a mode for modern and classics games, with corresponding UI adjustments.
- Enhanced the game details component to handle Launchbox-specific assets and fallback images.
- Updated translation files to include new keys for game modes.

* chore: update translation files and enhance Launchbox integration

- Added new translation keys for platforms and game details in the translation files.
- Updated the game details and catalogue components to support additional Launchbox-specific fields.
- Enhanced the scanning process to return matched and unmatched game counts.
- Introduced new UI elements for displaying import progress and matching status during ROM imports.
- Refactored related components to improve clarity and maintainability.

* chore: update translation files and enhance emulator functionality

- Added new translation key for missing executable path in the translation files.
- Updated emulator detail component to check for executable existence and display appropriate messages.
- Enhanced ROM folder management by integrating language support in add and rescan functions.
- Improved scanning logic to handle additional file types and ensure better detection of ROM folders.
- Refactored related components for clarity and maintainability.

* chore: enhance classics game support and update translations

- Added new translation keys for disc management and game launch messages.
- Implemented functionality for handling multiple discs in classics games, including selection and management.
- Introduced new event handlers for opening classics games and updating disc selections.
- Enhanced the user interface with a disc selection modal for better user experience.
- Updated library components to support filtering and displaying classics games.

* feat: enhance Launchbox ROM import functionality

- Added a new utility function to strip disc markers from filenames, allowing multi-disc games to be grouped correctly.
- Improved logging for SKU extraction and matching processes during ROM imports, providing better traceability.
- Refactored game matching logic to utilize the new disc marker stripping function, ensuring accurate group key generation for multi-disc titles.
- Updated the import process to handle unmatched groups more effectively, enhancing overall import accuracy.

* chore: remove redundant usage of disc selection in the game settings general

* chore: update translations and enhance emulator detail functionality

- Modified translation keys for game file counts to improve clarity.
- Added new translation keys for executable path updates and scan completion messages.
- Enhanced emulator detail component to provide feedback on executable path changes and scan results.
- Introduced flag icons for regions in the disc selection modal and launchbox details section for better visual representation.
- Updated styles for flag icons and buttons to improve user interface consistency.

* chore: enhance classics onboarding and emulator functionality

- Added new translation keys for the classics onboarding process, improving user guidance.
- Introduced a new modal for classics onboarding, triggered under specific conditions.
- Enhanced emulator functionality by adding a preview feature for executable paths.
- Updated the emulator setup modal to handle executable path previews and improve user experience.
- Refactored related components for better maintainability and clarity.

* chore: update translations and enhance emulator functionality

- Added new translation key for opening disc location in the translation files.
- Modified scan completion message for improved clarity in user feedback.
- Enhanced emulator detection logic to handle executable path validation and session management.
- Improved game details component with a new layout effect for description overflow handling.
- Refactored disc selection modal for better sorting and user experience.

* chore: enhance emulator validation and update translations

- Added a new translation key for invalid emulator executable messages.
- Implemented validation for emulator executable paths to ensure they are valid before proceeding.
- Updated error handling in game launch processes to provide clearer feedback based on specific error codes.
- Refactored related components to improve user experience and maintainability.

* chore: update translations and enhance emulator setup functionality

- Added new translation key for selecting emulator executable in the setup process.
- Modified existing translation keys for improved clarity in user feedback.
- Enhanced the emulator setup modal to include better handling of executable paths and user guidance.
- Introduced new UI elements for displaying emulator and ROM folder information.
- Refactored related components for improved maintainability and user experience.

* feat: add user preferences for classics appearance

- Introduced new user preferences for hiding the Hydra Classics bookmark and using a hero layout for classics game pages.
- Added corresponding translation keys for the new settings in the translation files.
- Updated the game details component to conditionally render the classics bookmark based on user preferences.
- Enhanced the settings context to manage the new preferences effectively.

* chore: update translations and enhance RPCS3 emulator functionality

- Introduced a new function to retrieve default sources for RPCS3, enhancing the emulator setup process.
- Updated the emulator setup modal to display the count of registered games, providing clearer context to users.
- Enhanced the logic for handling game paths and title IDs, ensuring better integration with RPCS3's games.yml.
- Refactored related components for improved maintainability and user experience.

* fix: typecheck fix

* chore: update translations and enhance RPCS3 emulator handling

- Added new translation keys for RPCS3 emulator error messages and disc folder addition.
- Improved the logic for handling game launches when RPCS3 is already running, prompting user confirmation.
- Refactored game library and classics game handling to include platform information.
- Enhanced the user interface for adding discs, including support for adding disc folders.
- Cleaned up and removed stale comments in the codebase for better readability.

* feat: enhance game library handling

- Updated translation for the redetect unchanged message to improve clarity.
- Introduced a new function to cache and retrieve platform information for games in the library.
- Enhanced the logic for adding games to the library to utilize cached platform data.
- Improved the UI for displaying platform and emulator information in the game card component.
- Adjusted styles for better layout and visual consistency in the game details and library components.

* fix: update translations and enhance game context menu

- Updated translation keys for game-related messages to improve clarity.
- Added confirmation modal for RPCS3 emulator when already running, enhancing user experience.
- Refactored game context menu actions to include new handlers for RPCS3 launch confirmation.
- Improved styling for catalogue mode toggle buttons for better visual consistency.
- Adjusted layout and styles in game details and library components for improved usability.

* feat: update profile endpoints to display launchbox games in currentGame and recentGames, update profile to display both steam and launchbox games in 1 tab 'library'

* feat: enhance user profile and library functionality

- Updated user profile context to include new methods for fetching user stats and library games with platform filtering.
- Enhanced library component to support filtering by platform and added onboarding modal for classics games.
- Improved translation keys for platform-related strings and ensured proper usage in UI components.
- Refactored sorting and filtering logic in the library and profile tabs for better user experience.

* fix: refine type definitions in filter dropdown

- Refined type definition for FilterIcon to use ReactNode for better type safety in filter-dropdown component.

* feat: enhance emulator setup and scanning experience

- Added new translation keys for emulator setup and scanning steps to improve user guidance.
- Implemented handling for unmatched files during the scanning process, allowing users to see which files couldn't be matched.
- Enhanced the UI for the emulator setup modal to include download help options and improved layout for better user interaction.
- Refactored components to manage state more effectively during the scanning process, ensuring a smoother user experience.

* style: enhance setup UI

- Improved layout in setup-shell.scss for better spacing and alignment.
- Wrapped hint elements in a new group for improved structure in setup-step-find-emulator.tsx.

* feat: add PS2 memory card save scanning and .psu export

Parse PCSX2 .ps2 memory cards to detect per-game saves, match them to
LaunchBox metadata by SKU, and surface them in a new "Memory Cards"
section on the PS2 emulator settings page. Saves can be exported locally
as standard, re-importable .psu files.

- Port the .ps2 filesystem reader (superblock, two-level FAT, directory
  walk, ECC auto-detect) to TypeScript in
  src/main/services/emulators/ps2-memory-card/, ported from mymc/mymcplus
- Extract game SKUs from save-folder names (BESLES-50009 -> SLES-50009),
  validating against known serial prefixes and skipping system folders
- Add .psu export behind a MemoryCardBackupTarget seam (local now, cloud
  upload can slot in later)
- Store detected saves in a dedicated ps2MemoryCardSaves sublevel, keeping
  them out of the games library
- Share the LaunchBox shop-details lookup between ROM import and the
  memory-card scan
- Add scan/list/forget/export IPC + the Memory Cards settings UI
- Add scripts/inspect-ps2-memcard.cjs to verify parsing and .psu export

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix: extract PS2 save SKU when folder name has a game suffix

PS2 memory card save folders append a game-specific suffix after the
serial (e.g. BASCUS-97481GOWII, BASLUS-20294USER, BESLES-52988XXX), so
anchoring the serial match at the end of the name failed and every save
came back with a null SKU and no LaunchBox match.

Strip the leading B<region> marker only when a serial follows, then match
the serial (4-letter prefix + 5 digits) from the start and ignore the
trailing suffix. Add the suffixed real-world cases to the self-test.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix: don't abort CHD scan on an undecodable hunk

CD-based CHDs include cdfl (CD-FLAC) audio hunks the reader can't decode.
The leading-data scan broke on the first such hunk, so the data track
holding SYSTEM.CNF was never read and SKU extraction returned null (e.g.
Pac-Man World 2). Skip undecodable hunks and keep scanning the data hunks
instead of aborting, bound the scan, and add [chd] diagnostic logs
(header / codecs / decoded / skipped) so future failures are explicit.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix: make the profile "View all" badges modal scrollable

The 400px cap sat on the modal wrapper while overflow-y lived on the
inner unbounded list, so the list never scrolled and the last badge(s)
were clipped with no way to reach them. Move the height bound + scroll
onto the list itself.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat: always show the library category switch and platform filter

The All | PC | Classics switch and the platform filter were gated behind
having classics games, and the selected category was forced to "all"
without them. Always render the controls and honour the selected
category so the switch works even before any classics game exists.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat: PS1 memory cards, save management, and cloud save sync

Extends the classics memory-card feature across PS1 and PS2:

- PS1 (DuckStation) support: a flat 128 KB card parser, .mcs export, and
  DuckStation memcard-dir discovery, mirroring the PS2 path. The Memory
  cards section and scan flow are generalised to be system-aware.
- Memory-card management: auto-prune stale/renamed cards on rescan,
  remove a whole card, collapsible card groups, region flags, and a
  local-library art fallback when the remote shop-details misses a SKU.
- Memory-card writers: import a .psu/.mcs back into a .ps2/.mcd
  (PS2 FAT + ECC, PS1 block chains), with a .hydra-bak safety copy and
  post-write verification. Validated by the inspect-*-memcard self-tests.
- Cloud emulation saves (/profile/emulation-saves): per-game upload,
  list, restore-into-card, delete and rename, gated on a Cloud
  subscription, with a new Cloud saves section on the emulator page.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat: surface per-game emulation saves in the game Hydra Cloud tab

Show a game's PS1/PS2 cloud saves in the game options modal's Hydra Cloud
tab (classics games only; PC games keep the existing artifact panel). Lists
local memory-card saves for the game with a per-save back-up action, the
already-backed-up cloud saves with restore/rename/delete, an empty state when
no saves match, and a deep link to the emulator settings when no cards are
added. Scopes the cloud list by objectId both server-side and client-side.

Also refine the emulation console cards: distinguish "no emulator" (Setup
required) from "no ROM path" (Not detected), reserving "Ready to play" for
when both exist.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat: refine emulation card setup label and per-game cloud empty states

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat: truncate emulator executable path to a single line

Clip the executable path with an ellipsis instead of wrapping, and surface
the full path on hover.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* feat: add library, sources, and source filter to classics catalogue

Give classics catalogue cards a +/added add-to-library button and download
source badges (trimmed to a +N overflow badge on narrow cards), and add the
download sources filter to the classics filter sidebar for parity with modern.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* feat: default classic downloads to ROM folder and auto-link discs

Default the download directory to the emulator's primary ROM folder for
launchbox games, and after a classic game finishes downloading/extracting,
scan the files, extract each disc serial, and link the discs to the game so
it becomes launchable.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix: read classic download default from configured ROM folders

Resolve the default download directory from the emulator config's romFolders
(the store the settings screen manages) instead of the emulator INI's
RecursivePaths, so adding/removing ROM folders updates it and it falls back
to the normal downloads path when none are configured.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* feat: redesign emulator cloud saves with console connector diagram

Add console-backside artwork above the cloud saves cards with
responsive connector lines measured from the live layout, and restyle
each save card to match the updated Figma (art, kebab menu, host/date).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat: add shop switch to header search suggestions

Send the new shop param (steam/launchbox) to the catalogue search
suggestions endpoint, and add a PC/Classics icon toggle in the
suggestions dropdown header to pick which catalogue to search.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* refactor: address sonar findings across emulator services

Reduce cognitive complexity of scan/import/parser/writer functions by
extracting helpers, and apply lint fixes (RegExp.exec, optional chains,
.at(), Math.trunc, String.raw, codePointAt, globalThis, single push,
guard-clause verifies). No behavior change; memcard self-tests pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat: refine emulation settings UI

Add stat icons (gamepad/database/clock) and last-scan caption, surface a
path-missing warning on console cards, neutralize status badges, shrink
console art, compact the memory-card list with a kebab menu, and give the
suggestions shop switch a styled tooltip.

* feat: polish emulator detail layout and responsiveness

- Place executable path edit icon directly after the path text
- Remove version from hero meta and the section synced badge placement
- Pin stat captions to card bottom and fluidly scale stat/folder text
- Collapse memory cards by default on first load

* fix: address greptile review on emulator save paths

- harden RPCS3 relaunch: poll for process exit and escalate to SIGKILL
  instead of a blind 500ms wait, and refuse to launch if the old
  instance is still alive to avoid concurrent save-state writes
- extract PS1 memory-card link offset and free-block mask into named
  constants in types.ts
- replace the unsafe EmulationSaveEmulator casts with a shared runtime
  guard that rejects rpcs3

* fix: show skeleton when switching catalogue modes

Tie loaded results to the mode they were fetched for and render the
skeleton while the active mode differs. Prevents PC games from briefly
rendering with the classics card layout (and vice-versa) during the
debounce and fetch window after a mode switch.

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Helio Kroger <me@heliokroger.com>
2026-06-11 01:19:26 +01:00
Zamitto 384824b16c chore: update upload-build script 2026-05-04 07:26:25 -03:00
Chubby Granny Chaser 4c522c9b81 refactor: align CI and native build with python torrent backend 2026-03-23 23:38:56 +00:00
Chubby Granny Chaser 88bd11bd93 refactor: migrate torrent backend to libtorrent and harden startup recovery 2026-03-22 17:03:02 +00:00
Chubby Granny Chaser c8e368fa8f refactor: replace Python RPC and aria2 with native addon 2026-03-20 11:43:16 +00:00
Zamitto 2179086285 install missing arch package 2025-10-23 16:34:47 -03:00
Zamitto e12fdf8f8f remove js script 2025-10-23 12:45:09 -03:00
Zamitto 9a278dc614 chore: action to update aur 2025-10-23 09:49:30 -03:00
Chubby Granny Chaser e89202f750 feat: adding standalone aria2c 2025-05-13 01:24:29 +01:00
Chubby Granny Chaser e901df9ac7 fix: fixing casing for appimage 2025-05-11 19:04:15 -07:00
Chubby Granny Chaser 43e565bcc9 ci: adding appimage to build 2025-05-11 18:46:15 -07:00
Chubby Granny Chaser f4e710c7d1 fix: fixing ludusavi download 2025-05-12 01:58:29 +01:00
Chubby Granny Chaser cc4aed2e17 fix: fixing date on backup upload 2025-04-18 00:06:30 +01:00
Chubby Granny Chaser d0ac819da5 feat: upgrading ludusavi 2025-04-17 23:27:22 +01:00
Chubby Granny Chaser f4e428a574 feat: upgrading ludusavi 2025-04-17 23:23:06 +01:00
Chubby Granny Chaser c090a27ff3 chore: removing rust rpc 2025-04-15 15:41:08 +01:00
Chubby Granny Chaser 306b49eaf3 fix: merge with ci 2025-04-12 19:58:18 +01:00
Chubby Granny Chaser afa78e4634 feat: removing aria2 2025-04-12 18:16:16 +01:00
Chubby Granny Chaser 1835adf8b4 fix: fixing multiple connections 2025-04-09 07:57:00 +01:00
Hachi-R 90cb35db40 fix: improve aria2x download path detection 2025-02-03 16:50:02 -03:00
Zamitto f6eedde976 chore: update upload-build script 2025-01-28 20:21:22 -03:00
Chubby Granny Chaser 726c753568 feat: adding sentry to renderer 2024-12-31 04:44:05 +00:00
Chubby Granny Chaser 4c6f87f6e7 chore: setting objects to expire in 3 days 2024-12-24 04:33:24 +00:00
Chubby Granny Chaser 87bcfe90fe chore: merging with main 2024-12-23 19:27:57 +00:00
Hachi-R fd5b2e08a5 lint 2024-12-22 06:58:20 -03:00
Hachi-R 1a286df3f7 Merge branch 'main' into feature/seed-completed-downloads 2024-12-22 06:58:03 -03:00
Chubby Granny Chaser 3be9053b76 feat: adding pacman 2024-12-20 17:33:13 +00:00
Chubby Granny Chaser 77e0be8234 ci: testing upload build script 2024-12-10 00:54:35 +00:00
Chubby Granny Chaser 4b93b91373 ci: testing upload build script 2024-12-10 00:20:35 +00:00
Chubby Granny Chaser 639c7ef1e6 ci: testing upload build script 2024-12-10 00:03:14 +00:00
Chubby Granny Chaser 9e73a44426 ci: testing upload build script 2024-12-09 23:14:21 +00:00
Chubby Granny Chaser 2c93312df0 ci: testing upload build script 2024-12-09 23:12:10 +00:00
Chubby Granny Chaser 09cf207ecc ci: testing upload build script 2024-12-09 23:04:37 +00:00
Chubby Granny Chaser 5b104ecb42 ci: testing upload build script 2024-12-09 22:59:40 +00:00
Chubby Granny Chaser 235045dec4 ci: testing upload build script 2024-12-09 22:56:49 +00:00