Thanks to @rogerclotet for the suggestion #5 - this adds support for
other locations where Trials: Rising could have been installed by Steam
This commit is contained in:
1 parent
3e615cd1a0
commit
f6762b23f6
1 file changed
+37
-1
@@ -1,13 +1,49 @@
|
||||
import sys
|
||||
import getpass
|
||||
import os
|
||||
import re
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
|
||||
GAME_RELATIVE = Path('steamapps/common/Trials Rising/datapack/trialsrising.exe')
|
||||
|
||||
|
||||
def steam_library_candidates(user):
|
||||
"""Yield candidate paths to trialsrising.exe across every Steam library.
|
||||
|
||||
Rather than guessing at device names or mount points (for example, assuming the microSD card
|
||||
is always at /run/media/mmcblk0p1), read Steam's own libraryfolders.vdf, which lists every
|
||||
installed library no matter where it lives (internal drive, SD card, external drive, ...).
|
||||
"""
|
||||
home = Path('/home') / user
|
||||
steam_roots = [
|
||||
home / '.local/share/Steam', # standard Linux / SteamOS
|
||||
home / '.steam/steam', # older / symlinked installs
|
||||
home / '.var/app/com.valvesoftware.Steam/.local/share/Steam', # Flatpak Steam
|
||||
home / 'snap/steam/common/.local/share/Steam', # Snap Steam
|
||||
]
|
||||
for root in steam_roots:
|
||||
# The library that lives directly under the Steam root (usually the default one).
|
||||
yield root / GAME_RELATIVE
|
||||
try:
|
||||
text = (root / 'steamapps' / 'libraryfolders.vdf').read_text(encoding='utf-8', errors='replace')
|
||||
except OSError:
|
||||
continue
|
||||
# Each library root is stored as: "path" "/run/media/mmcblk0p1"
|
||||
for library in re.findall(r'"path"\s+"([^"]+)"', text):
|
||||
yield Path(library) / GAME_RELATIVE
|
||||
|
||||
|
||||
# Check if user specified a path
|
||||
if len(sys.argv) > 1:
|
||||
path = sys.argv[1]
|
||||
else:
|
||||
path = '/home/' + getpass.getuser() + '/.local/share/Steam/steamapps/common/Trials Rising/datapack/trialsrising.exe'
|
||||
user = getpass.getuser()
|
||||
path = next(
|
||||
(str(candidate) for candidate in steam_library_candidates(user) if candidate.is_file()),
|
||||
# Last-resort default, so the "file not found" hint still names a real location.
|
||||
'/home/' + user + '/.local/share/Steam/' + str(GAME_RELATIVE),
|
||||
)
|
||||
|
||||
# Some explanation: these bytes first serve as hex representations of the program instructions we want to change
|
||||
# But if that was all they needed to be, they could each be 3 hex characters long:
|
||||
|
||||
Reference in new issue
Block a user