allow users to manually check for updates

This commit is contained in:
AAGaming
2022-07-15 12:16:57 -04:00
parent 28b91963a9
commit f2fbd399fe
2 changed files with 40 additions and 23 deletions
+9 -4
View File
@@ -22,7 +22,8 @@ class Updater:
self.updater_methods = { self.updater_methods = {
"get_version": self.get_version, "get_version": self.get_version,
"do_update": self.do_update, "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 self.remoteVer = None
try: try:
@@ -63,14 +64,18 @@ class Updater:
else: else:
return {"current": "unknown", "updatable": False} return {"current": "unknown", "updatable": False}
async def version_reloader(self): async def check_for_updates(self):
while True:
try:
async with ClientSession() as web: 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() 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) 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") logger.info("Updated remote version information")
return await self.get_version()
async def version_reloader(self):
while True:
try:
await self.check_for_updates()
except: except:
pass pass
await sleep(60 * 60) # 1 hour await sleep(60 * 60) # 1 hour
@@ -24,6 +24,7 @@ export default function UpdaterSettings() {
const [versionInfo, setVersionInfo] = useState<VerInfo | null>(null); const [versionInfo, setVersionInfo] = useState<VerInfo | null>(null);
const [updateProgress, setUpdateProgress] = useState<number>(-1); const [updateProgress, setUpdateProgress] = useState<number>(-1);
const [reloading, setReloading] = useState<boolean>(false); const [reloading, setReloading] = useState<boolean>(false);
const [checkingForUpdates, setCheckingForUpdates] = useState<boolean>(false);
useEffect(() => { useEffect(() => {
(async () => { (async () => {
const res = (await callUpdaterMethod('get_version')) as { result: VerInfo }; const res = (await callUpdaterMethod('get_version')) as { result: VerInfo };
@@ -51,10 +52,16 @@ export default function UpdaterSettings() {
> >
{updateProgress == -1 ? ( {updateProgress == -1 ? (
<DialogButton <DialogButton
disabled={ disabled={!versionInfo?.updatable || !versionInfo?.remote || checkingForUpdates}
!versionInfo?.updatable || !versionInfo?.remote || versionInfo.remote.tag_name == versionInfo.current 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);
} }
onClick={async () => { : async () => {
window.DeckyUpdater = { window.DeckyUpdater = {
updateProgress: (i) => { updateProgress: (i) => {
setUpdateProgress(i); setUpdateProgress(i);
@@ -67,9 +74,14 @@ export default function UpdaterSettings() {
}; };
setUpdateProgress(0); setUpdateProgress(0);
callUpdaterMethod('do_update'); callUpdaterMethod('do_update');
}} }
}
> >
Update {checkingForUpdates
? 'Checking'
: versionInfo?.remote?.tag_name == versionInfo?.current
? 'Check For Updates'
: 'Install Update'}
</DialogButton> </DialogButton>
) : ( ) : (
<ProgressBarWithInfo <ProgressBarWithInfo