Fix most formatting and linting errors

This commit is contained in:
Sky Leite
2023-02-03 23:50:25 -03:00
parent e20fd5042c
commit b6fce46081
10 changed files with 706 additions and 354 deletions
+81 -26
View File
@@ -16,6 +16,7 @@ from settings import SettingsManager
logger = getLogger("Updater")
class Updater:
def __init__(self, context) -> None:
self.context = context
@@ -26,7 +27,7 @@ class Updater:
"get_version": self.get_version,
"do_update": self.do_update,
"do_restart": self.do_restart,
"check_for_updates": self.check_for_updates
"check_for_updates": self.check_for_updates,
}
self.remoteVer = None
self.allRemoteVers = None
@@ -39,12 +40,14 @@ class Updater:
self.currentBranch = self.get_branch(self.context.settings)
except:
self.currentBranch = 0
logger.error("Current branch could not be determined, defaulting to \"Stable\"")
logger.error(
'Current branch could not be determined, defaulting to "Stable"'
)
if context:
context.web_app.add_routes([
web.post("/updater/{method_name}", self._handle_server_method_call)
])
context.web_app.add_routes(
[web.post("/updater/{method_name}", self._handle_server_method_call)]
)
context.loop.create_task(self.version_reloader())
async def _handle_server_method_call(self, request):
@@ -89,7 +92,10 @@ class Updater:
case 1 | 2:
url = "https://raw.githubusercontent.com/SteamDeckHomebrew/decky-loader/main/dist/plugin_loader-prerelease.service"
case _:
logger.error("You have an invalid branch set... Defaulting to prerelease service, please send the logs to the devs!")
logger.error(
"You have an invalid branch set... Defaulting to prerelease"
" service, please send the logs to the devs!"
)
url = "https://raw.githubusercontent.com/SteamDeckHomebrew/decky-loader/main/dist/plugin_loader-prerelease.service"
return str(url)
@@ -99,31 +105,58 @@ class Updater:
"current": self.localVer,
"remote": self.remoteVer,
"all": self.allRemoteVers,
"updatable": self.localVer != None
"updatable": self.localVer != None,
}
else:
return {"current": "unknown", "remote": self.remoteVer, "all": self.allRemoteVers, "updatable": False}
return {
"current": "unknown",
"remote": self.remoteVer,
"all": self.allRemoteVers,
"updatable": False,
}
async def check_for_updates(self):
logger.debug("checking for updates")
selectedBranch = self.get_branch(self.context.settings)
async with ClientSession() as web:
async with web.request("GET", "https://api.github.com/repos/SteamDeckHomebrew/decky-loader/releases", ssl=helpers.get_ssl_context()) as res:
async with web.request(
"GET",
"https://api.github.com/repos/SteamDeckHomebrew/decky-loader/releases",
ssl=helpers.get_ssl_context(),
) as res:
remoteVersions = await res.json()
self.allRemoteVers = remoteVersions
logger.debug("determining release type to find, branch is %i" % selectedBranch)
if selectedBranch == 0:
logger.debug("release type: release")
self.remoteVer = next(filter(lambda ver: ver["tag_name"].startswith("v") and not ver["prerelease"] and ver["tag_name"], remoteVersions), None)
self.remoteVer = next(
filter(
lambda ver: ver["tag_name"].startswith("v")
and not ver["prerelease"]
and ver["tag_name"],
remoteVersions,
),
None,
)
elif selectedBranch == 1:
logger.debug("release type: pre-release")
self.remoteVer = next(filter(lambda ver: ver["prerelease"] and ver["tag_name"].startswith("v") and ver["tag_name"].find("-pre"), remoteVersions), None)
self.remoteVer = next(
filter(
lambda ver: ver["prerelease"]
and ver["tag_name"].startswith("v")
and ver["tag_name"].find("-pre"),
remoteVersions,
),
None,
)
else:
logger.error("release type: NOT FOUND")
raise ValueError("no valid branch found")
logger.info("Updated remote version information")
tab = await get_gamepadui_tab()
await tab.evaluate_js(f"window.DeckyPluginLoader.notifyUpdates()", False, True, False)
await tab.evaluate_js(
f"window.DeckyPluginLoader.notifyUpdates()", False, True, False
)
return await self.get_version()
async def version_reloader(self):
@@ -133,7 +166,7 @@ class Updater:
await self.check_for_updates()
except:
pass
await sleep(60 * 60 * 6) # 6 hours
await sleep(60 * 60 * 6) # 6 hours
async def do_update(self):
logger.debug("Starting update.")
@@ -147,7 +180,9 @@ class Updater:
async with ClientSession() as web:
logger.debug("Downloading systemd service")
# download the relevant systemd service depending upon branch
async with web.request("GET", service_url, ssl=helpers.get_ssl_context(), allow_redirects=True) as res:
async with web.request(
"GET", service_url, ssl=helpers.get_ssl_context(), allow_redirects=True
) as res:
logger.debug("Downloading service file")
data = await res.content.read()
logger.debug(str(data))
@@ -157,22 +192,33 @@ class Updater:
out.write(data)
except Exception as e:
logger.error(f"Error at %s", exc_info=e)
with open(path.join(getcwd(), "plugin_loader.service"), "r", encoding="utf-8") as service_file:
with open(
path.join(getcwd(), "plugin_loader.service"), "r", encoding="utf-8"
) as service_file:
service_data = service_file.read()
service_data = service_data.replace("${HOMEBREW_FOLDER}", helpers.get_homebrew_path())
with open(path.join(getcwd(), "plugin_loader.service"), "w", encoding="utf-8") as service_file:
service_file.write(service_data)
service_data = service_data.replace(
"${HOMEBREW_FOLDER}", helpers.get_homebrew_path()
)
with open(
path.join(getcwd(), "plugin_loader.service"), "w", encoding="utf-8"
) as service_file:
service_file.write(service_data)
logger.debug("Saved service file")
logger.debug("Copying service file over current file.")
shutil.copy(service_file_path, "/etc/systemd/system/plugin_loader.service")
if not os.path.exists(path.join(getcwd(), ".systemd")):
os.mkdir(path.join(getcwd(), ".systemd"))
shutil.move(service_file_path, path.join(getcwd(), ".systemd")+"/plugin_loader.service")
shutil.move(
service_file_path,
path.join(getcwd(), ".systemd") + "/plugin_loader.service",
)
logger.debug("Downloading binary")
async with web.request("GET", download_url, ssl=helpers.get_ssl_context(), allow_redirects=True) as res:
total = int(res.headers.get('content-length', 0))
async with web.request(
"GET", download_url, ssl=helpers.get_ssl_context(), allow_redirects=True
) as res:
total = int(res.headers.get("content-length", 0))
# we need to not delete the binary until we have downloaded the new binary!
try:
remove(path.join(getcwd(), "PluginLoader"))
@@ -186,13 +232,22 @@ class Updater:
raw += len(c)
new_progress = round((raw / total) * 100)
if progress != new_progress:
self.context.loop.create_task(tab.evaluate_js(f"window.DeckyUpdater.updateProgress({new_progress})", False, False, False))
self.context.loop.create_task(
tab.evaluate_js(
f"window.DeckyUpdater.updateProgress({new_progress})",
False,
False,
False,
)
)
progress = new_progress
with open(path.join(getcwd(), ".loader.version"), "w", encoding="utf-8") as out:
with open(
path.join(getcwd(), ".loader.version"), "w", encoding="utf-8"
) as out:
out.write(version)
call(['chmod', '+x', path.join(getcwd(), "PluginLoader")])
call(["chmod", "+x", path.join(getcwd(), "PluginLoader")])
logger.info("Updated loader installation.")
await tab.evaluate_js("window.DeckyUpdater.finish()", False, False)
await self.do_restart()