feat: persist custom endpoints to settings.json

- Extend AppSettings to store custom endpoints for Claude and Codex
- Add Tauri commands: get/add/remove/update custom endpoints
- Update frontend API with endpoint persistence methods
- Modify EndpointSpeedTest to load/save custom endpoints via API
- Track endpoint last used time for future sorting/cleanup
- Store endpoints per app type in settings.json instead of localStorage
This commit is contained in:
Jason
2025-10-06 21:51:48 +08:00
parent 9932b92745
commit 498920dea6
7 changed files with 323 additions and 50 deletions

View File

@@ -1,6 +1,6 @@
import { invoke } from "@tauri-apps/api/core";
import { listen, UnlistenFn } from "@tauri-apps/api/event";
import { Provider, Settings } from "../types";
import { Provider, Settings, CustomEndpoint } from "../types";
// 应用类型
export type AppType = "claude" | "codex";
@@ -335,6 +335,63 @@ export const tauriAPI = {
throw error;
}
},
// 获取自定义端点列表
getCustomEndpoints: async (appType: AppType): Promise<CustomEndpoint[]> => {
try {
return await invoke<CustomEndpoint[]>("get_custom_endpoints", {
app_type: appType,
});
} catch (error) {
console.error("获取自定义端点列表失败:", error);
return [];
}
},
// 添加自定义端点
addCustomEndpoint: async (appType: AppType, url: string): Promise<void> => {
try {
await invoke("add_custom_endpoint", {
app_type: appType,
url,
});
} catch (error) {
console.error("添加自定义端点失败:", error);
throw error;
}
},
// 删除自定义端点
removeCustomEndpoint: async (
appType: AppType,
url: string,
): Promise<void> => {
try {
await invoke("remove_custom_endpoint", {
app_type: appType,
url,
});
} catch (error) {
console.error("删除自定义端点失败:", error);
throw error;
}
},
// 更新端点最后使用时间
updateEndpointLastUsed: async (
appType: AppType,
url: string,
): Promise<void> => {
try {
await invoke("update_endpoint_last_used", {
app_type: appType,
url,
});
} catch (error) {
console.error("更新端点最后使用时间失败:", error);
// 不抛出错误,因为这不是关键操作
}
},
};
// 创建全局 API 对象,兼容现有代码