diff options
Diffstat (limited to 'backend/updater.py')
| -rw-r--r-- | backend/updater.py | 49 |
1 files changed, 38 insertions, 11 deletions
diff --git a/backend/updater.py b/backend/updater.py index bd61f8a8..ba62efd8 100644 --- a/backend/updater.py +++ b/backend/updater.py @@ -1,25 +1,26 @@ import uuid -from logging import getLogger -from json.decoder import JSONDecodeError - from asyncio import sleep - -from aiohttp import ClientSession, web - -from injector import inject_to_tab, get_tab - +from ensurepip import version +from json.decoder import JSONDecodeError +from logging import getLogger from os import getcwd, path, remove - from subprocess import call +from aiohttp import ClientSession, web + import helpers +from injector import get_tab, inject_to_tab +from settings import SettingsManager logger = getLogger("Updater") class Updater: def __init__(self, context) -> None: self.context = context + self.settings = self.context.settings + # Exposes updater methods to frontend self.updater_methods = { + "get_branch": self.get_branch, "get_version": self.get_version, "do_update": self.do_update, "do_restart": self.do_restart, @@ -28,6 +29,13 @@ class Updater: self.remoteVer = None self.allRemoteVers = None try: + self.currentBranch = self.get_branch(self.context.settings) + if int(self.currentBranch) == -1: + raise ValueError("get_branch could not determine branch!") + except: + self.currentBranch = 0 + logger.error("Current branch could not be determined, defaulting to \"Stable\"") + try: with open(path.join(getcwd(), ".loader.version"), 'r') as version_file: self.localVer = version_file.readline().replace("\n", "") except: @@ -55,6 +63,10 @@ class Updater: res["success"] = False return web.json_response(res) + async def get_branch(self, manager: SettingsManager): + logger.debug("current branch: %i" % manager.getSetting("branch", -1)) + return manager.getSetting("branch", -1) + async def get_version(self): if self.localVer: return { @@ -67,11 +79,27 @@ class Updater: return {"current": "unknown", "remote": self.remoteVer, "all": self.allRemoteVers, "updatable": False} async def check_for_updates(self): + logger.debug("checking for updates") + selectedBranch = await 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: remoteVersions = await res.json() self.allRemoteVers = remoteVersions - self.remoteVer = next(filter(lambda ver: ver["prerelease"] and ver["tag_name"].startswith("v") and ver["tag_name"].find("-pre"), remoteVersions), None) + 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) + 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) + # elif selectedBranch == 2: + # logger.debug("release type: nightly") + # self.remoteVer = next(filter(lambda ver: ver["prerelease"] and ver["tag_name"].startswith("v") and ver["tag_name"].find("nightly"), remoteVersions), None) + else: + logger.error("release type: NOT FOUND") + raise ValueError("no valid branch found") + # doesn't make it to this line below or farther + # logger.debug("Remote Version: %s" % self.remoteVer.find("name")) logger.info("Updated remote version information") tab = await get_tab("SP") await tab.evaluate_js(f"window.DeckyPluginLoader.notifyUpdates()", False, True, False) @@ -88,7 +116,6 @@ class Updater: async def do_update(self): version = self.remoteVer["tag_name"] - #TODO don't hardcode this download_url = self.remoteVer["assets"][0]["browser_download_url"] tab = await get_tab("SP") |
