fix: automatic update of service list (#913)

* fix: automatic update of service list

* docs: add release note
This commit is contained in:
BiggerRain
2025-10-10 14:26:59 +08:00
committed by GitHub
parent f03ad8a6c8
commit 5c76c92c95
9 changed files with 38 additions and 21 deletions

View File

@@ -17,6 +17,8 @@ feat: support switching groups via keyboard shortcuts #911
### 🐛 Bug fix
fix: automatic update of service list #913
### ✈️ Improvements
refactor: improve sorting logic of search results #910

View File

@@ -30,19 +30,23 @@ export function AssistantList({ assistantIDs = [] }: AssistantListProps) {
const setCurrentAssistant = useConnectStore((state) => {
return state.setCurrentAssistant;
});
const assistantList = useConnectStore((state) => state.assistantList);
const aiAssistant = useShortcutsStore((state) => state.aiAssistant);
const [assistants, setAssistants] = useState<any[]>([]);
const [isRefreshing, setIsRefreshing] = useState(false);
const popoverRef = useRef<HTMLDivElement>(null);
const popoverButtonRef = useRef<HTMLButtonElement>(null);
const searchInputRef = useRef<HTMLInputElement>(null);
const [keyword, setKeyword] = useState("");
const debounceKeyword = useDebounce(keyword, { wait: 500 });
const askAiAssistantId = useSearchStore((state) => state.askAiAssistantId);
const setAskAiAssistantId = useSearchStore((state) => {
return state.setAskAiAssistantId;
});
const assistantList = useConnectStore((state) => state.assistantList);
const { fetchAssistant } = AssistantFetcher({
debounceKeyword,

View File

@@ -18,7 +18,10 @@ import StatusIndicator from "@/components/Cloud/StatusIndicator";
import { useAuthStore } from "@/stores/authStore";
import { useSearchStore } from "@/stores/searchStore";
import { useServers } from "@/hooks/useServers";
import { getCurrentWindowService, setCurrentWindowService } from "@/commands/windowService";
import {
getCurrentWindowService,
setCurrentWindowService,
} from "@/commands/windowService";
interface ServerListProps {
clearChat: () => void;
@@ -33,10 +36,9 @@ export function ServerList({ clearChat }: ServerListProps) {
);
const setEndpoint = useAppStore((state) => state.setEndpoint);
const isTauri = useAppStore((state) => state.isTauri);
const currentService = useConnectStore((state) => state.currentService);
const cloudSelectService = useConnectStore((state) => {
return state.cloudSelectService;
});
const serverList = useConnectStore((state) => state.serverList);
const { setMessages } = useChatStore();
@@ -55,7 +57,6 @@ export function ServerList({ clearChat }: ServerListProps) {
const serverListButtonRef = useRef<HTMLButtonElement>(null);
const { refreshServerList } = useServers();
const serverList = useConnectStore((state) => state.serverList);
const switchServer = async (server: IServer) => {
if (!server) return;
@@ -95,8 +96,10 @@ export function ServerList({ clearChat }: ServerListProps) {
} else {
switchServer(enabledServers[enabledServers.length - 1]);
}
} else {
setCurrentWindowService({});
}
}, [currentService?.id, cloudSelectService?.id, serverList]);
}, [serverList]);
useEffect(() => {
if (!askAiServerId || serverList.length === 0) return;

View File

@@ -37,8 +37,6 @@ const SessionFile = (props: SessionFileProps) => {
const getUploadedFiles = async () => {
if (isTauri) {
console.log("sessionId", sessionId);
const response: any = await platformAdapter.commands(
"get_attachment_by_ids",
{

View File

@@ -107,7 +107,7 @@ const AskAi: FC<AskAiProps> = (props) => {
unlisten.current = await platformAdapter.listenEvent(
"quick-ai-access-client-id",
({ payload }) => {
console.log("ask_ai", JSON.parse(payload));
// console.log("ask_ai", JSON.parse(payload));
const chunkData = JSON.parse(payload);

View File

@@ -11,10 +11,6 @@ import {
export const useServers = () => {
const setServerList = useConnectStore((state) => state.setServerList);
const currentService = useConnectStore((state) => state.currentService);
const cloudSelectService = useConnectStore((state) => {
return state.cloudSelectService;
});
const getAllServerList = async () => {
try {
@@ -73,7 +69,7 @@ export const useServers = () => {
await setCurrentWindowService({ ...service, enabled });
await getAllServerList();
},
[currentService, cloudSelectService]
[]
);
const removeServer = useCallback(
@@ -81,7 +77,7 @@ export const useServers = () => {
await platformAdapter.commands("remove_coco_server", id);
await getAllServerList();
},
[currentService?.id, cloudSelectService?.id]
[]
);
const logoutServer = useCallback(async (id: string) => {
@@ -92,7 +88,7 @@ export const useServers = () => {
useEffect(() => {
getAllServerList();
}, [currentService?.enabled, cloudSelectService?.enabled]);
}, []);
return {
getAllServerList,

View File

@@ -117,7 +117,8 @@ export const useSyncStore = () => {
const setShowTooltip = useAppStore((state) => state.setShowTooltip);
const setEndpoint = useAppStore((state) => state.setEndpoint);
const setLanguage = useAppStore((state) => state.setLanguage);
const { setCurrentService } = useConnectStore();
const setServerListSilently = useConnectStore((state) => state.setServerListSilently);
useEffect(() => {
if (!resetFixedWindow) {
@@ -185,7 +186,6 @@ export const useSyncStore = () => {
connectionTimeout,
querySourceTimeout,
allowSelfSignature,
currentService,
} = payload;
if (isNumber(connectionTimeout)) {
setConnectionTimeout(connectionTimeout);
@@ -194,7 +194,6 @@ export const useSyncStore = () => {
setQueryTimeout(querySourceTimeout);
}
setAllowSelfSignature(allowSelfSignature);
setCurrentService(currentService);
}),
platformAdapter.listenEvent("change-appearance-store", ({ payload }) => {
@@ -235,6 +234,10 @@ export const useSyncStore = () => {
setEndpoint(endpoint);
setLanguage(language);
}),
platformAdapter.listenEvent("server-list-changed", ({ payload }) => {
setServerListSilently(payload);
}),
]);
return () => {

View File

@@ -15,6 +15,7 @@ type keyArrayObject = {
export type IConnectStore = {
serverList: Server[];
setServerList: (servers: Server[]) => void;
setServerListSilently: (servers: Server[]) => void;
currentService: Server;
setCurrentService: (service: Server) => void;
cloudSelectService: Server;
@@ -44,7 +45,15 @@ export const useConnectStore = create<IConnectStore>()(
persist(
(set) => ({
serverList: [],
setServerList: (serverList: Server[]) => {
setServerList: async(serverList: Server[]) => {
set(
produce((draft) => {
draft.serverList = serverList;
})
);
await platformAdapter.emitEvent("server-list-changed", serverList);
},
setServerListSilently: (serverList: Server[]) => {
set(
produce((draft) => {
draft.serverList = serverList;

View File

@@ -7,6 +7,7 @@ import { AppTheme } from "@/types/index";
import { SearchDocument } from "./search";
import { IAppStore } from "@/stores/appStore";
import { ExtensionPermission } from "@/components/Settings/Extensions";
import type { Server } from "@/types/server";
export interface EventPayloads {
"theme-changed": string;
@@ -49,6 +50,7 @@ export interface EventPayloads {
oauth_success: any;
extension_install_success: any;
"open_view_extension": [string, ExtensionPermission];
"server-list-changed": Server[];
}
// Window operation interface