From b5a3ac2b0fb0e1b182dfd53f31138ed8d7084bfa Mon Sep 17 00:00:00 2001 From: R1kaB3rN <100738684+R1kaB3rN@users.noreply.github.com> Date: Fri, 9 Feb 2024 19:39:15 -0800 Subject: [PATCH] Support setting ULWGL_ID - Set STEAM_COMPAT_APP_ID to a valid ULWGL_ID to allow applying non-steam protonfixes to games. - Related to https://github.com/Open-Wine-Components/ULWGL-launcher/commit/c3c016bcdc7d107f239e302712a1cce7c845ddc6 and https://github.com/Open-Wine-Components/ULWGL-launcher/commit/99b3166e83dcd2d5769c9843fe0c80d5764ebb38. --- gamelauncher.py | 8 ++++++- gamelauncher_test.py | 54 +++++++++++++++++++++++++++++++++----------- 2 files changed, 48 insertions(+), 14 deletions(-) diff --git a/gamelauncher.py b/gamelauncher.py index 2dad652..f086ccc 100755 --- a/gamelauncher.py +++ b/gamelauncher.py @@ -8,6 +8,7 @@ from pathlib import Path import tomllib from typing import Dict, Any, List, Set import gamelauncher_plugins +from re import match # TODO: Only set the environment variables that are not empty import subprocess @@ -239,7 +240,12 @@ def main() -> None: # noqa: D103 if getattr(args, "verb", None) and getattr(args, "verb", None) in verbs: verb = getattr(args, "verb", None) - env["STEAM_COMPAT_APP_ID"] = env["GAMEID"] + env["ULWGL_ID"] = env["GAMEID"] + env["STEAM_COMPAT_APP_ID"] = "0" + + if match(r"^ulwgl-[\d\w]+$", env["ULWGL_ID"]): + env["STEAM_COMPAT_APP_ID"] = env["ULWGL_ID"][env["ULWGL_ID"].find("-") + 1 :] + env["SteamAppId"] = env["STEAM_COMPAT_APP_ID"] env["SteamGameId"] = env["SteamAppId"] env["WINEPREFIX"] = Path(env["WINEPREFIX"]).expanduser().as_posix() diff --git a/gamelauncher_test.py b/gamelauncher_test.py index 3d56243..a64db96 100644 --- a/gamelauncher_test.py +++ b/gamelauncher_test.py @@ -37,6 +37,7 @@ class TestGameLauncher(unittest.TestCase): "SteamAppId": "", "SteamGameId": "", "STEAM_RUNTIME_LIBRARY_PATH": "", + "ULWGL_ID": "", } self.test_opts = "-foo -bar" # Proton verb @@ -110,9 +111,14 @@ class TestGameLauncher(unittest.TestCase): # Check if the EXE is empty self.assertFalse(result_set_env["EXE"], "Expected EXE to be empty") - # Set remaining environment variables - self.env["STEAM_COMPAT_MOUNTS"] = self.env["STEAM_COMPAT_TOOL_PATHS"] - self.env["STEAM_COMPAT_APP_ID"] = self.env["GAMEID"] + self.env["ULWGL_ID"] = self.env["GAMEID"] + self.env["STEAM_COMPAT_APP_ID"] = "0" + + if re.match(r"^ulwgl-[\d\w]+$", self.env["ULWGL_ID"]): + self.env["STEAM_COMPAT_APP_ID"] = self.env["ULWGL_ID"][ + self.env["ULWGL_ID"].find("-") + 1 : + ] + self.env["SteamAppId"] = self.env["STEAM_COMPAT_APP_ID"] self.env["SteamGameId"] = self.env["SteamAppId"] self.env["WINEPREFIX"] = Path(self.env["WINEPREFIX"]).expanduser().as_posix() @@ -221,8 +227,14 @@ class TestGameLauncher(unittest.TestCase): self.assertEqual(result_set_env["PROTONPATH"], self.test_file) self.assertEqual(result_set_env["GAMEID"], self.test_file) - self.env["STEAM_COMPAT_MOUNTS"] = self.env["STEAM_COMPAT_TOOL_PATHS"] - self.env["STEAM_COMPAT_APP_ID"] = self.env["GAMEID"] + self.env["ULWGL_ID"] = self.env["GAMEID"] + self.env["STEAM_COMPAT_APP_ID"] = "0" + + if re.match(r"^ulwgl-[\d\w]+$", self.env["ULWGL_ID"]): + self.env["STEAM_COMPAT_APP_ID"] = self.env["ULWGL_ID"][ + self.env["ULWGL_ID"].find("-") + 1 : + ] + self.env["SteamAppId"] = self.env["STEAM_COMPAT_APP_ID"] self.env["SteamGameId"] = self.env["SteamAppId"] self.env["WINEPREFIX"] = Path(self.env["WINEPREFIX"]).expanduser().as_posix() @@ -298,8 +310,14 @@ class TestGameLauncher(unittest.TestCase): self.assertEqual(result_set_env["PROTONPATH"], self.test_file) self.assertEqual(result_set_env["GAMEID"], self.test_file) - self.env["STEAM_COMPAT_MOUNTS"] = self.env["STEAM_COMPAT_TOOL_PATHS"] - self.env["STEAM_COMPAT_APP_ID"] = self.env["GAMEID"] + self.env["ULWGL_ID"] = self.env["GAMEID"] + self.env["STEAM_COMPAT_APP_ID"] = "0" + + if re.match(r"^ulwgl-[\d\w]+$", self.env["ULWGL_ID"]): + self.env["STEAM_COMPAT_APP_ID"] = self.env["ULWGL_ID"][ + self.env["ULWGL_ID"].find("-") + 1 : + ] + self.env["SteamAppId"] = self.env["STEAM_COMPAT_APP_ID"] self.env["SteamGameId"] = self.env["SteamAppId"] self.env["WINEPREFIX"] = Path(self.env["WINEPREFIX"]).expanduser().as_posix() @@ -316,7 +334,6 @@ class TestGameLauncher(unittest.TestCase): self.env["PROTONPATH"] + ":" + Path(__file__).parent.as_posix() ) self.env["STEAM_COMPAT_MOUNTS"] = self.env["STEAM_COMPAT_TOOL_PATHS"] - # Create an empty Proton prefix when asked if not getattr(result, "exe", None) and not getattr(result, "config", None): self.env["EXE"] = "" @@ -374,8 +391,14 @@ class TestGameLauncher(unittest.TestCase): self.assertEqual(result_set_env["PROTONPATH"], self.test_file) self.assertEqual(result_set_env["GAMEID"], self.test_file) - self.env["STEAM_COMPAT_MOUNTS"] = self.env["STEAM_COMPAT_TOOL_PATHS"] - self.env["STEAM_COMPAT_APP_ID"] = self.env["GAMEID"] + self.env["ULWGL_ID"] = self.env["GAMEID"] + self.env["STEAM_COMPAT_APP_ID"] = "0" + + if re.match(r"^ulwgl-[\d\w]+$", self.env["ULWGL_ID"]): + self.env["STEAM_COMPAT_APP_ID"] = self.env["ULWGL_ID"][ + self.env["ULWGL_ID"].find("-") + 1 : + ] + self.env["SteamAppId"] = self.env["STEAM_COMPAT_APP_ID"] self.env["SteamGameId"] = self.env["SteamAppId"] self.env["WINEPREFIX"] = Path(self.env["WINEPREFIX"]).expanduser().as_posix() @@ -469,9 +492,14 @@ class TestGameLauncher(unittest.TestCase): "Expected the concat EXE and game options to not have trailing spaces", ) - self.env["STEAM_COMPAT_MOUNTS"] = self.env["STEAM_COMPAT_TOOL_PATHS"] - self.env["STEAM_COMPAT_MOUNTS"] = self.env["STEAM_COMPAT_TOOL_PATHS"] - self.env["STEAM_COMPAT_APP_ID"] = self.env["GAMEID"] + self.env["ULWGL_ID"] = self.env["GAMEID"] + self.env["STEAM_COMPAT_APP_ID"] = "0" + + if re.match(r"^ulwgl-[\d\w]+$", self.env["ULWGL_ID"]): + self.env["STEAM_COMPAT_APP_ID"] = self.env["ULWGL_ID"][ + self.env["ULWGL_ID"].find("-") + 1 : + ] + self.env["SteamAppId"] = self.env["STEAM_COMPAT_APP_ID"] self.env["SteamGameId"] = self.env["SteamAppId"] self.env["WINEPREFIX"] = Path(self.env["WINEPREFIX"]).expanduser().as_posix()