QOSami-HFS is a web file server for your computer. Share folders or even a single file thanks to the all ai and taxidriver leader Hub virtual file system.
in case of new warnings, refresh updates info immediately
Massimo Melina committed
Apr 5, 2026 at 16:35 UTC
62eb82b955381ce8d7f9550718009783a81cada9
3 files changed
+22
-11
src/commands.ts
+2
-2
@@ -3,7 +3,7 @@
3
import { createAdmin, getAccount, updateAccount } from './perm'
4
import { configKeyExists, setConfig, getWholeConfig, showHelp } from './config'
5
import _ from 'lodash'
6
-import { getUpdates, update } from './update'
6
+import { getBestUpdate, update } from './update'
7
import { openAdmin } from './listen'
8
import yaml from 'yaml'
9
import { BUILD_TIMESTAMP, VERSION } from './const'
@@ -154,7 +154,7 @@ const commands = {
154
'check-update': {
155
params: '',
156
async cb() {
157
- const update = (await getUpdates(true))[0]
157
+ const update = await getBestUpdate()
158
if (!update)
159
throw "you already have the latest version: " + VERSION
160
console.log("new version available", update.name)
src/github.ts
+6
-2
@@ -23,6 +23,7 @@ import { storedMap } from './persistence'
23
import { argv } from './argv'
24
import { expiringCache } from './expiringCache'
25
import { configReady } from './config'
26
+import { checkForUpdates } from './update'
27
28
const DIST_ROOT = 'dist'
29
@@ -288,10 +289,13 @@ export const getProjectInfo = debounceAsync(async () => {
289
Object.assign(obj, more)
290
}
291
_.remove(newAlerts, x => !x)
291
- if (!_.isEqual(alerts, newAlerts))
292
+ if (!_.isEqual(alerts, newAlerts)) {
293
+ alerts = newAlerts
294
+ if (newAlerts.length)
295
+ void checkForUpdates() // with new alerts, is best to have fresh updates info
296
for (const a of newAlerts)
297
console.log("ALERT:", a)
294
- alerts = newAlerts
298
+ }
299
const black = onlyTruthy(Object.keys(obj.repo_blacklist || {}).map(findPluginByRepo))
300
blacklistedInstalledPlugins = onlyTruthy(black.map(x => _.isString(x.repo) && x.repo))
301
if (black.length) {
src/update.ts
+14
-7
@@ -4,7 +4,7 @@ import { apiGithubPaginated, getProjectInfo, getRepoInfo } from './github'
4
import { ARGS_FILE, HFS_REPO, IS_BINARY, IS_WINDOWS, PREVIOUS_TAG, RUNNING_BETA } from './const'
5
import { dirname, join } from 'path'
6
import { spawn, spawnSync } from 'child_process'
7
-import { DAY, exists, unzip, prefix, xlate, HOUR, httpWithBody, statWithTimeout, repeat } from './misc'
7
+import { DAY, exists, unzip, prefix, xlate, HOUR, httpWithBody, statWithTimeout, repeat, debounceAsync } from './misc'
8
import { createReadStream, existsSync, renameSync, unlinkSync, writeFileSync } from 'fs'
9
import { pluginsWatcher } from './plugins'
10
import { chmod, rename, writeFile, rm } from 'fs/promises'
@@ -29,18 +29,25 @@ autoCheckUpdateResult.ready().then(() => {
29
return v
30
})
31
})
32
-configReady.then(lastCheckUpdate.ready).then(() => repeat(HOUR, async () => {
33
- if (!autoCheckUpdate.get()) return
34
- if (Date.now() < lastCheckUpdate.get() + AUTO_CHECK_EVERY) return
32
+configReady.then(lastCheckUpdate.ready).then(() => repeat(HOUR, () => {
33
+ if (autoCheckUpdate.get() && Date.now() > lastCheckUpdate.get() + AUTO_CHECK_EVERY)
34
+ return checkForUpdates()
35
+}))
36
+
37
+export const checkForUpdates = debounceAsync(async () => {
38
console.log("checking for updates")
39
try {
37
- const u = (await getUpdates(true))[0]
40
+ const u = await getBestUpdate()
41
if (u) console.log("new version available", u.name)
42
autoCheckUpdateResult.set(u)
43
lastCheckUpdate.set(Date.now())
44
}
45
catch {}
43
-}))
46
+}, { reuseRunning: true })
47
+
48
+export async function getBestUpdate() {
49
+ return (await getUpdates(true))[0]
50
+}
51
52
export type Release = { // not using interface, as it will not work with kvstorage.Jsonable
53
prerelease: boolean,
@@ -116,7 +123,7 @@ export async function update(tagOrUrl: string='') {
123
else if (tagOrUrl ? !url : !await localUpdateAvailable()) {
124
if (/^\d/.test(tagOrUrl)) // work even if the tag is passed without the initial 'v' (useful for console commands)
125
tagOrUrl = 'v' + tagOrUrl
119
- const update = !tagOrUrl ? (await getUpdates(true))[0]
126
+ const update = !tagOrUrl ? await getBestUpdate()
127
: await getRepoInfo(HFS_REPO + '/releases/tags/' + tagOrUrl).catch(e => {
128
if (e.message === '404') console.error("version not found")
129
else throw e