mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2026-04-13 05:20:28 +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));
|
|
};
|