diff options
| author | AAGaming <aa@mail.catvibers.me> | 2022-07-15 12:16:57 -0400 |
|---|---|---|
| committer | AAGaming <aa@mail.catvibers.me> | 2022-07-15 12:16:57 -0400 |
| commit | f2fbd399fe875e5aaaaea678d1fb1a824a74932e (patch) | |
| tree | f66a96b6d821b25152fcdd27325597b69f903100 | |
| parent | 28b91963a9fba21c8bef0f62ecd603b14cb6284d (diff) | |
| download | decky-loader-f2fbd399fe875e5aaaaea678d1fb1a824a74932e.tar.gz decky-loader-f2fbd399fe875e5aaaaea678d1fb1a824a74932e.zip | |
allow users to manually check for updates
| -rw-r--r-- | backend/updater.py | 17 | ||||
| -rw-r--r-- | frontend/src/components/settings/pages/general/Updater.tsx | 46 |
2 files changed, 40 insertions, 23 deletions
diff --git a/backend/updater.py b/backend/updater.py index d7aed0d7..76c42fe1 100644 --- a/backend/updater.py +++ b/backend/updater.py @@ -22,7 +22,8 @@ class Updater: self.updater_methods = { "get_version": self.get_version, "do_update": self.do_update, - "do_restart": self.do_restart + "do_restart": self.do_restart, + "check_for_updates": self.check_for_updates } self.remoteVer = None try: @@ -63,14 +64,18 @@ class Updater: else: return {"current": "unknown", "updatable": False} + async def check_for_updates(self): + 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.remoteVer = next(filter(lambda ver: ver["prerelease"] and ver["tag_name"].startswith("v") and ver["tag_name"].endswith("-pre"), remoteVersions), None) + logger.info("Updated remote version information") + return await self.get_version() + async def version_reloader(self): while True: try: - 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.remoteVer = next(filter(lambda ver: ver["prerelease"] and ver["tag_name"].startswith("v") and ver["tag_name"].endswith("-pre"), remoteVersions), None) - logger.info("Updated remote version information") + await self.check_for_updates() except: pass await sleep(60 * 60) # 1 hour diff --git a/frontend/src/components/settings/pages/general/Updater.tsx b/frontend/src/components/settings/pages/general/Updater.tsx index 2772bb2c..e7277631 100644 --- a/frontend/src/components/settings/pages/general/Updater.tsx +++ b/frontend/src/components/settings/pages/general/Updater.tsx @@ -24,6 +24,7 @@ export default function UpdaterSettings() { const [versionInfo, setVersionInfo] = useState<VerInfo | null>(null); const [updateProgress, setUpdateProgress] = useState<number>(-1); const [reloading, setReloading] = useState<boolean>(false); + const [checkingForUpdates, setCheckingForUpdates] = useState<boolean>(false); useEffect(() => { (async () => { const res = (await callUpdaterMethod('get_version')) as { result: VerInfo }; @@ -51,25 +52,36 @@ export default function UpdaterSettings() { > {updateProgress == -1 ? ( <DialogButton - disabled={ - !versionInfo?.updatable || !versionInfo?.remote || versionInfo.remote.tag_name == versionInfo.current + disabled={!versionInfo?.updatable || !versionInfo?.remote || checkingForUpdates} + onClick={ + versionInfo?.remote?.tag_name == versionInfo?.current + ? async () => { + setCheckingForUpdates(true); + const res = (await callUpdaterMethod('check_for_updates')) as { result: VerInfo }; + setVersionInfo(res.result); + setCheckingForUpdates(false); + } + : async () => { + window.DeckyUpdater = { + updateProgress: (i) => { + setUpdateProgress(i); + }, + finish: async () => { + setUpdateProgress(0); + setReloading(true); + await finishUpdate(); + }, + }; + setUpdateProgress(0); + callUpdaterMethod('do_update'); + } } - onClick={async () => { - window.DeckyUpdater = { - updateProgress: (i) => { - setUpdateProgress(i); - }, - finish: async () => { - setUpdateProgress(0); - setReloading(true); - await finishUpdate(); - }, - }; - setUpdateProgress(0); - callUpdaterMethod('do_update'); - }} > - Update + {checkingForUpdates + ? 'Checking' + : versionInfo?.remote?.tag_name == versionInfo?.current + ? 'Check For Updates' + : 'Install Update'} </DialogButton> ) : ( <ProgressBarWithInfo |
