From 01b78f850043eebedcd872eda1cfa4a182f869a2 Mon Sep 17 00:00:00 2001 From: William Hubbard <75867393+Markil3@users.noreply.github.com> Date: Sat, 5 Feb 2022 19:32:56 +0000 Subject: [PATCH] Adds support for Windows installations --- loadSteamInfo | 37 +++++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/loadSteamInfo b/loadSteamInfo index 19343f5..0a47185 100644 --- a/loadSteamInfo +++ b/loadSteamInfo @@ -6,8 +6,10 @@ import requests from pathlib import Path from argparse import Namespace from io import StringIO +import winreg steamClient = False +userdata = None class App: """ @@ -469,9 +471,10 @@ def copyContent(name, content, byte=True): Whether or not to write in bytenode. Defaults to true. """ - userdata = Path(Path.home(), ".steam", "root", "userdata") for user in userdata.iterdir(): toFile = Path(user, name) + if not toFile.parent.is_dir(): + toFile.parent.mkdir(parents=True) print("Writing to %s" % (toFile)) mode = 'w' if byte: @@ -497,8 +500,7 @@ def copyFile(fromURL, toCode): fromURLComp = fromURL.split('/') fromName = fromURLComp[6] - fromCode = fromURLComp[5] - userdata = Path(Path.home(), ".steam", "root", "userdata") + fromCode = fromURLComp[5]\ # Gets the final file name if fromName == "library_hero.jpg": @@ -513,6 +515,7 @@ def copyFile(fromURL, toCode): print("Copying %s (%s) to %s" % (fromName, fromCode, toName)) fromContent = requests.get(fromURL, allow_redirects=True) + copyContent(Path("config", "grid", toName), fromContent.content) def copyContents(ids): @@ -552,7 +555,7 @@ def copyContents(ids): # Generate the positioning data for logos and such logo = data["apps"][ids[i][0]]["common"]["library_assets"]["logo_position"] logo2 = { - "nversion": 1, + "nVersion": 1, "logoPosition": { "pinnedPosition": logo["pinned_position"], "nWidthPct": logo["width_pct"], @@ -577,13 +580,12 @@ def copyContents(ids): ], [ "customimage", { "version": 1, - "data": logo2 + "data": logo2["logoPosition"] } ] ] copyContent(Path("config", "librarycache", str(ids[i][1]) + ".json"), json.dumps(logo2), byte=False) - - userdata = Path(Path.home(), ".steam", "root", "userdata") + # Write the actual shortcut data. for user in userdata.iterdir(): shortcutData = parseShortcuts(Path(user, "config", "shortcuts.vdf")) @@ -624,10 +626,25 @@ if __name__ == "__main__": else: for op in term[1:]: ops.append(op) - if len(keys) < 2 and not "a" in ops: + if len(keys) < 1 and not "a" in ops: print("%s [OPTIONS] ( )..." % __file__) print("%s [OPTIONS] ..." % __file__) exit(1) + + # Find the steam installation directory. + try: + import winreg + hkey = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, "SOFTWARE\WOW6432Node\Valve\Steam") + if hkey: + userdata = Path(winreg.QueryValueEx(hkey, "InstallPath")[0], "userdata") + except: + hkey = None + if not userdata: + userdata = Path(Path.home(), ".steam", "root", "userdata") + if not userdata: + print("Could not find Steam installation directory.", file=sys.stderr) + exit(1) + if ids: # In this event, we make sure that all IDs have a mapping, by checking # the last index. @@ -639,12 +656,12 @@ if __name__ == "__main__": else: tempApps = {} apps = [] - # Find the steam installation directory. - userdata = Path(Path.home(), ".steam", "root", "userdata") + # Loop through all user folders for user in userdata.iterdir(): # The shortcut file contain a collection of games that the client recognizes shortcutData = parseShortcuts(Path(user, "config", "shortcuts.vdf")) + # Obtain for app in shortcutData: if type(app) != dict: if "a" in ops: