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 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)) }