|
|
|
@ -1,6 +1,8 @@
|
|
|
|
|
import { create } from 'zustand';
|
|
|
|
|
import { immer } from 'zustand/middleware/immer';
|
|
|
|
|
import { persist } from 'zustand/middleware';
|
|
|
|
|
import { urlResolve } from '../lib/utils';
|
|
|
|
|
import { zustandRNStorage } from '../lib/utils/storage';
|
|
|
|
|
|
|
|
|
|
interface ServerInfo {
|
|
|
|
|
name?: string;
|
|
|
|
@ -17,46 +19,54 @@ interface ServerStoreState {
|
|
|
|
|
|
|
|
|
|
const defaultServerList: ServerInfo[] = [
|
|
|
|
|
{
|
|
|
|
|
name: 'Tailchat Nightly',
|
|
|
|
|
name: 'Tailchat',
|
|
|
|
|
url: 'https://nightly.paw.msgbyte.com/',
|
|
|
|
|
version: 'nightly',
|
|
|
|
|
},
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
export const useServerStore = create<ServerStoreState>()(
|
|
|
|
|
immer((set) => ({
|
|
|
|
|
serverList: defaultServerList,
|
|
|
|
|
selectedServerInfo: null,
|
|
|
|
|
addServer: async (url: string) => {
|
|
|
|
|
try {
|
|
|
|
|
// 获取 Tailchat 客户端配置
|
|
|
|
|
const res = await fetch(urlResolve(url, './tailchat.manifest'));
|
|
|
|
|
const clientConfig = await res.json();
|
|
|
|
|
const { version, serviceUrl } = clientConfig;
|
|
|
|
|
console.log('获取Tailchat客户端配置成功', clientConfig);
|
|
|
|
|
persist(
|
|
|
|
|
immer((set) => ({
|
|
|
|
|
serverList: defaultServerList,
|
|
|
|
|
selectedServerInfo: null,
|
|
|
|
|
addServer: async (url: string) => {
|
|
|
|
|
try {
|
|
|
|
|
// 获取 Tailchat 客户端配置
|
|
|
|
|
const res = await fetch(urlResolve(url, './tailchat.manifest'));
|
|
|
|
|
const clientConfig = await res.json();
|
|
|
|
|
const { version, serviceUrl } = clientConfig;
|
|
|
|
|
console.log('获取Tailchat客户端配置成功', clientConfig);
|
|
|
|
|
|
|
|
|
|
// 获取 Tailchat 服务端配置
|
|
|
|
|
const res2 = await fetch(
|
|
|
|
|
urlResolve(serviceUrl ?? url, './api/config/client')
|
|
|
|
|
);
|
|
|
|
|
const serviceConfig = (await res2.json()).data;
|
|
|
|
|
console.log('获取Tailchat服务端配置成功', serviceConfig);
|
|
|
|
|
// 获取 Tailchat 服务端配置
|
|
|
|
|
const res2 = await fetch(
|
|
|
|
|
urlResolve(serviceUrl ?? url, './api/config/client')
|
|
|
|
|
);
|
|
|
|
|
const serviceConfig = (await res2.json()).data;
|
|
|
|
|
console.log('获取Tailchat服务端配置成功', serviceConfig);
|
|
|
|
|
|
|
|
|
|
set((state) => {
|
|
|
|
|
state.serverList.push({
|
|
|
|
|
name: serviceConfig.appName ?? 'Tailchat',
|
|
|
|
|
url,
|
|
|
|
|
version,
|
|
|
|
|
set((state) => {
|
|
|
|
|
state.serverList.push({
|
|
|
|
|
name: serviceConfig.appName ?? 'Tailchat',
|
|
|
|
|
url,
|
|
|
|
|
version,
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
} catch (err) {
|
|
|
|
|
console.error('获取服务器配置失败:', err);
|
|
|
|
|
throw err;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
selectServer: (serverInfo: ServerInfo) => {
|
|
|
|
|
set({
|
|
|
|
|
selectedServerInfo: serverInfo,
|
|
|
|
|
});
|
|
|
|
|
} catch (err) {
|
|
|
|
|
console.error('获取服务器配置失败:', err);
|
|
|
|
|
throw err;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
selectServer: (serverInfo: ServerInfo) => {
|
|
|
|
|
set({
|
|
|
|
|
selectedServerInfo: serverInfo,
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
}))
|
|
|
|
|
},
|
|
|
|
|
})),
|
|
|
|
|
{
|
|
|
|
|
name: 'server',
|
|
|
|
|
storage: zustandRNStorage,
|
|
|
|
|
partialize: (state) => ({ serverList: state.serverList }),
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
);
|
|
|
|
|