100 Commits
Author SHA1 Message Date
Flavio F Lima 59fd6cc394 [Release] 2.22.4 2026-10-14 22:46:00 -03:00
Flavio F Lima 97078f6b81 [Release] 2.22.3 2026-09-16 12:08:39 -03:00
Flávio FearnandFlavio F Lima a7046d7742 fix: clean up release notes generated for the Flathub metainfo (#5896)
Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-09-15 16:41:27 +01:00
Flavio F Lima 6c2bcdfca6 [Release] 2.22.2 2026-09-14 22:15:53 -03:00
Flávio FearnandFlavio F Lima 41eeea8f4c [UI/UX] Improve Environmental Table settings and a few others (#5304)
* feat: open settings file when clicking appname on game settings

* feat: improve environment table UI/UX

* tech: add new BuildEditModal component

* fix: pr comments

* i18n: updated keys

* ui: add disabled styling to add button

* chore: accept empty values

* ui: use proper classnames for buttons

* fix: improve error handling in BulkEditModal and enhance focus styles in EnvVariablesTable

* fix: styles pr comments

* i18n: updated keys

* fix: pr comments and refactor

* fix: Value translation

* fix: cleanup and some fixes

* fix: styling

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-09-15 01:39:08 +01:00
Flávio FearnandFlavio F Lima a508a95eff [Feat] Manage Steam shortcuts via SteamClient API when Steam is running (#5804)
* [Fix] Declare errors array before use in prepareImagesForSteam

* [Fix] Write shortcuts.vdf atomically to avoid corruption

* [Fix] Match Steam shortcuts by launch url instead of title

* [Fix] Use executable directory as Steam shortcut StartDir

* [Feat] Block Steam shortcut changes while Steam is running

* [Feat] Manage Steam shortcuts via SteamClient API when Steam is running

* [Feat] Add Steam shortcuts via the steam url handler when the SteamClient API is unavailable

* [Fix] Improve Steam detection and report removal result to the frontend

* [Fix] Set Steam artwork for shortcuts added via the steam url handler

* [Fix] Read shortcuts from the Steam client stores since GetAllShortcuts was removed

* [Fix] Log when the Steam client debugging interface is not reachable

* [Fix] Read memory info from /proc/meminfo instead of spawning free

* [Fix] Prefer exact title match when searching PCGamingWiki

* [Fix] Never match Steam shortcuts created by other tools

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-09-12 15:04:39 -03:00
Flávio FearnandFlavio F Lima 9d5ed59475 [Fix] Wishlist filter on Deals screen leaves no way out (#5588) (#5602)
* [Fix] Make GOG wishlist a client-side filter (#5588)

Add a new getGogWishlist IPC handler that returns the user's wishlist
product IDs from embed.gog.com, and drop the wishlist=eq:true query from
getGogDiscounts. The frontend will now apply the wishlist filter against
the locally fetched product list instead of re-fetching from GOG, which
prevents the deals grid from emptying when nothing in the wishlist is on
sale.

* ui: keep Deals filter bar visible when wishlist returns no matches (#5588)

Apply wishlistOnly as a client-side filter using the IDs fetched from the
new getGogWishlist endpoint, and render the filter bar whenever filters
are active even if no products match. Previously, toggling "Wishlist
only" triggered a backend refetch that wiped the products list and hid
the filter bar entirely, leaving the user no way to untoggle without
changing the store region.

* ui: ignore wishlist/hide-owned filters while logged out of GOG (#5588)

Both checkboxes are already hidden from the filter bar when the user is
not signed in, but their persisted localStorage state still drove the
filtering and the discounts refetch. That caused two confusing outcomes
after logging out: the grid could appear empty for no visible reason,
and getGogDiscounts was called with hideOwned=true which the backend
silently turns off — adding noise to the logs. Treat both toggles as
off whenever isGogLoggedIn is false while preserving the underlying
preference for the next login.

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-09-12 18:57:28 +01:00
Flávio FearnandFlavio F Lima 995691a064 FIX: Sign Windows binaries during build via SignPath (#5841)
* fix: sign windows binaries during build via SignPath

* feat: publish windows release artifacts directly from appveyor tag builds

* fix: harden signpath module install and add signing timeout

* fix: sign bundled helper binaries as well

* feat: move windows signing and release to github actions

* fix: only sign first party binaries

* fix: use test signing policy for non-tag builds

* fix: set signing policy to release-signing for draft releases

* fix: update GitHub token usage in draft release workflow

* fix: installers slug

* chore: remove testing branch name

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-09-12 03:16:27 +01:00
Flavio F. Lima dbb5f4a500 [FIX] Linux Release workflow 2026-08-08 20:31:52 +01:00
Flavio F. Lima 2cc01fe4c8 [Release] v2.22.1 Hotfix 2026-08-08 20:16:54 +01:00
Flávio FearnandFlavio F Lima 0ee91ab2fe [Fix] Correct reversed A/B and X/Y buttons on Nintendo controllers (#5747)
* [Fix] Correct reversed A/B and X/Y buttons on Nintendo controllers

Nintendo Switch Pro Controllers and Joy-Cons report the Chromium
"standard" mapping by physical position, so the bottom button (labeled
B) is buttons[0] and the right button (labeled A) is buttons[1]. The
input handling treated buttons[0] as the main action and buttons[1] as
back, so pressing A triggered back and B triggered select, contradicting
the on-screen glyphs.

Add a dedicated Switch Pro layout that swaps the face buttons for main
navigation, and make Console Mode's confirm/back button indices
layout-aware so the overlays match too.

* fix: dead code

* fix: address pr comments

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-08-08 20:10:17 +01:00
Flávio FearnandFlavio F Lima 9a1b0af1cf Fix: show Rosetta warning when Rosetta is not installed (#5772)
* fix: show Rosetta warning when Rosetta is not installed

* refactor: simplify rosetta check, spawn failure alone means rosetta is missing

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-08-05 13:52:47 +01:00
Flávio FearnandFlavio F Lima d6366b3408 [Tech] Add Zoom runner to Plausible analytics (#5799)
* [Tech] Add Zoom runner to Plausible analytics

* [Tech] Move Zoom login check into ZoomUser

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-08-03 20:11:14 +01:00
Flávio FearnandFlavio F Lima ccfc8e8490 [Feat] Make the Store Pages controllable with Joystick (#5707)
* [UX] Gamepad navigation inside store webviews

Stores (Epic, GOG, Amazon, Zoom) opened in the embedded webview did not
respond to the gamepad: D-pad/sticks/A/B/X/Y reached only the host
window because mainWindow.webContents.sendInputEvent does not target the
guest WebContents. This made the launcher hard to use in Console Mode.

The webview preload now polls the Gamepad API directly inside the guest
and runs spatial focus navigation, with a visible focus ring injected as
CSS. Mapping: D-pad/left stick move focus, A clicks, B goes back (or
hands focus to the host when history is empty), X focuses the URL bar,
Y focuses the first search input, L1/R1 navigate webview history,
right stick scrolls, Guide toggles Console Mode. Coordination with the
host gamepad helper is done via a webview focus/blur flag plus
ipcRenderer.sendToHost so input is never double-processed.

ControllerHints is extended to show webview-specific labels and the new
L1/R1 slots whenever the user is on /store, /loginweb, /wiki, or
/store-page, with matching bumper icons for the four controller layouts.

* [Chore] Satisfy lint, prettier and i18n hooks

- Apply prettier formatting to the new webview preload and WebView
  screen so `pnpm prettier` passes.
- Replace the empty ConsoleMode placeholder handlers and `catch {}`
  with no-op definitions / explanatory comments so the project lint
  has zero errors again.
- Regenerate the English translation file via `pnpm i18n` so it picks
  up the previously missing `status.installed` key referenced in
  ConsoleMode/Game pages.

* [UX] Add "Go to store home" button in webview controls

* [Fix] Keep webview controls in sync when switching stores

Store the webview element in state via a callback ref instead of a
mutable ref. Passing ref.current to children doesn't trigger a
re-render when the element remounts on a store switch, so
WebviewControls kept a stale webview reference: the URL bar still
showed the previous store, the Home button acted on the wrong webview,
and did-navigate updates were lost. The effects now depend on the
reactive webview state as well.

* fix: Pr comments

* feat: enhance webview navigation with exit command and controller hints

* fix: dead code

* fix: address pr comments

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-08-02 19:47:47 +01:00
Flávio FearnandFlavio F Lima 43dd58cd67 [Feat] Resolve GOG Deals region from the user's GOG account (#5790)
* [Feat] Resolve GOG Deals region from the user's GOG account

* Add missing ZA translation key

* chore: cleanup

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-08-02 18:37:07 +01:00
Flávio FearnandFlavio F Lima 728bd197e1 [Feat] Add Humble Bundle deals to the Discounts screen (#5748)
* Add Humble Bundle discounts (backend, IPC, store config)

* ui: show Humble Bundle deals on the Discounts screen

* Move GMG discounts feed to the deals-listing repo

* ui: render Humble Bundle covers in landscape

* ui: add grid/list view toggle to the Discounts screen

* ui: update Humble Bundle logo to new design

* tech: mark Humble deals as Windows-only and drop unused platformFromSku

* chore: add aria-labels to the Discounts view toggle buttons

* chore: remove dead Humble DRM handling (feed never provides it)

* tech: drop dead feed pagination and persist deals in a CacheStore

* tech: rename withAffiliate to withGogAffiliate, drop redundant assertion

* fix: pr comments

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-07-22 16:57:10 +01:00
Flávio FearnandFlavio F Lima 6d32bae8e7 [Feat] Add Green Man Gaming deals to the Discounts screen (#5740)
* feat: add Green Man Gaming discounts source

Fetch GMG's discounted products from a static per-currency feed mirror,
normalize them to the CatalogProduct shape and expose them through the
new getGmgDiscounts IPC handler with a daily in-memory cache.

* chore: add workflow to mirror the GMG product feed

Daily GitHub Action that pulls GMG's per-currency catalogs from the
impact.com partner API (credentials stay in Actions secrets) and
publishes discounted items as static JSONs on the gmg-feed branch.

* ui: show GMG deals on the Discounts screen

Store tabs (All/GOG/GMG), store logo on each card, currency selector
for GMG catalogs, platform filter with Xbox, DRM surfaced through the
Features filter, and GMG links opening in the external browser.
GOG-only filters are hidden and skipped on the GMG tab.

* ci: update actions/checkout to version 7

* chore: exclude the GMG mirror script from eslint typed linting

* ui: sync en translation for the platform filter label

* chore: drop unused Manufacturer and StockAvailability from the GMG feed

* fix: keep store filters consistent across the Discounts tabs

- Show GOG-only filters (rating, PEGI, genre, release year, DLC) only when
  the shown set is GOG-only, so they no longer silently exclude GMG items on
  the All tab.
- Hide and skip the price filter on the mixed All tab, where GOG and GMG
  prices are in different currencies.
- Re-seed the price and release-year ranges on tab change and stop
  persisting them, since their scale is tab/currency-specific.
- Apply only the OS and feature values the active tab offers, so a selection
  carried over from another tab can't empty the grid invisibly.

* fix: dead code

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-07-07 21:12:43 +01:00
Flávio FearnandFlavio F Lima a71a8b4b75 [Tech] Point Plausible analytics to the self-hosted instance (#5736)
* Point Plausible to the self-hosted analytics instance

- Send events to the self-hosted analytics.heroicgameslauncher.com endpoint
- Let Plausible parse the OS natively from a browser-like User-Agent instead of
  sending it as a custom property (arch/distro stay as props since Plausible has
  no native dimension for them)

* ui: note that Plausible is self-hosted by the Heroic team in the consent dialog

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-07-06 22:51:00 +01:00
Flávio FearnandFlavio F Lima 0411046a34 [Fix] Controler tweaks for console mode (#5584)
Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-05-16 00:23:49 +01:00
Flavio F Lima 22641418c6 [Release] v2.22.0 "Hajrudin" 2026-05-15 23:27:54 +01:00
Flávio FearnandFlavio F Lima 2b29ac2439 [Feat] Add ability to Edit game title and images from any store. (#5212)
* tech: add electron store for game overrides

* tech: add game overrides types and methods

* feat: add edit game dialog for all runners

* fix: delay to show new cover art on restart

* refactor: adjust EditGameDialog layout, image dimensions, and reorder image previews.

* tech: convert EditGameDialog SCSS to CSS

* tech: store overrides as gameInfo.overrides instead of overwriting fields

* tech: move gameOverrides state from GlobalState to Zustand

* tech: copy picked override images into user data so Flatpak portal paths persist

* feat: search SteamGridDB for cover and square art in EditGameDialog

* feat: add reset-to-default button to EditGameDialog

* fix: clean up override images when override is replaced or removed

* feat: search SteamGridDB by clicking the preview images, use heroes for cover art

* feat: fix EditGameDialog width at 700px so SteamGridDB picker doesn't resize it

* feat: hide cover and square URL inputs behind an Advanced summary

* fix: reset-to-default clears the form without saving or closing the dialog

* feat: add Edit Game item to GameCard context menu in the library

* feat: extract WarningMessage component and use for SGDB key warning in both dialogs

* fix: drop Trans wrapper so the SGDB warning link click is registered

* feat: move SteamGridDB API key to the top of advanced settings

* feat: hint that the SideloadDialog image is clickable for SteamGridDB search

* feat: add hero/cover art to SideloadDialog with its own SteamGridDB picker

* feat: hide square and cover URL inputs behind an Images summary in SideloadDialog

* fix: SideloadDialog stays at fixed size when SteamGridDB picker opens

* fix: lint

* fix: prettier

* feat: implement clipboard paste functionality for cover and square images in EditGameDialog

* feat: add placeholder text for image URL input in EditGameDialog

* refactor: cleanup

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-05-15 23:19:15 +01:00
Flávio FearnandFlavio F Lima 328b26d759 [Feat] Option to hide Heroic window on heroic:// launches (#5154) (#5501)
* Add hideWindowOnProtocolLaunch setting definition

New AppSettings field (default false) that will be read by the protocol
handler to decide whether to skip showing the main window on heroic://
launches.

* Skip Heroic window on heroic:// launches (#5154)

Support two ways to launch a game via the heroic:// protocol without
popping up the main window:
- per-URL `gui=false` (also `gui=0` / `gui=no`) query parameter
- the new `hideWindowOnProtocolLaunch` global setting

The hide logic runs in three places: startup (include it in the
`headless` computation), second-instance (skip the forced
`mainWindow.show()`), and inside `handleLaunch` (hide the already-visible
window after dispatching the launch). When the game is not installed,
the install dialog still needs the window, so it is shown.

* Add settings toggle for hideWindowOnProtocolLaunch

New toggle under General settings so users can opt into skipping the
Heroic window for all heroic:// launches, plus the matching English
translation string.

* Add HideWindowOnProtocolLaunch component to AdvancedSettings and remove from GeneralSettings

* Add InfoIcon help text to hide-window-on-protocol-launch toggle

Briefly explains the use case (launching from external shortcuts like
Steam's 'Add to Steam') so users know what the toggle does without
having to read the docs.

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-05-15 23:17:15 +01:00
Flávio FearnandFlavio F Lima bd33232931 [UI] Console mode Improvements (#5575)
* feat: allow updating or launching games with updates from Console Mode

Replace the dismiss-only update notice with a two-button warning that
mirrors the GamePage update dialog. Reuse the gamepage:box.update.* and
gamepage:box.yes/no keys so no new translations are needed. Users can
now start the update or launch without it directly from Console Mode.

* i18n: drop unused console.update keys after Console Mode update notice rewrite

* feat: show game status and download progress on Console Mode cards

Extract the card into a dedicated ConsoleCard component that uses
hasStatus/hasProgress to surface active states (installing, updating,
playing, queued, etc.) as a bottom overlay. For installing and updating
games the overlay includes a progress bar with the current percentage.
The existing "Needs update" badge is hidden while an active status is
shown to avoid duplicate signals.

* feat: ask to cancel ongoing update when launching a downloading game

Previously clicking a game that was downloading or updating would fall
through to the "update available" prompt and try to launch it. Now we
detect the in-progress status from libraryStatus and surface a separate
prompt to confirm cancellation, which calls sendKill on the runner.

The existing UpdateNotice is generalized into a ConfirmDialog component
so it can drive both the update-available and cancel-update prompts
without duplicating the overlay, focus, and gamepad handling.

* feat: ask to remove a queued game from the queue when clicked in Console Mode

Clicking a queued game now opens a confirmation prompt that removes it
from the download queue (and clears the matching localStorage entry)
rather than falling through to the launch/update flow.

* fix: use namespace-prefixed gamepage keys in Console Mode dialogs

i18next-parser was routing the file's translation keys to the gamepage
namespace when a second useTranslation('gamepage') was added, which
moved existing console.* keys into gamepage.json. Drop the second
useTranslation call and reference gamepage entries via the
'gamepage:key' prefix so the parser keeps console.* under the default
translation namespace.

* i18n: add console keys for cancel-update and remove-from-queue dialogs

* fix: lint

* fix: clean up Console Mode install/launch overlay lint errors

Drop dead onOverlayKeyDown/onOverlayKeyUp handlers and JSX attrs from
LaunchOverlay, void the launch() promise so it isn't floating, and
disable exhaustive-deps where the launch is intentionally fire-on-mount.

In InstallOverlay, inline the escape handler so the useEffect deps are
clean, void the install() promise, drop the dead `label` variable, and
log thrown errors via window.api.logError instead of swallowing them.

* feat: show install-specific wording when cancelling an active install

Clicking an installing game opened the same "Cancel update?" dialog as
clicking an updating game. Branch the dialog on the in-flight status so
installs surface a "Cancel installation?" prompt with install-specific
wording while updates keep theirs unchanged. The cancel itself still
goes through sendKill, which the abort controller wires up for both.

* i18n: add console cancel-install keys and status.installed

* feat: add platform, wine, and install path controls to Console install dialog

The pre-install overlay now shows where the game will land, lets the
user step through the compatible platforms with </> arrows when more
than one is available, and offers the same chevron selector for the
Wine version when the game has to run through Wine/Proton. Up/Down
moves between rows, Left/Right cycles the focused selector, Enter
confirms and Esc/B dismisses. The Wine choice is persisted via
writeConfig before install() so it's picked up by the launcher.

* i18n: add console install dialog keys (platform, wine, path)

* refactor: tighten Console Mode install overlay and cancel-download dialog

- Replace the two nested ternaries that picked cancel-download dialog
  copy with a CANCEL_DOWNLOAD_COPY lookup keyed by kind.
- Fold cyclePlatform/cycleWine into a single cycle() factory.
- Stash live handler state in a ref so the InstallOverlay keydown
  listener stays attached for the overlay's lifetime instead of
  detaching/reattaching on every focus change.
- Drop unconditional wine-list/index reset when hasWine flips false
  and drop two narrative comments that just restated the code.

* fix: lint

* fix: route in-progress installs/queue clicks to the cancel dialog

Clicking a game that was currently installing (or queued) reopened the
install confirmation overlay because the !is_installed guard ran before
the libraryStatus check. Reorder activateGame so the active-status
branches (queued/installing/updating) run first; the install overlay
only fires for genuinely uninstalled games.

* feat: add a cancel option to the Console Mode update notice

Clicking a game with an available update offered "Update" or "Launch
without update", with Esc/B treated as the launch path. Add a third
"Cancel" button that simply closes the dialog so the user can back out
without committing to either action. Esc/B now maps to this dismiss
path; the launch and update buttons keep their original behavior.

ConfirmDialog gains optional dismissLabel/onDismiss props; the existing
two-button call sites are unchanged.

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-05-15 23:07:48 +01:00
Flávio FearnandFlavio F Lima 0a83e0f520 [Feat] Support for videos on changelog modal (#5574)
Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-05-15 23:07:40 +01:00
Flávio FearnandFlavio F Lima 6aa58882f0 [Chore] Check if Arm or x86 on plausible analytics (#5506)
chore: include system arch and distro in Plausible analytics

Extends the App Loaded event with process.arch and the distribution
name/version from getOsInfo(), so we can see the split between x64 and
arm64 users and which Linux distros are in use. Also updates the
opt-in dialog wording to disclose the new fields.

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-05-12 11:15:16 +01:00
Flávio FearnandFlavio F Lima 9ea03dd924 [FIX] GOG Links from Deals screen (#5573)
Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-05-12 11:12:49 +01:00
Flavio F Lima a8aaabda1a [FIX] AUR workflow 2026-04-22 19:50:03 +01:00
Flavio F Lima 38d09ff2f3 [FIX] Build Windows ARM64 in release workflow and send to SignPath 2026-04-22 17:16:23 +01:00
Flavio F Lima 2f33951060 [Release] v2.21.0 "Loki" 2026-04-22 16:27:49 +01:00
Flávio FearnandFlavio F Lima cb7a5d2b72 [TECH] Update legendary binary version to 0.20.43 (#5502)
Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-04-22 16:18:26 +01:00
Flávio FearnandFlavio F Lima 64342d3288 [UI] Move import button to the side of the Install one (#5339)
* [UI] Put Import button on the side of Install

* fix: small screens gap

* fix: gameConfigContainer on small screens

* refactor: simplify button disable logic in MainButton component

* style: update media query for installButtons to use container query

* feat: show wine picker modal on importing

* feat: add importing state and update MainButton logic for install and import actions

* refactor: simplify path dialog title and label in DownloadDialog component

* style: adjust button alignment and layout in GamePage CSS

* refactor: remove unused import and state related to game importing

* feat: enhance importGame handler with additional parameters and update game settings

* tech: moved the import dialog to its own component again

* chore: lint

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-04-22 13:07:09 +01:00
Flávio FearnandFlavio F Lima ca55366c7c [Feat] Add a new Fullscreen "Console-like" Mode for Joystick navigation (#5490)
* feat: add fullscreen toggle listener for main window

* feat: add fullscreen functionality to IPC and preload API

* feat: add support for Xbox Guide / PS button to toggle Console Mode

* feat: add Console Mode support with sidebar link and routing

* feat: implement Console Mode UI with game filtering and launching functionality

* ui: add navigation with thumbs and hints and cancelation button

* feat: enhance Console Mode toggle functionality with improved button handling

* feat: restore Console Mode link in Sidebar with proper icon and label

* i18n: updated keys

* fix: lint

* i18n: remove useless keys

* feat: add controller hints and improve button handling in Console Mode

* ui: move title to the top of the grid

* fix: chips text colors on some themes

* i18n: updated keys

* feat: add console mode settings and update related UI components

* feat: add CLI console mode detection and update initialization logic

* i18n: fix and update keys

* feat: default Console Mode controller hints to Xbox

* refactor: split components from consoleMode screen

* chore: show store filters only if there are games installed from it

* feat: deal with games with updates

* feat: add danger button for quitting the application in Console Mode

* feat: enhance keyboard navigation in Console Mode top bar

* i18n: updated keys

* feat: refactor controller button images using a layout configuration

* feat: simplify back button label handling for controller layouts

* refactor: move useEffects to its own hooks for reusability

* i18n: move console mode keys to the right namespace

Cancel hints and launching label were added to gamepage.json but the
LaunchOverlay reads them via the default namespace, so they were dead
keys. Move them to translation.json to match the namespace used.

* refactor: drop identity runner-to-store map in Console Mode

The map was an identity function over Runner values, so every usage
collapses to a direct g.runner comparison. Tighten StoreKey to
`Runner | 'all'` and use g.runner directly.

* refactor: centralize Console Mode gamepad button indices

Button indices were duplicated across index.tsx (BTN_BACK, BTN_L1, etc.)
and UpdateNotice (DISMISS_BUTTON_INDEX === 1). Move them to controller.ts
so both read from the same source.

* refactor: extract shared BackHint component

LaunchOverlay and UpdateNotice both rendered the same prefix/kbd/suffix
hint with identical gamepadConnected-to-Esc fallback. Move it into a
tiny BackHint component so the shape is declared once.

* style: share :disabled styles between Console Mode buttons

consoleChip and consoleQuitButton both had the same :disabled rule
(cursor + opacity). Extract it into a %consoleButtonDisabled placeholder.

* style: simplify consoleFooter flex layout

The footer wraps a single child (ControllerHints), so flex-direction,
align-items, gap and text-align were all no-ops. Keep only the
centering it actually needs.

* style: drop redundant text-align on consoleTitleBar

justify-content: center on the flex container already centers the
single title child; text-align was a no-op.

* style: avoid double blur when launching

The background's blur(3px)/saturate(0.6) stacked with the overlay's
backdrop-filter: blur(10px) over a 70% opaque fill. Keep just the
opacity fade on the background and let the overlay blur the rest.

* refactor: move Start in Console Mode out of TraySettings

The toggle has nothing to do with the system tray. Extract it into
its own StartInConsoleMode component and mount it directly in the
General settings section.

* refactor: drop redundant L3/R3 store cycling

L1/R1 already cycle the store filter; clicking the analog sticks to do
the same thing is easy to trigger by accident while navigating.

* i18n: make the parser resolve LaunchOverlay keys correctly

The i18next parser only scans calls on a plain \`t\` identifier and
doesn't follow the renamed \`tGame\` from a second useTranslation hook,
so every run was moving console.cancel.* and console.launching back
into gamepage.json. Use a single \`t\` with explicit \`gamepage:\`
namespace prefixes for status keys, matching the getStatusLabel
convention used elsewhere in the codebase.

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-04-22 11:51:45 +01:00
Flávio FearnandFlavio F Lima 927f1565c5 [Feat] Add a new Deals page with current GOG promotions (#5497)
* feat: add discounts types and helpers

* feat: add new Discounts screen

* feat: implement DiscountCard component with styling

* feat: update SidebarLinks to include Discounts section

* feat: add translations for discounts section in translation.json

* fix: currency map

* feat: enhance discount fetching logic with fallback locale and logging

* feat: implement DiscountPagination component with navigation and styling

* feat: add DiscountFilters component with sorting, price range, and genre selection

* feat: enhance Discounts page with filtering, sorting, and pagination features

* feat: enhance discounts localization with filtering, sorting, and pagination support

* feat: add rating display to DiscountCard with styling and layout adjustments

* feat: enhance Discounts page with OS, features, and rating filters

* ui: improve filters

* ui: improve genres selection

* feat: implement region selection for discounts with localization support

* feat: add search functionality to Discounts page with clear option

* feat: add collapsible section and toggle for additional filters on Discounts page

* feat: update tooltip behavior for selected genres on Discounts page

* feat: update discounts title and improve error handling in Discounts page

* feat: deduplicate products in fetchAllDiscounts to avoid React key conflicts

* feat: update tooltip behavior to show features only when more than three are selected

* feat: reset filters and sorting options on region change in Discounts page

* feat: reorganize DLC translations and enhance discounts section with filter options

* feat: add option to hide DLCs in Discounts filters

* feat: add page size selection to Discounts filters

* feat: enhance Discounts page with accessibility improvements and localization updates

* feat: update productType filter and rename labelFallback to label in RegionOption

* fix: price filter not resetting on region change

* refactor: re-use search bar and other components from MUI

* feat: add release year filter to Discounts page

* feat: add age rating filter to Discounts page with PEGI options

* style: adjust margins and padding in Discounts page styles

* feat: add release date sorting options to Discounts page

* feat: implement persisted filter state for Discounts page

* feat: add rating sorting options to Discounts page

* feat: rename Discounts to GOG Deals and update related translations

* i18n: updated keys

* fix: dead code

* feat: update currency codes for regions to align with GOG's supported currencies

* feat: add localized country names for region selection on Discounts page

* feat: remove count display from GOG Deals header

* fix: i18n parser for localized countries

* feat: add User-Agent header to axios requests in fetchPage function

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-04-22 11:42:36 +01:00
Flávio FearnandFlavio F Lima d3b3c3a1e9 [UI] Add GitHub Sponsors link to sidebar (#5499)
* [FEATURE] Add GitHub Sponsors link to sidebar

* chore: add ipc calls and types

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-04-22 11:36:44 +01:00
Flávio FearnandFlavio F Lima a8f935f853 [UI] Wine manager screen cleanup and add wine settings screen (#5306)
* ui: make table more reponsive

* [UI] Enhance WineManager UI with dropdown actions and responsive design

* [UI] Add WineManagerSettingsModal for managing custom repositories and enhance search functionality

* [UI] Enhance WineManagerSettingsModal with custom repository validation and type selection

* [UI] Refactor WineManagerSettingsModal and GeneralSettings for improved structure and responsiveness

* i18n: updated keys

* chore: lint

* chore: unused method

* fix: table on small screens

* chore: revert icons changes

* i18n: updated keys

* fix: lint

* fix: loading state after merge

* feat: enhance Wine Manager settings with repository toggle functionality

* feat: add 'Repositories' label to Wine Manager translations

* ui: fix reponsiveness

* fix: search bar

* fix: clear search when changing tabs

* ui: small fixes

* chore: pr comments

* chore: make default repos not possible to disable

* fix: unzip progress

* fix: search and cleanup

* chore: remove disable repo from wine settings

* feat: add detailed explanations for Game Porting Toolkit, Wine-Crossover, and Wine-Staging-macOS in Wine Manager

* fix: deadcode

* fix: keep size value intact in RTL languages

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-04-22 11:35:27 +01:00
065960c052 [Feat] Use SteamGrid API to select covers on sideload dialog (#5213)
* tech: install steamgriddb package

* tech: add steamgriddb api key setting

* tech: add api calls and methods

* feat: add SteamGridDB Picker components

* fix: stylings errors

* ui: add loading effect after selecting tyhe image

* feat: Make SteamGridDB API key description clickable to open the SteamGridDB API preferences page.

* feat: Add `onLoad` and `onError` props to `CachedImage` and improve type safety for SteamGridDB error handling.

* i18n: updated keys

* ui: visual improvements

* chore: move ipc calls to a dedicated file

* refactor: Replace `steamgriddb` npm package with custom API utility functions for SteamGridDB integration.

* feat: add unit tests for SteamGridDB utilities and refactor graceful-fs imports in wine runtimes tests.

* fix: lint

* fix: pr comments

* feat: add help description for SteamGridDB API key in settings

* fix: prettier

* fix: user agent and test

* Update src/backend/steamgrid/__tests__/utils.test.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update src/backend/steamgrid/utils.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* [FIX] Match sibling wrapper pattern for SteamGridDB API key setting

The component wrapped itself in `className="AdvancedSetting"` (wrong casing),
so it didn't inherit the spacing from `.advancedSetting` in Settings/index.css.
Other Advanced Settings entries wrap from the parent; do the same here.

* [FIX] Avoid UI barrel cycle in SteamGridDBPicker

The picker imported CachedImage from the same UI barrel that re-exports it,
which can evaluate to undefined depending on bundling order. Import the
module directly.

* [FIX] Propagate SteamGridDB API failures to the picker UI

The IPC handlers were catching everything and returning [], which made the
frontend render every auth/network error as "No games found" and hid the
"Failed to search" / "Failed to fetch grids" branches. Rethrow after logging
so the renderer promise rejects and the real error state renders.

* [FIX] Check SteamGridDB key via dedicated IPC

SideloadDialog only needs to know whether a key is configured, not the key
itself. Replace the full requestAppSettings() call with a boolean-returning
steamgriddb.hasApiKey handler so the raw key stays in the main process.

* [FIX] Prevent stuck SideloadDialog cover spinner

If the CachedImage emitted onError instead of onLoad (bad URL/404), or if
the picked URL matched the current one (no new load event fires), the
loading overlay stayed up forever. Clear on error, and skip toggling
loading when the URL hasn't changed.

* fix: picker grid styling

Co-authored-by: Copilot <copilot@github.com>

* [FEAT] Encrypt the SteamGridDB API key at rest

Route the API key through Electron's safeStorage before it hits config.json
and decrypt it only inside the SGDB handlers that call the API. Adds a
dedicated steamgriddb.setApiKey IPC so the plaintext never flows through
the generic setSetting pipeline, plus a 'sgdb:v1:' prefix that lets the
handlers migrate any pre-existing plaintext value on first read.

* [UX] Mask the SteamGridDB API key input and write via dedicated IPC

Use type=password, autoComplete off, and store via steamgriddb.setApiKey so
the renderer never holds the plaintext key beyond the current input. Switch
the placeholder to a "key saved" hint when one is already configured.

* [i18n] Update SteamGridDB API key strings

Add the 'key saved' placeholder and mention the encrypted-at-rest behavior
in the help description.

* fix: lint

* fix: lint

* [UX] Point the SGDB search error at the API key

The original "Failed to search for games" was identical to "no results"
from the user's perspective. Spell out the likely cause so they know to
check the key in Settings.

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <copilot@github.com>
2026-04-22 11:35:13 +01:00
52e0d004c9 [FIX] How Long To Beat 🎶One More Time...🎶 (#5466)
* [FIX] How Long To Beat 🎶One More Time...🎶

* chore: comments

* fix: prettier

* HLTB: Use GOG store page for gog HLTB data

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
Co-authored-by: Ariel Juodziukynas <arieljuod@gmail.com>
2026-04-21 16:10:21 +01:00
Flávio FearnandFlavio F Lima 6c6458548e [Tech] Update electron to v41.1.1 (#5467)
* tech: update electron to v41.1.1

* fix: remove ozone platform hint for Linux

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-04-14 19:16:01 -03:00
Flávio FearnandFlavio F Lima e298880cdb [FIX] Fix Flathub Release workflow by cleaning up list items text (#5372)
Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-02-27 19:33:40 +00:00
Flavio F Lima dbbdc7c8b8 [FIX] Update legendary release tag to version 0.20.42 and increment package version to 2.20.1 2026-02-26 19:53:15 +00:00
Flávio FearnandFlavio F Lima de5850c2b9 [FIX] Add a launch default option when none is available besides DLCs (#5366)
* [FIX] Add a launch default option when none is available besides DLCs

* fix: Launch options UI dialog

* fix: pr comments and translation

* fix: pr comments

* fix: remove redundant default launch option logic

* fix: remove display property from launchOptionsDialog footer

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-02-26 15:07:25 +00:00
Flávio FearnandFlavio F Lima f79f0f403b [Feat] Automatically pause and resume downloads based connectivity status (#5364)
[Feat]: Automatically pause and resume downloads based on system connectivity status.

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-02-26 12:20:46 +00:00
Flávio FearnandFlavio F Lima 746817c383 [UI] Show update badge on gamecard only if controller is connected (#5361)
* [UI] Show update badge on gamecard only if controller is connected

* chore: use a var for cleanup

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-02-25 10:38:33 +00:00
Flavio F Lima 1e14c8d72b [CI] Remove Snap from Linux workflow and update Electron Builder 2026-02-20 22:25:45 +00:00
Flavio F Lima cca9aafd39 [CI] Fix Linux and AUR workflows 2026-02-20 22:09:34 +00:00
Flavio F Lima 366b245979 [Release] v2.20.0 Stable 2026-02-20 21:52:31 +00:00
Flávio FearnandFlavio F Lima 214f6a720d [FIX] Fix How Long To Beat implementation (#5334)
* tech: remove hltb-js and patches

* fix: fix HLTB by using native implementation

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-02-20 21:51:50 +00:00
Flávio FearnandFlavio F Lima a4da0466eb [CI] Add gtk3 as a dependency for AUR package (#5344)
* [CI] Add gtk3 as a dependency for AUR package

* [CI] Update maintainer email and format dependencies in AUR PKGBUILD

* [CI] Add CommandMC as a co-maintainer in PKGBUILD

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-02-20 21:50:59 +00:00
Flávio FearnandFlavio F Lima 6a8c8c2a48 [UI] Show update message to game cards (#5325)
* feat: Add a 'has update' badge to game cards with conditional display and styling.

* fix: dont cover store icons

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-02-20 21:46:58 +00:00
Flavio F Lima e7a4d8243d [Release] 2.20.0 beta 1 2026-02-18 22:46:24 +00:00
Flávio FearnandFlavio F Lima 51a36d7042 [UI] Hide the Saves-Sync Quick on the game page menu behind a setting (#5323)
* [FIX] Disable Save-Sync quick-menu when no path is set

* feat: add a new setting to enable/disable the quick-menu

* i18n: updated keys

* chore: setting name

* tech: deduplicate  code

* fix: pr comments

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-02-18 22:44:50 +00:00
Flávio FearnandFlavio F Lima 1f7432dcbc [FIX] Launch options fixes (#5230)
* [FIX] Launch options getInstallInfo loop on advanced game settings

* feat: Add a 'Default' launch option.

* fix: check for "" parameter instead of single option

* refactor: replace LaunchOptions component with LaunchOptionSelector and improve launch option handling

* fix: pr comments and other improvements

* i18n: updated keys

* fix: dialog not closing

* fix: update launch options handling to ensure default option is added when necessary

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-02-17 13:45:00 +00:00
Flávio FearnandFlavio F Lima 27e43eac1f [FIX] Launch Epic Games while offline for games that supports it (#5302)
* [FIX] Launch Epic Games while offline for games that supports it

* UI: disable play button for games that cannot be played offline

* [FIX] Add offline warning dialog for games that are not playable offline

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-02-16 17:53:20 +00:00
Flávio FearnandFlavio F Lima aa22ae9b29 [UI/UX] Move FPS limit option to new "Legacy" Game Settings Tab on Linux (#5292)
* Revert "[Tech] Remove DXVK FPS limit on linux (#5195)"

This reverts commit d7a98bb11a.

* feat: Introduce a 'Legacy' settings tab for Linux, refactor DXVK FPS limit placement, and standardize warning message styling with `defaults-hint`.

* i18n: updated keys

* fix: PR comments

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-02-16 12:48:07 +00:00
Flavio F Lima 09164e5faf [Chore] Remove Steam-Support plug from Snap build 2026-01-26 17:15:07 +00:00
Flávio FearnandFlavio F Lima 05b9f789be [UX/FEAT] Show Sync saves options on the game page (#5211)
* feat: Add manual cloud save synchronization options and an auto-sync toggle to the GamePage.

* feat: Add functionality to open the game saves folder from the Cloud Saves Sync menu.

* feat: Introduce confirmation dialogs for force cloud save sync operations and refactor sync execution logic.

* i18n: updated keys

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-01-26 17:13:57 +00:00
Flávio FearnandFlavio F Lima d8d5f8be7f [UX/FEAT] Add an "Import Game" button as alt function on the gamepage (#5210)
Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-01-26 17:13:43 +00:00
Flávio FearnandFlavio F Lima ea615fca14 [CI] Update Appveyor to sign portable windows files (#5214)
Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-01-26 17:12:34 +00:00
Flavio F Lima d8764447f1 [Release] Heroic v2.19 Shaka 2026-01-24 22:04:27 +00:00
Flávio FearnandFlavio F Lima 30b2cbabde [Feat] Add Launch options setting and show dialog when first launch (#4579)
* [FEAT] Add launch option to game settings and update launch event callback

* [FEAT] Add LaunchOptionSelector component to settings and integrate it into GamesSettings

* [FEAT] Enhance LaunchOptions component to handle last used launch option and improve option selection logic

* [FEAT] Initialize undefined settings in setSetting method of GameConfigV0

* [FEAT] Refactor launch process to handle multiple launch options and user selection dialog

* [FEAT] Add launch option selection messages to gamepage and translation files

* [FEAT] Update launch option selection messages for clarity and remove unused option

* [TECH] Update dependencies in useEffect for LaunchOptions component

* [TECH] Implement useLaunchOptions hook for managing launch options in GamePage and Settings components

* [TECH] Enhance launch option selection with auto-select feature and countdown timer

* fix: deadcode

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-01-24 20:06:51 +00:00
Flávio FearnandFlavio F Lima a1d91bb49d [CI] Update AUR Workflow (#4965)
* [CI] Update AUR Workflow

* [Fix] Update AUR workflow URLs to use the official site

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-01-24 20:06:20 +00:00
Flávio FearnandFlavio F Lima b7c45892b7 [FIX] Power and display sleep blocking logic (#5206)
Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2026-01-24 20:05:45 +00:00
Flávio FearnandFlavio F Lima a95fde1a31 [FIX] Time container not updating after finishing playing (#5014)
* [FIX] Time container not updating after playing

* chore: missing i18n key

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2025-12-11 22:14:44 +00:00
Flávio Fearn 00f95e0be0 [i18n] Add Irish to the language selector (#5015)
* [i18n] Add Irish (ga) to supported languages and language selector (labels & flag)

* chore: missing key
2025-11-15 17:32:46 +01:00
Flávio FearnandFlavio F Lima 1c4d27d5ff [FIX] Update version to 2.18.1 and fix plausible missed platforms (#4844)
[FIX] Update version to 2.18.1 and ensure analytics logging only occurs on valid platforms

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2025-08-04 17:24:03 +02:00
Flavio F Lima 996981dd2c [Tech] Update Flathub XML template 2025-07-23 11:42:30 +01:00
Flavio F Lima 4e5e7db494 [i18n] Remove unnecessary launch and shader pre-caching messages from translation 2025-07-23 11:05:48 +01:00
Flávio FearnandFlavio F Lima 473f562c3a [TECH] Add Plausible for basic data insights (#4759)
* feat: add AnalyticsOptIn component for user data collection settings

* feat: add plausible dependency

* feat: add analyticsOptIn setting to AppSettings

* feat: add analytics info modal

* feat: add plausible to index.tsx

* feat: update analytics modal text and add disable option

* feat: update version to 2.18.0 and change stable version name to "Waterfall Beard" Jorul

* feat: enhance analytics modal text for clarity and compliance

* feat: add getLoggedInProviders handler and update analytics tracking

* tech: refactor to use on backend

* chore: comments

* tech: refactor analytics dialog in its own component

* chore: comments

* chore: deadcode

* feat: add OS

* fix: disable analytics opt-in by default

* refactor: replace Plausible initialization with startPlausible function

* fix: update analytics modal text and button labels for clarity

* feat: skip dialog on e2e test

* fix: update analytics opt-in text for clarity and add restart requirement

* feat: implement startPlausible function and integrate with analytics opt-in

* fix: update analytics modal text for transparency and adjust related translations

* feat: add sideloaded provider

* feat: add new launch option and shader pre-caching messages

* refactor: start plausible from backend events

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2025-07-22 21:36:39 +02:00
Flávio FearnandFlavio F Lima 5d66738a17 [UI] Update Gamescope and Mangohud runtime version messages (#4729)
* Chore: update Gamescope and Mangohud runtime version messages

* feat: add flatpak runtime version support in environment and update related components

* fix: downgrade runtime and base versions to 23.08 in flatpak template

* fix: remove default flatpak runtime version fallback

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2025-07-18 14:51:01 +02:00
Flávio FearnandFlavio F Lima 4df31d474c [macOS] Add Wine-Staging-macOS to WineManager (#4728)
feat: add Wine-Staging-macOS support to WineManager

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2025-07-18 14:24:41 +02:00
Flávio FearnandFlavio F Lima 8199977909 [FIX] App icon Linux/macOS (#4645)
* [FIX] App icon Linux/macOS

* [FIX] Include mac-icon.icns in asarUnpack for packaging

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2025-06-09 14:38:15 +01:00
Flávio FearnandFlavio F Lima 178011bf93 [FIX] Add warning dialog for disabled Shader Pre-caching on SteamDeck (#4623)
* [FIX] Add warning dialog for disabled Shader Pre-caching on SteamDeck

* [CHANGE] Bump version to 2.17.2 in package.json

* [ADD] Add 'Launch Game Anyway' option to shader pre-caching warning dialog

* [chore] Implement warning dialog for disabled Shader Pre-caching in launch process

* [CHANGE] Enhance shader pre-caching warning dialog with cancel option

* [CHANGE] Log user actions when launching with Shader Pre-Caching disabled

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2025-06-09 13:39:01 +01:00
Flávio FearnandFlavio F Lima 1d32c41a03 [FIx] Nord Light theme (#4603)
* [FIx] Nord Light theme

* [UX] Enhance nord-light theme with new icon and download styles

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2025-06-04 13:30:26 +01:00
Flávio FearnandFlavio F Lima 934cfb223c [UI] Enhance responsive design for game page (#4578)
* [FEAT] Enhance responsive design for game page

* [FIX] Adjust grid layout and height for game configuration container

* [FIX] Adjust height of mainInfoWrapper and update padding for responsive design

* [FIX] Update max-width and max-height for game configuration container

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2025-06-04 13:15:01 +01:00
Flávio FearnandFlavio F Lima 50c1dd47b0 [FIX] Flathub build workflow and bump version (#4573)
* [Fix] Update version to 2.17.1-beta.0 and show warning on disabled pre-cache

* fix: flatpak ci source

* chore: logs

* fix: simplify condition for UMU support check

* fix: update version to 2.17.1 cleanup

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2025-05-28 12:23:49 +01:00
Flávio FearnandFlavio F Lima d3c7883fec [FEAT - macOS] Add Rosetta AVX Setting (#4557)
* wip: advertise avx for rosetta

* [Refactor] Update wineVersion default value in AdvertiseAvxForRosetta component

* [Fix] Update advertiseAvxForRosetta setting based on platform and wine version

* [Feat] Add translation for advertiseAvxForRosetta in help and settings

* fix: lint

* fix: pr comments

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2025-05-28 12:06:47 +01:00
Flavio F Lima f84382406e [CI] Add support for Beta Releases on Flathub 2025-05-27 15:57:32 +01:00
Flávio FearnandFlavio F Lima 476f8822b5 [FIX] Flatpak workflow (#4568)
Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2025-05-26 16:17:43 +01:00
Flavio F Lima 91d3f16124 fix: streamline pnpm installation process in AppVeyor configuration 2025-05-22 21:05:41 +01:00
Flavio F Lima 75c5163803 fix: ensure corepack prepares pnpm@10 during installation 2025-05-22 21:03:16 +01:00
Flávio FearnandFlavio F Lima c158d7806d [Release] 2.17.0 Franky (#4549)
* fix: log screen

* fix: games with launch options

* feat: add eslint-plugin-react-hooks for improved React hooks linting

* fix: dialog padding

* fix: update LaunchOptions component initialization and remove duplicate instance

* fix: update stable version name in package.json

* fix: remove unused launch options section from gamepage.json

* fix: logs truncated position

* fix: lint

* fix: update electron to version 36.2.1

* fix: correct typo in welcome message for library tour

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2025-05-22 20:45:22 +01:00
Flávio FearnandFlavio F Lima d1268d863b [macOS - Feature] Install Windows Steam with one Click (#4462)
* [Dependency] Add @tanstack/react-query version 5.71.10 to package.json and update pnpm-lock.yaml

* [Feature] Implement Steam download and installation for macOS Wine prefix

* [Feature] Add IPC handler and function for installing Steam on Windows

* [Feature] Integrate React Query for improved data fetching and state management

* [Fix] Make gameInfo parameter optional and set default runner value in hasStatus function

* [Feature] Add Steam installation button and dialog for enhanced user experience

* [Feature] Update translation.json with new Steam installation messages and compatibility notes

* [Feature] Enhance Steam installation button with tooltip and styling improvements

* [Refactor] Update hasStatus function to manage gameInfo state and fetch updated game information

* [Feature] Enhance SteamInstallDialog with icons and styling improvements

* [Refactor] Simplify SteamInstallButton by removing unused platform check and streamline installation logic

* [Feature] Add tooltip and tour step for Steam installation on macOS

* [Refactor] Improve Steam installation notifications

* fix: pr comments

* fix: update pnpm install command to prevent lockfile issues

* Revert "fix: update pnpm install command to prevent lockfile issues"

This reverts commit b9e3be8bd7.

* chore: pnpm-lock

* Revert "[Dependency] Add @tanstack/react-query version 5.71.10 to package.json and update pnpm-lock.yaml"

This reverts commit bded2b3e1a.

* tech: remove react-query code

* refactor: update translation keys for Steam installation components

* feat: add specific version download information for Steam installation

* feat: send refresh message to frontend after adding a new app

* refactor: simplify progress update logic in Steam installation

* feat: enhance Steam installation progress display with a progress bar

* refactor: update notification titles for Steam installation success and error messages

* feat: add WineSelector component and fetch wine versions for Steam installation

* refactor: remove redundant title field from Steam installation notification

* feat: add Steam installation localization and update tooltip texts

* feat: add abort installation functionality and update styles for Steam installation

* fix: lint

* fix: missing Path

* feat: ignore wine command if wine is crossover

* fix: downloaded percent wine

* chore: revert download percent changes

* fit: lint

* feat: Update Steam installation process to accept custom installation path and updated texts

* fix: codecheck

* chore: force gptk as default wine for steam

* feat: move isIntelMac functionality to backend

* fix: button color

* feat: auto download GPTK if none was found on apple silicon macs

* fix: Pr comments

* fix: lint

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2025-05-22 13:26:14 +01:00
Flávio FearnandFlavio F Lima f1fe2097ed [UI - Linux] Update FPS limit Text (#4538)
* [FIX] Update FPS limit terminology for DXVK settings

* [FIX] Update FPS limit terminology for DirectX settings

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2025-05-21 16:20:21 +01:00
Flávio FearnandFlavio F Lima 29c34aeaf7 [FIX] HowLongToBeat data (#4543)
* [FIX] HowLongToBeat data

* chore: types

* [Fix] Ensure clickable action for game links in HowLongToBeat component

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2025-05-21 16:19:08 +01:00
Flávio FearnandFlavio F Lima c8bdaf50e1 [Feat] Add filter to show only games with update available (#4539)
* [FEAT] Add Filter to show games with updates available

* i18n: updated keys

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2025-05-20 17:06:14 +01:00
Flávio FearnandFlavio F Lima abd9167f3e [Fix] Prevent auto-update checks on Linux (#4536)
Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2025-05-20 17:04:52 +01:00
Flávio FearnandFlavio F Lima 463e06c45a [Feat] Add option to download Proton-GE directly to Steam compatibility tools (#4524)
* [Feat] Add option to download Proton-GE directly to Steam compatibility tools

* ui: add help icon

* fix: remove unnecessary isLinux check for GE-Proton installation

* fix: update translation keys for GE-Proton download settings

* chore: undo typescript fixes

* fix: streamline Proton-GE installation path logic

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2025-05-18 22:11:58 +01:00
Flávio FearnandFlavio F Lima 3abd343d91 [Fix] Try to fix Snap build (#4517)
* [TECH] Try to fix Snap build

* fix: update User-Agent header and enhance proxy settings in download helper

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2025-05-12 13:01:32 +01:00
Flávio FearnandFlavio F Lima 741f317dba [UX] Add Guided tour for Library, filters and Sidebar (#4401)
* [deps] Add intro.js and intro.js-react dependencies

* [Tour] Implement guided tour on the library feature with TourButton and Tour components

* [Tour] Integrate TourButton into ActionIcons and update CategoryFilter for guided tour

* [Tour] Enhance library guided tour with new translations and improved step descriptions

* [Tour] Update guided tour with new sorting option and enhanced welcome message

* [Tour] Update library guided tour with additional welcome messages and custom styling

* [Sidebar] Add dataTour prop to SidebarItem and QuitButton; remove HeroicVersion CSS file

* [Tour] Update sidebar translations with new accessibility features and enhanced descriptions

* fix: deadcode

* fix: sidebar stylings

* fix: more sidebar stylings

* fix: library and sidebar tours

* fix: update i18next-parser and improve localization strings

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2025-03-10 21:25:16 +00:00
54cd8a03b2 [Feat] macOS: Check if Rosetta is available on Startup (#4402)
* [FEAT] macOS: Check for Rosetta installation on startup

* [FEAT] Add macOS compatibility check for toolkit on Sonoma or higher

* [REFAC] Improve macOS compatibility checks and streamline Wine manager repository selection

* fix: lint and codecheck

* Update src/backend/utils.ts

Co-authored-by: Mathis Dröge <mathis.droege@ewe.net>

* Update src/backend/utils.ts

Co-authored-by: Mathis Dröge <mathis.droege@ewe.net>

* fix: pr comments

---------

Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
Co-authored-by: Mathis Dröge <mathis.droege@ewe.net>
2025-03-10 21:25:08 +00:00
Flavio F Lima 26ec1ed845 [CI] Fix Flathub and AUR workflows 2025-03-02 14:37:54 +00:00
Flavio F Lima 66702c34b9 chore: pnpm.lock 2025-03-01 18:56:48 +00:00
Flavio F Lima abc34ed695 [Build] Add patchedDependencies for @types/node in package.json 2025-03-01 18:54:42 +00:00
Flavio F Lima 2985294479 [Build] Remove Node.js installation from AppVeyor configuration and clean up package.json 2025-03-01 18:07:21 +00:00
Flavio F Lima e0b052c3fd [Build] Specify pnpm version in package.json 2025-03-01 18:05:56 +00:00
Flavio F Lima 8333a3db65 [Build] Update AppVeyor configuration to install Node.js and specify pnpm version 2025-03-01 18:03:08 +00:00
Flavio F Lima 34038d13f8 [BUILD] Remove Snapcraft store credentials from Linux draft release workflow 2025-03-01 17:06:49 +00:00
Flavio F Lima b25350e3f9 [BUILD] Update pnpm version to latest-9 in AppVeyor configuration 2025-03-01 17:03:45 +00:00
Flavio F Lima 47f418ff44 [RELEASE] 2.16.0 - Scopper Gaban 2025-03-01 16:39:06 +00:00
Flávio FearnandFlavio F Lima 3fa5605031 [CI] Upgrade upload-artifact action to v4 (#4126)
Co-authored-by: Flavio F Lima <flavioislima@users.noreply.github.com>
2024-11-18 18:22:19 -05:00