From 1a23c3c8885a54d808a67bea87e9512304a183b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fl=C3=A1vio=20F=20Lima?= Date: Thu, 3 Nov 2022 14:11:13 +0100 Subject: [PATCH] [Fix] 2.5.0 Beta 1 Fixes (#1979) * fix: library item always selected * chore: refresh library only if library is empty * Fix Heroic does not respect launch arguments on custom added windows games (v2.5.0beta1) #1977 * fix: uninstalled recent games shown as installed * fix: spacing on settings * fix: broken gamepad * fix: wine settings on windows * fix: game settings route * fix: enable language setting on default settings * fix: pr comments --- src/backend/api/misc.ts | 2 +- src/backend/sideload/games.ts | 7 ++-- src/frontend/App.tsx | 7 ++-- .../Sidebar/components/SidebarLinks/index.tsx | 26 +++++++------ src/frontend/helpers/gamepad.ts | 3 +- src/frontend/screens/Game/GamePage/index.tsx | 4 +- .../Library/components/GameCard/index.tsx | 10 +---- .../components/RecentlyPlayed/index.tsx | 2 +- .../Settings/components/BattlEyeRuntime.tsx | 4 +- .../Settings/components/EacRuntime.tsx | 4 +- .../Settings/components/PreferedLanguage.tsx | 8 +--- .../sections/GamesSettings/index.scss | 1 + .../Settings/sections/GamesSettings/index.tsx | 39 +++++++++++-------- 13 files changed, 58 insertions(+), 59 deletions(-) diff --git a/src/backend/api/misc.ts b/src/backend/api/misc.ts index 9edae71656..681d4dbf15 100644 --- a/src/backend/api/misc.ts +++ b/src/backend/api/misc.ts @@ -41,7 +41,7 @@ export const refreshLibrary = async ( ) => ipcRenderer.invoke('refreshLibrary', fullRefresh, library) export const gamepadAction = async ( - args: [action: string, metadata: { elementTag: string; x: number; y: number }] + args: [action: string, metadata: unknown] ) => ipcRenderer.invoke('gamepadAction', args) export const logError = (error: string) => ipcRenderer.send('logError', error) diff --git a/src/backend/sideload/games.ts b/src/backend/sideload/games.ts index 9cc49b1449..1bd39678fb 100644 --- a/src/backend/sideload/games.ts +++ b/src/backend/sideload/games.ts @@ -107,8 +107,10 @@ export async function launchApp(appName: string): Promise { folder_name } = gameInfo + const gameSettings = await getAppSettings(appName) + const { launcherArgs } = gameSettings + if (executable) { - const gameSettings = await getAppSettings(appName) const { success: launchPrepSuccess, failureReason: launchPrepFailReason, @@ -143,7 +145,6 @@ export async function launchApp(appName: string): Promise { // Native if (isNativeApp(appName)) { - const { launcherArgs } = gameSettings logInfo( `launching native sideloaded: ${executable} ${launcherArgs ?? ''}`, { prefix: LogPrefix.Backend } @@ -187,7 +188,7 @@ export async function launchApp(appName: string): Promise { }) await runWineCommand({ - commandParts: [executable], + commandParts: [executable, launcherArgs ?? ''], gameSettings, wait: false, startFolder: folder_name, diff --git a/src/frontend/App.tsx b/src/frontend/App.tsx index 06d3720035..3c40cb4f4b 100644 --- a/src/frontend/App.tsx +++ b/src/frontend/App.tsx @@ -1,7 +1,7 @@ import React, { useContext } from 'react' import './App.css' -import { HashRouter, Route, Routes } from 'react-router-dom' +import { HashRouter, Navigate, Route, Routes } from 'react-router-dom' import Login from './screens/Login' import WebView from './screens/WebView' import { GamePage } from './screens/Game' @@ -27,12 +27,13 @@ function App() {
- } /> + } /> + } /> } /> } /> } /> } /> - + } /> diff --git a/src/frontend/components/UI/Sidebar/components/SidebarLinks/index.tsx b/src/frontend/components/UI/Sidebar/components/SidebarLinks/index.tsx index e88644ec0e..1dcbce2eab 100644 --- a/src/frontend/components/UI/Sidebar/components/SidebarLinks/index.tsx +++ b/src/frontend/components/UI/Sidebar/components/SidebarLinks/index.tsx @@ -71,12 +71,7 @@ export default function SidebarLinks() { setGameInfo(info) if (info?.is_installed) { setIsDefaultSetting(false) - const isNative = await window.api.isNative({ appName, runner }) - // setIsNativeApp(isNative) - const wineOrOther = isNative - ? `/settings/${runner}/${appName}/other` - : `/settings/${runner}/${appName}/games_settings` - setSettingsPath(wineOrOther) + setSettingsPath(`/settings/${runner}/${appName}/games_settings`) } } } @@ -93,6 +88,18 @@ export default function SidebarLinks() { } }, [location]) + async function handleRefresh() { + localStorage.setItem('scrollPosition', '0') + + const shouldRefresh = + (epic.username && !epic.library.length) || + (gog.username && !gog.library.length) + if (shouldRefresh) { + return refreshLibrary({ runInBackground: true, fullRefresh: true }) + } + return + } + return (
{!loggedIn && ( @@ -117,11 +124,8 @@ export default function SidebarLinks() { className={({ isActive }) => classNames('Sidebar__item', { active: isActive }) } - to={'/'} - onClick={() => { - localStorage.setItem('scrollPosition', '0') - refreshLibrary({ runInBackground: false, fullRefresh: true }) - }} + to={'/library'} + onClick={async () => handleRefresh()} > <>
diff --git a/src/frontend/helpers/gamepad.ts b/src/frontend/helpers/gamepad.ts index be1a754d62..8fd07c035d 100644 --- a/src/frontend/helpers/gamepad.ts +++ b/src/frontend/helpers/gamepad.ts @@ -166,8 +166,7 @@ export const initGamepad = () => { } else { // we have to tell Electron to simulate key presses // so the spatial navigation works - const metadataReturn = metadata() - if (metadataReturn) window.api.gamepadAction([action, metadataReturn]) + window.api.gamepadAction([action, metadata()]) } } } diff --git a/src/frontend/screens/Game/GamePage/index.tsx b/src/frontend/screens/Game/GamePage/index.tsx index 19007e26af..1d68581e8f 100644 --- a/src/frontend/screens/Game/GamePage/index.tsx +++ b/src/frontend/screens/Game/GamePage/index.tsx @@ -224,9 +224,7 @@ export default function GamePage(): JSX.Element | null { const isMacNative = isMac.includes(installPlatform ?? '') const isLinuxNative = installPlatform === 'linux' const isNative = isWin || isMacNative || isLinuxNative - const pathname = isNative - ? `/settings/${runner}/${appName}/other` - : `/settings/${runner}/${appName}/games_settings` + const pathname = `/settings/${runner}/${appName}/games_settings` const showCloudSaveInfo = cloud_save_enabled && !isLinuxNative /* diff --git a/src/frontend/screens/Library/components/GameCard/index.tsx b/src/frontend/screens/Library/components/GameCard/index.tsx index ef50bf8031..a0e9309c3a 100644 --- a/src/frontend/screens/Library/components/GameCard/index.tsx +++ b/src/frontend/screens/Library/components/GameCard/index.tsx @@ -77,15 +77,12 @@ const GameCard = ({ libraryStatus, layout, handleGameStatus, - platform, hiddenGames, favouriteGames, allTilesInColor, showDialogModal } = useContext(ContextProvider) - const isWin = platform === 'win32' - const grid = forceCard || layout === 'grid' const { status, folder } = @@ -244,10 +241,7 @@ const GameCard = ({ const isMac = ['osx', 'Mac'] const isMacNative = isMac.includes(installedPlatform ?? '') const isLinuxNative = installedPlatform === 'linux' - const isNative = isWin || isMacNative || isLinuxNative - const pathname = isNative - ? `/settings/${runner}/${appName}/other` - : `/settings/${runner}/${appName}/games_settings` + const pathname = `/settings/${runner}/${appName}/games_settings` const onUninstallClick = function () { setShowUninstallModal(true) @@ -327,7 +321,7 @@ const GameCard = ({
{haveStatus && {getStatus()}} { recentGamesChangedRemoveListener() } - }, []) + }, [epic.library, gog.library, sideloadedLibrary]) if (!recentGames.length) { return null diff --git a/src/frontend/screens/Settings/components/BattlEyeRuntime.tsx b/src/frontend/screens/Settings/components/BattlEyeRuntime.tsx index e33e772131..e390abb3fa 100644 --- a/src/frontend/screens/Settings/components/BattlEyeRuntime.tsx +++ b/src/frontend/screens/Settings/components/BattlEyeRuntime.tsx @@ -31,7 +31,7 @@ const BattlEyeRuntime = () => { } return ( - <> +
{ )} )} - +
) } diff --git a/src/frontend/screens/Settings/components/EacRuntime.tsx b/src/frontend/screens/Settings/components/EacRuntime.tsx index b9c70e445f..116fed17ec 100644 --- a/src/frontend/screens/Settings/components/EacRuntime.tsx +++ b/src/frontend/screens/Settings/components/EacRuntime.tsx @@ -51,7 +51,7 @@ const EacRuntime = () => { setEacRuntime(!eacRuntime) } return ( - <> +
{ {t('settings.eacRuntime.installing', 'Installing EAC Runtime...')} )} - +
) } diff --git a/src/frontend/screens/Settings/components/PreferedLanguage.tsx b/src/frontend/screens/Settings/components/PreferedLanguage.tsx index a96f11133a..b8a05e0457 100644 --- a/src/frontend/screens/Settings/components/PreferedLanguage.tsx +++ b/src/frontend/screens/Settings/components/PreferedLanguage.tsx @@ -1,21 +1,15 @@ -import React, { ChangeEvent, useContext } from 'react' +import React, { ChangeEvent } from 'react' import { useTranslation } from 'react-i18next' import { InfoBox, TextInputField } from 'frontend/components/UI' import useSetting from 'frontend/hooks/useSetting' -import SettingsContext from '../SettingsContext' const PreferedLanguage = () => { const { t } = useTranslation() - const { isDefault } = useContext(SettingsContext) const [languageCode, setLanguageCode] = useSetting('language', '') const handleLanguageCode = (event: ChangeEvent) => setLanguageCode(event.currentTarget.value) - if (isDefault) { - return <> - } - const languageInfo = ( {t( diff --git a/src/frontend/screens/Settings/sections/GamesSettings/index.scss b/src/frontend/screens/Settings/sections/GamesSettings/index.scss index adc53f221d..e782151665 100644 --- a/src/frontend/screens/Settings/sections/GamesSettings/index.scss +++ b/src/frontend/screens/Settings/sections/GamesSettings/index.scss @@ -21,5 +21,6 @@ section:not(:nth-of-type(0)) { padding-top: var(--space-xl); + min-width: 500px; } } diff --git a/src/frontend/screens/Settings/sections/GamesSettings/index.tsx b/src/frontend/screens/Settings/sections/GamesSettings/index.tsx index b588575154..e42f0d4f5f 100644 --- a/src/frontend/screens/Settings/sections/GamesSettings/index.tsx +++ b/src/frontend/screens/Settings/sections/GamesSettings/index.tsx @@ -39,6 +39,7 @@ export default function GamesSettings() { const { platform } = useContext(ContextProvider) const { isDefault } = useContext(SettingsContext) const isLinux = platform === 'linux' + const isWin = platform === 'win32' return ( <> @@ -52,31 +53,37 @@ export default function GamesSettings() {

)} -
-

{isLinux ? 'Wine' : 'Crossover'}

+ {!isWin && ( + <> +
+

+ {isLinux ? 'Wine' : 'Crossover'} +

- + - + - + - -
+ +
-
-

- {t('settings.navbar.wineExt', 'Wine Extensions')} -

+
+

+ {t('settings.navbar.wineExt', 'Wine Extensions')} +

- + - + - + - -
+ +
+ + )}

{t('settings.navbar.other')}