Adds support for Windows installations
This commit is contained in:
@@ -6,8 +6,10 @@ import requests
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from argparse import Namespace
|
from argparse import Namespace
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
|
import winreg
|
||||||
|
|
||||||
steamClient = False
|
steamClient = False
|
||||||
|
userdata = None
|
||||||
|
|
||||||
class App:
|
class App:
|
||||||
"""
|
"""
|
||||||
@@ -469,9 +471,10 @@ def copyContent(name, content, byte=True):
|
|||||||
Whether or not to write in bytenode. Defaults to true.
|
Whether or not to write in bytenode. Defaults to true.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
userdata = Path(Path.home(), ".steam", "root", "userdata")
|
|
||||||
for user in userdata.iterdir():
|
for user in userdata.iterdir():
|
||||||
toFile = Path(user, name)
|
toFile = Path(user, name)
|
||||||
|
if not toFile.parent.is_dir():
|
||||||
|
toFile.parent.mkdir(parents=True)
|
||||||
print("Writing to %s" % (toFile))
|
print("Writing to %s" % (toFile))
|
||||||
mode = 'w'
|
mode = 'w'
|
||||||
if byte:
|
if byte:
|
||||||
@@ -497,8 +500,7 @@ def copyFile(fromURL, toCode):
|
|||||||
|
|
||||||
fromURLComp = fromURL.split('/')
|
fromURLComp = fromURL.split('/')
|
||||||
fromName = fromURLComp[6]
|
fromName = fromURLComp[6]
|
||||||
fromCode = fromURLComp[5]
|
fromCode = fromURLComp[5]\
|
||||||
userdata = Path(Path.home(), ".steam", "root", "userdata")
|
|
||||||
|
|
||||||
# Gets the final file name
|
# Gets the final file name
|
||||||
if fromName == "library_hero.jpg":
|
if fromName == "library_hero.jpg":
|
||||||
@@ -513,6 +515,7 @@ def copyFile(fromURL, toCode):
|
|||||||
|
|
||||||
print("Copying %s (%s) to %s" % (fromName, fromCode, toName))
|
print("Copying %s (%s) to %s" % (fromName, fromCode, toName))
|
||||||
fromContent = requests.get(fromURL, allow_redirects=True)
|
fromContent = requests.get(fromURL, allow_redirects=True)
|
||||||
|
|
||||||
copyContent(Path("config", "grid", toName), fromContent.content)
|
copyContent(Path("config", "grid", toName), fromContent.content)
|
||||||
|
|
||||||
def copyContents(ids):
|
def copyContents(ids):
|
||||||
@@ -552,7 +555,7 @@ def copyContents(ids):
|
|||||||
# Generate the positioning data for logos and such
|
# Generate the positioning data for logos and such
|
||||||
logo = data["apps"][ids[i][0]]["common"]["library_assets"]["logo_position"]
|
logo = data["apps"][ids[i][0]]["common"]["library_assets"]["logo_position"]
|
||||||
logo2 = {
|
logo2 = {
|
||||||
"nversion": 1,
|
"nVersion": 1,
|
||||||
"logoPosition": {
|
"logoPosition": {
|
||||||
"pinnedPosition": logo["pinned_position"],
|
"pinnedPosition": logo["pinned_position"],
|
||||||
"nWidthPct": logo["width_pct"],
|
"nWidthPct": logo["width_pct"],
|
||||||
@@ -577,13 +580,12 @@ def copyContents(ids):
|
|||||||
], [
|
], [
|
||||||
"customimage", {
|
"customimage", {
|
||||||
"version": 1,
|
"version": 1,
|
||||||
"data": logo2
|
"data": logo2["logoPosition"]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
copyContent(Path("config", "librarycache", str(ids[i][1]) + ".json"), json.dumps(logo2), byte=False)
|
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.
|
# Write the actual shortcut data.
|
||||||
for user in userdata.iterdir():
|
for user in userdata.iterdir():
|
||||||
shortcutData = parseShortcuts(Path(user, "config", "shortcuts.vdf"))
|
shortcutData = parseShortcuts(Path(user, "config", "shortcuts.vdf"))
|
||||||
@@ -624,10 +626,25 @@ if __name__ == "__main__":
|
|||||||
else:
|
else:
|
||||||
for op in term[1:]:
|
for op in term[1:]:
|
||||||
ops.append(op)
|
ops.append(op)
|
||||||
if len(keys) < 2 and not "a" in ops:
|
if len(keys) < 1 and not "a" in ops:
|
||||||
print("%s [OPTIONS] (<fromId> <toId>)..." % __file__)
|
print("%s [OPTIONS] (<fromId> <toId>)..." % __file__)
|
||||||
print("%s [OPTIONS] <term>..." % __file__)
|
print("%s [OPTIONS] <term>..." % __file__)
|
||||||
exit(1)
|
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:
|
if ids:
|
||||||
# In this event, we make sure that all IDs have a mapping, by checking
|
# In this event, we make sure that all IDs have a mapping, by checking
|
||||||
# the last index.
|
# the last index.
|
||||||
@@ -639,12 +656,12 @@ if __name__ == "__main__":
|
|||||||
else:
|
else:
|
||||||
tempApps = {}
|
tempApps = {}
|
||||||
apps = []
|
apps = []
|
||||||
# Find the steam installation directory.
|
|
||||||
userdata = Path(Path.home(), ".steam", "root", "userdata")
|
|
||||||
# Loop through all user folders
|
# Loop through all user folders
|
||||||
for user in userdata.iterdir():
|
for user in userdata.iterdir():
|
||||||
# The shortcut file contain a collection of games that the client recognizes
|
# The shortcut file contain a collection of games that the client recognizes
|
||||||
shortcutData = parseShortcuts(Path(user, "config", "shortcuts.vdf"))
|
shortcutData = parseShortcuts(Path(user, "config", "shortcuts.vdf"))
|
||||||
|
# Obtain
|
||||||
for app in shortcutData:
|
for app in shortcutData:
|
||||||
if type(app) != dict:
|
if type(app) != dict:
|
||||||
if "a" in ops:
|
if "a" in ops:
|
||||||
|
|||||||
Reference in New Issue
Block a user