summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backend/updater.py17
-rw-r--r--frontend/src/components/settings/pages/general/Updater.tsx46
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