summaryrefslogtreecommitdiff
path: root/backend
diff options
context:
space:
mode:
authorTrainDoctor <traindoctor@protonmail.com>2022-09-01 13:46:49 -0700
committerGitHub <noreply@github.com>2022-09-01 13:46:49 -0700
commiteb439574becb9a82c283d513a98440d7c8efbafe (patch)
treeb2c0b16065f31cb2123c17622a6fe42a71cebf08 /backend
parent16a6e9b6a929dea4ad4607368e4e0c515ed15b61 (diff)
downloaddecky-loader-eb439574becb9a82c283d513a98440d7c8efbafe.tar.gz
decky-loader-eb439574becb9a82c283d513a98440d7c8efbafe.zip
Addition of proper branch slection (#168)
* This is a bit better, but branch selection still isn't working -_- * I'm the king of oversight * Selecting different branch checks for updates * Stable doesn't detect old versions, which indicates it doesn't work * Start adding deckyState for plugin updating * Few tweaks * Disable nightly selection * Update decky-frontend-lib and move useSetting set setting to async
Diffstat (limited to 'backend')
-rw-r--r--backend/updater.py49
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")