feat: networked search data sources support search and keyboard-only operation (#367)

* feat: networked search data sources support search and keyboard-only operation

* docs: update changelog
This commit is contained in:
ayangweb
2025-04-15 20:13:42 +08:00
committed by GitHub
parent 6ecb232685
commit 23ae478e47
13 changed files with 453 additions and 224 deletions

View File

@@ -1,12 +1,9 @@
import { useCallback, useEffect } from "react";
import { useKeyPress } from "ahooks";
import { useCallback } from "react";
import SearchChat from "@/components/SearchChat";
import platformAdapter from "@/utils/platformAdapter";
import { useShortcutsStore } from "@/stores/shortcutsStore";
import { useStartupStore } from "@/stores/startupStore";
import { modifierKeys } from "@/components/Settings/Advanced/components/Shortcuts";
import { useAppStore } from "@/stores/appStore";
import { useSyncStore } from "@/hooks/useSyncStore";
function MainApp() {
const setIsTauri = useAppStore((state) => state.setIsTauri);
@@ -22,8 +19,8 @@ function MainApp() {
queryStrings: { query: input },
}
);
if (!response || typeof response !== 'object') {
throw new Error('Invalid response format');
if (!response || typeof response !== "object") {
throw new Error("Invalid response format");
}
return response;
} catch (error) {
@@ -56,124 +53,7 @@ function MainApp() {
return platformAdapter.hideWindow();
}, []);
const modifierKey = useShortcutsStore((state) => {
return state.modifierKey;
});
const setModifierKey = useShortcutsStore((state) => {
return state.setModifierKey;
});
const setModifierKeyPressed = useShortcutsStore((state) => {
return state.setModifierKeyPressed;
});
const setModeSwitch = useShortcutsStore((state) => {
return state.setModeSwitch;
});
const setReturnToInput = useShortcutsStore((state) => {
return state.setReturnToInput;
});
const setVoiceInput = useShortcutsStore((state) => {
return state.setVoiceInput;
});
const setAddFile = useShortcutsStore((state) => {
return state.setAddFile;
});
const setDefaultStartupWindow = useStartupStore((state) => {
return state.setDefaultStartupWindow;
});
const setDefaultContentForSearchWindow = useStartupStore((state) => {
return state.setDefaultContentForSearchWindow;
});
const setDefaultContentForChatWindow = useStartupStore((state) => {
return state.setDefaultContentForChatWindow;
});
const setDeepThinking = useShortcutsStore((state) => {
return state.setDeepThinking;
});
const setInternetSearch = useShortcutsStore((state) => {
return state.setInternetSearch;
});
const setInternetSearchScope = useShortcutsStore((state) => {
return state.setInternetSearchScope;
});
const setHistoricalRecords = useShortcutsStore((state) => {
return state.setHistoricalRecords;
});
const setNewSession = useShortcutsStore((state) => {
return state.setNewSession;
});
const setFixedWindow = useShortcutsStore((state) => {
return state.setFixedWindow;
});
const setServiceList = useShortcutsStore((state) => {
return state.setServiceList;
});
const setExternal = useShortcutsStore((state) => {
return state.setExternal;
});
useEffect(() => {
const unListeners = Promise.all([
platformAdapter.listenEvent("change-shortcuts-store", ({ payload }) => {
const {
modifierKey,
modeSwitch,
returnToInput,
voiceInput,
addFile,
deepThinking,
internetSearch,
internetSearchScope,
historicalRecords,
newSession,
fixedWindow,
serviceList,
external,
} = payload;
setModifierKey(modifierKey);
setModeSwitch(modeSwitch);
setReturnToInput(returnToInput);
setVoiceInput(voiceInput);
setAddFile(addFile);
setDeepThinking(deepThinking);
setInternetSearch(internetSearch);
setInternetSearchScope(internetSearchScope);
setHistoricalRecords(historicalRecords);
setNewSession(newSession);
setFixedWindow(fixedWindow);
setServiceList(serviceList);
setExternal(external);
}),
platformAdapter.listenEvent("change-startup-store", ({ payload }) => {
const {
defaultStartupWindow,
defaultContentForSearchWindow,
defaultContentForChatWindow,
} = payload;
setDefaultStartupWindow(defaultStartupWindow);
setDefaultContentForSearchWindow(defaultContentForSearchWindow);
setDefaultContentForChatWindow(defaultContentForChatWindow);
}),
]);
return () => {
unListeners.then((fns) => {
fns.forEach((fn) => fn());
});
};
}, []);
useKeyPress(
modifierKeys,
(event, key) => {
if (key === modifierKey) {
setModifierKeyPressed(event.type === "keydown");
}
},
{
events: ["keydown", "keyup"],
}
);
useSyncStore();
return (
<SearchChat