mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2026-04-14 05:51:02 +08:00
56 lines
1.4 KiB
TypeScript
56 lines
1.4 KiB
TypeScript
export type WebdavStatus = 'unknown' | 'ready' | 'failed'
|
|
|
|
interface WebdavStatusCache {
|
|
signature: string
|
|
status: WebdavStatus
|
|
updatedAt: number
|
|
}
|
|
|
|
const WEBDAV_STATUS_KEY = 'webdav_status_cache'
|
|
|
|
export const buildWebdavSignature = (
|
|
verge?: Pick<
|
|
IVergeConfig,
|
|
'webdav_url' | 'webdav_username' | 'webdav_password'
|
|
> | null,
|
|
) => {
|
|
const url = verge?.webdav_url?.trim() ?? ''
|
|
const username = verge?.webdav_username?.trim() ?? ''
|
|
const password = verge?.webdav_password ?? ''
|
|
|
|
if (!url && !username && !password) return ''
|
|
|
|
return JSON.stringify([url, username, password])
|
|
}
|
|
|
|
const canUseStorage = () => typeof localStorage !== 'undefined'
|
|
|
|
export const getWebdavStatus = (signature: string): WebdavStatus => {
|
|
if (!signature || !canUseStorage()) return 'unknown'
|
|
|
|
const raw = localStorage.getItem(WEBDAV_STATUS_KEY)
|
|
if (!raw) return 'unknown'
|
|
|
|
try {
|
|
const data = JSON.parse(raw) as Partial<WebdavStatusCache>
|
|
if (!data || data.signature !== signature) return 'unknown'
|
|
return data.status === 'ready' || data.status === 'failed'
|
|
? data.status
|
|
: 'unknown'
|
|
} catch {
|
|
return 'unknown'
|
|
}
|
|
}
|
|
|
|
export const setWebdavStatus = (signature: string, status: WebdavStatus) => {
|
|
if (!signature || !canUseStorage()) return
|
|
|
|
const payload: WebdavStatusCache = {
|
|
signature,
|
|
status,
|
|
updatedAt: Date.now(),
|
|
}
|
|
|
|
localStorage.setItem(WEBDAV_STATUS_KEY, JSON.stringify(payload))
|
|
}
|