mirror of
https://github.com/MetaCubeX/metacubexd.git
synced 2024-11-24 09:45:35 +08:00
feat(config): new version update available indicator
This commit is contained in:
parent
fec982967d
commit
857d0c5387
@ -1,4 +1,5 @@
|
|||||||
import { createSignal, ResourceActions } from 'solid-js'
|
import ky from 'ky'
|
||||||
|
import { ResourceActions, createSignal } from 'solid-js'
|
||||||
import { toast } from 'solid-toast'
|
import { toast } from 'solid-toast'
|
||||||
import { useRequest } from '~/signals'
|
import { useRequest } from '~/signals'
|
||||||
import {
|
import {
|
||||||
@ -181,3 +182,46 @@ export const updateRuleProviderAPI = (providerName: string) => {
|
|||||||
|
|
||||||
return request.put(`providers/rules/${providerName}`)
|
return request.put(`providers/rules/${providerName}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const isUpdateAvailableAPI = async (versionResponse: string) => {
|
||||||
|
const match = /(alpha|beta|meta)-?(\w+)/.exec(versionResponse)
|
||||||
|
|
||||||
|
if (!match) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
const channel = match[1],
|
||||||
|
version = match[2]
|
||||||
|
|
||||||
|
if (channel === 'meta') {
|
||||||
|
const { assets } = await ky
|
||||||
|
.get('https://api.github.com/repos/MetaCubeX/Clash.Meta/releases/latest')
|
||||||
|
.json<{
|
||||||
|
assets: {
|
||||||
|
name: string
|
||||||
|
}[]
|
||||||
|
}>()
|
||||||
|
|
||||||
|
const alreadyLatest = assets.some(({ name }) => name.includes(version))
|
||||||
|
|
||||||
|
return !alreadyLatest
|
||||||
|
}
|
||||||
|
|
||||||
|
if (channel === 'alpha') {
|
||||||
|
const { assets } = await ky
|
||||||
|
.get(
|
||||||
|
'https://api.github.com/repos/MetaCubeX/Clash.Meta/releases/tags/Prerelease-Alpha',
|
||||||
|
)
|
||||||
|
.json<{
|
||||||
|
assets: {
|
||||||
|
name: string
|
||||||
|
}[]
|
||||||
|
}>()
|
||||||
|
|
||||||
|
const alreadyLatest = assets.some(({ name }) => name.includes(version))
|
||||||
|
|
||||||
|
return !alreadyLatest
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
@ -15,6 +15,7 @@ import {
|
|||||||
fetchBackendVersionAPI,
|
fetchBackendVersionAPI,
|
||||||
flushFakeIPDataAPI,
|
flushFakeIPDataAPI,
|
||||||
flushingFakeIPData,
|
flushingFakeIPData,
|
||||||
|
isUpdateAvailableAPI,
|
||||||
reloadConfigFileAPI,
|
reloadConfigFileAPI,
|
||||||
reloadingConfigFile,
|
reloadingConfigFile,
|
||||||
restartBackendAPI,
|
restartBackendAPI,
|
||||||
@ -448,17 +449,28 @@ const ConfigForXd = () => {
|
|||||||
|
|
||||||
const Versions = () => {
|
const Versions = () => {
|
||||||
const [backendVersion, setBackendVersion] = createSignal('')
|
const [backendVersion, setBackendVersion] = createSignal('')
|
||||||
|
const [isUpdateAvailable, setIsUpdateAvailable] = createSignal(false)
|
||||||
|
|
||||||
onMount(async () => {
|
onMount(async () => {
|
||||||
const version = await fetchBackendVersionAPI()
|
const version = await fetchBackendVersionAPI()
|
||||||
|
|
||||||
setBackendVersion(version)
|
setBackendVersion(version)
|
||||||
|
setIsUpdateAvailable(await isUpdateAvailableAPI(version))
|
||||||
})
|
})
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div class="grid grid-cols-2 gap-4">
|
<div class="grid grid-cols-2 gap-4">
|
||||||
<kbd class="kbd">{import.meta.env.version}</kbd>
|
<kbd class="kbd">{import.meta.env.version}</kbd>
|
||||||
<kbd class="kbd">{backendVersion()}</kbd>
|
|
||||||
|
<div class="relative">
|
||||||
|
<Show when={isUpdateAvailable()}>
|
||||||
|
<span class="absolute right-[-4px] top-[-4px] flex h-3 w-3">
|
||||||
|
<span class="absolute inline-flex h-full w-full animate-ping rounded-full bg-info opacity-75" />
|
||||||
|
<span class="inline-flex h-3 w-3 rounded-full bg-info" />
|
||||||
|
</span>
|
||||||
|
</Show>
|
||||||
|
|
||||||
|
<kbd class="kbd w-full">{backendVersion()}</kbd>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user