Files
Archive/clash-nyanpasu/frontend/interface/ipc/useClashCore.ts
2024-06-11 20:31:39 +02:00

103 lines
2.0 KiB
TypeScript

import {
Clash,
ProviderItem,
ProviderRules,
clash as clashApi,
} from "@/service";
import * as tauri from "@/service/tauri";
import useSWR from "swr";
export const useClashCore = () => {
const { getGroupDelay, getProxiesDelay, ...clash } = clashApi();
const { data, isLoading, mutate } = useSWR("getProxies", tauri.getProxies);
const updateGroupDelay = async (
index: number,
options?: Clash.DelayOptions,
) => {
const group = data?.groups[index];
if (!group) {
return;
}
await getGroupDelay(group?.name, options);
await mutate();
};
const updateProxiesDelay = async (
name: string,
options?: Clash.DelayOptions,
) => {
const result = await getProxiesDelay(name, options);
await mutate();
return result;
};
const setGroupProxy = async (index: number, name: string) => {
const group = data?.groups[index];
if (!group) {
return;
}
await tauri.selectProxy(group?.name, name);
await mutate();
};
const setGlobalProxy = async (name: string) => {
const group = data?.global;
if (!group) {
return;
}
await tauri.selectProxy(group?.name, name);
await mutate();
};
const getRules = useSWR("getRules", clash.getRules);
const getRulesProviders = useSWR<{ [name: string]: ProviderRules }>(
"getRulesProviders",
clash.getRulesProviders,
);
const updateRulesProviders = async (name: string) => {
await clash.updateRulesProviders(name);
await getRulesProviders.mutate();
};
const getProxiesProviders = useSWR<{ [name: string]: ProviderItem }>(
"getProxiesProviders",
clash.getProxiesProviders,
);
const updateProxiesProviders = async (name: string) => {
await clash.updateProxiesProviders(name);
await getProxiesProviders.mutate();
};
return {
data,
isLoading,
updateGroupDelay,
updateProxiesDelay,
setGroupProxy,
setGlobalProxy,
getRules,
getRulesProviders,
updateRulesProviders,
getProxiesProviders,
updateProxiesProviders,
};
};