Files
clash-verge-rev/src/hooks/use-update.ts
T
2026-08-19 07:27:43 +08:00

64 lines
1.7 KiB
TypeScript

import { fetchCacheData, setCacheData, useQuery } from '@/services/query-client'
import { checkUpdateSafe } from '@/services/update'
import { useVerge } from './use-verge'
const LAST_CHECK_KEY = 'last_check_update'
export const readLastCheckTime = (): number | null => {
const stored = localStorage.getItem(LAST_CHECK_KEY)
if (!stored) return null
const ts = parseInt(stored, 10)
return isNaN(ts) ? null : ts
}
export const updateLastCheckTime = (timestamp?: number): number => {
const now = timestamp ?? Date.now()
localStorage.setItem(LAST_CHECK_KEY, now.toString())
setCacheData([LAST_CHECK_KEY], now)
return now
}
export const useUpdate = (enabled: boolean = true) => {
const { verge } = useVerge()
const { auto_check_update } = verge || {}
const shouldCheck = enabled && auto_check_update !== false
const fetchUpdate = async () => {
const result = await checkUpdateSafe()
updateLastCheckTime()
return result
}
const { data: updateInfo, isFetching: isValidating } = useQuery({
queryKey: ['checkUpdate'],
queryFn: fetchUpdate,
enabled: shouldCheck,
retry: 2,
staleTime: 60 * 60 * 1000,
refetchInterval: 24 * 60 * 60 * 1000,
refetchIntervalInBackground: false,
refetchOnWindowFocus: false,
})
const checkUpdate = async () => {
const data = await fetchCacheData(['checkUpdate'], fetchUpdate)
return { data }
}
const { data: lastCheckUpdate } = useQuery({
queryKey: [LAST_CHECK_KEY],
queryFn: readLastCheckTime,
refetchOnWindowFocus: false,
refetchOnReconnect: false,
})
return {
updateInfo,
checkUpdate,
loading: isValidating,
lastCheckUpdate: lastCheckUpdate ?? null,
}
}