diff --git a/src/renderer/src/components/app/Sidebar.tsx b/src/renderer/src/components/app/Sidebar.tsx index 80751ec6..c8ac3a7e 100644 --- a/src/renderer/src/components/app/Sidebar.tsx +++ b/src/renderer/src/components/app/Sidebar.tsx @@ -21,7 +21,8 @@ const Sidebar: FC = () => { const { minappShow } = useRuntime() const { t } = useTranslation() const navigate = useNavigate() - const { windowStyle, showMinappIcon, showFilesIcon } = useSettings() + const { windowStyle, showTranslateIcon, showPaintingIcon, showMinappIcon, showKnowledgeIcon, showFilesIcon } = + useSettings() const { theme, toggleTheme } = useTheme() const isRoute = (path: string): string => (pathname === path ? 'active' : '') @@ -61,20 +62,24 @@ const Sidebar: FC = () => { - - to('/paintings')}> - - - - - - - to('/translate')}> - - - - - + {showPaintingIcon && ( + + to('/paintings')}> + + + + + + )} + {showTranslateIcon && ( + + to('/translate')}> + + + + + + )} {showMinappIcon && ( to('/apps')}> @@ -84,13 +89,15 @@ const Sidebar: FC = () => { )} - - to('/knowledge')}> - - - - - + {showKnowledgeIcon && ( + + to('/knowledge')}> + + + + + + )} {showFilesIcon && ( to('/files')}> diff --git a/src/renderer/src/hooks/useAppInit.ts b/src/renderer/src/hooks/useAppInit.ts index ea05e483..0d3de29d 100644 --- a/src/renderer/src/hooks/useAppInit.ts +++ b/src/renderer/src/hooks/useAppInit.ts @@ -2,7 +2,6 @@ import { isMac } from '@renderer/config/constant' import { isLocalAi } from '@renderer/config/env' import db from '@renderer/databases' import i18n from '@renderer/i18n' -import { startAutoSync, stopAutoSync } from '@renderer/services/BackupService' import { useAppDispatch } from '@renderer/store' import { setAvatar, setFilesPath, setUpdateState } from '@renderer/store/runtime' import { delay, runAsyncFunction } from '@renderer/utils' @@ -16,16 +15,7 @@ import useUpdateHandler from './useUpdateHandler' export function useAppInit() { const dispatch = useAppDispatch() - const { - proxyUrl, - language, - windowStyle, - manualUpdateCheck, - proxyMode, - webdavAutoSync, - webdavSyncInterval, - customCss - } = useSettings() + const { proxyUrl, language, windowStyle, manualUpdateCheck, proxyMode, customCss } = useSettings() const { minappShow } = useRuntime() const { setDefaultModel, setTopicNamingModel, setTranslateModel } = useDefaultModel() const avatar = useLiveQuery(() => db.settings.get('image://avatar')) @@ -84,10 +74,6 @@ export function useAppInit() { }) }, [dispatch]) - useEffect(() => { - webdavAutoSync ? startAutoSync() : stopAutoSync() - }, [webdavAutoSync, webdavSyncInterval]) - useEffect(() => { import('@renderer/queue/KnowledgeQueue') }, []) diff --git a/src/renderer/src/i18n/locales/en-us.json b/src/renderer/src/i18n/locales/en-us.json index f01e6609..6fd31194 100644 --- a/src/renderer/src/i18n/locales/en-us.json +++ b/src/renderer/src/i18n/locales/en-us.json @@ -394,7 +394,10 @@ "general.user_name.placeholder": "Enter your name", "general.view_webdav_settings": "View WebDAV settings", "general.display.title": "Display Settings", + "display.sidebar.translate.icon": "Show Translate icon", + "display.sidebar.painting.icon": "Show Painting icon", "display.sidebar.minapp.icon": "Show MinApp icon", + "display.sidebar.knowledge.icon": "Show Knowledge icon", "display.sidebar.files.icon": "Show Files icon", "display.sidebar.title": "Sidebar Settings", "display.topic.title": "Topic Settings", diff --git a/src/renderer/src/i18n/locales/ja-jp.json b/src/renderer/src/i18n/locales/ja-jp.json index a555def5..90965062 100644 --- a/src/renderer/src/i18n/locales/ja-jp.json +++ b/src/renderer/src/i18n/locales/ja-jp.json @@ -392,7 +392,10 @@ "general.user_name.placeholder": "ユーザー名を入力", "general.view_webdav_settings": "WebDAV設定を表示", "general.display.title": "表示設定", + "display.sidebar.translate.icon": "翻訳のアイコンを表示", + "display.sidebar.painting.icon": "絵画のアイコンを表示", "display.sidebar.minapp.icon": "ミニアプリのアイコンを表示", + "display.sidebar.knowledge.icon": "ナレッジのアイコンを表示", "display.sidebar.files.icon": "ファイルのアイコンを表示", "display.sidebar.title": "サイドバー設定", "display.topic.title": "トピック設定", diff --git a/src/renderer/src/i18n/locales/ru-ru.json b/src/renderer/src/i18n/locales/ru-ru.json index e67aab93..312d63a6 100644 --- a/src/renderer/src/i18n/locales/ru-ru.json +++ b/src/renderer/src/i18n/locales/ru-ru.json @@ -394,7 +394,10 @@ "general.user_name.placeholder": "Введите ваше имя", "general.view_webdav_settings": "Просмотр настроек WebDAV", "general.display.title": "Настройки отображения", + "display.sidebar.translate.icon": "Показывать иконку перевода", + "display.sidebar.painting.icon": "Показывать иконку рисования", "display.sidebar.minapp.icon": "Показывать иконку мини-приложения", + "display.sidebar.knowledge.icon": "Показывать иконку знаний", "display.sidebar.files.icon": "Показывать иконку файлов", "display.sidebar.title": "Настройки боковой панели", "display.topic.title": "Настройки топиков", diff --git a/src/renderer/src/i18n/locales/zh-cn.json b/src/renderer/src/i18n/locales/zh-cn.json index 757b8ee1..2a09d522 100644 --- a/src/renderer/src/i18n/locales/zh-cn.json +++ b/src/renderer/src/i18n/locales/zh-cn.json @@ -395,7 +395,10 @@ "general.user_name.placeholder": "请输入用户名", "general.view_webdav_settings": "查看 WebDAV 设置", "general.display.title": "显示设置", + "display.sidebar.translate.icon": "显示翻译图标", + "display.sidebar.painting.icon": "显示绘画图标", "display.sidebar.minapp.icon": "显示小程序图标", + "display.sidebar.knowledge.icon": "显示知识图标", "display.sidebar.files.icon": "显示文件图标", "display.sidebar.title": "侧边栏设置", "display.topic.title": "话题设置", diff --git a/src/renderer/src/i18n/locales/zh-tw.json b/src/renderer/src/i18n/locales/zh-tw.json index 7c5b6b79..3af6ba51 100644 --- a/src/renderer/src/i18n/locales/zh-tw.json +++ b/src/renderer/src/i18n/locales/zh-tw.json @@ -394,7 +394,10 @@ "general.user_name.placeholder": "輸入您的名稱", "general.view_webdav_settings": "查看 WebDAV 設定", "general.display.title": "顯示設定", + "display.sidebar.translate.icon": "顯示翻譯圖示", + "display.sidebar.painting.icon": "顯示繪圖圖示", "display.sidebar.minapp.icon": "顯示小程序圖示", + "display.sidebar.knowledge.icon": "顯示知識圖示", "display.sidebar.files.icon": "顯示文件圖示", "display.sidebar.title": "側邊欄設定", "display.topic.title": "話題設定", diff --git a/src/renderer/src/init.ts b/src/renderer/src/init.ts index 289723e7..cec120c2 100644 --- a/src/renderer/src/init.ts +++ b/src/renderer/src/init.ts @@ -1,8 +1,19 @@ import KeyvStorage from '@kangfenmao/keyv-storage' -function init() { +import { startAutoSync } from './services/BackupService' +import store from './store' + +function initKeyv() { window.keyv = new KeyvStorage() window.keyv.init() } -init() +function initAutoSync() { + const { webdavAutoSync } = store.getState().settings + if (webdavAutoSync) { + startAutoSync() + } +} + +initKeyv() +initAutoSync() diff --git a/src/renderer/src/pages/home/Inputbar/Inputbar.tsx b/src/renderer/src/pages/home/Inputbar/Inputbar.tsx index 94dacbb5..470f505d 100644 --- a/src/renderer/src/pages/home/Inputbar/Inputbar.tsx +++ b/src/renderer/src/pages/home/Inputbar/Inputbar.tsx @@ -62,7 +62,8 @@ const Inputbar: FC = ({ assistant: _assistant, setActiveTopic }) => { showInputEstimatedTokens, clickAssistantToShowTopic, language, - autoTranslateWithSpace + autoTranslateWithSpace, + showKnowledgeIcon } = useSettings() const [expended, setExpend] = useState(false) const [estimateTokenCount, setEstimateTokenCount] = useState(0) @@ -450,12 +451,14 @@ const Inputbar: FC = ({ assistant: _assistant, setActiveTopic }) => { - 0} - /> + {showKnowledgeIcon && ( + 0} + /> + )} { const MessageHeader: FC = memo(({ assistant, model, message }) => { const avatar = useAvatar() const { theme } = useTheme() - const { userName } = useSettings() + const { userName, showMinappIcon } = useSettings() const { t } = useTranslation() const { isBubbleStyle } = useMessageStyle() @@ -44,7 +44,9 @@ const MessageHeader: FC = memo(({ assistant, model, message }) => { const avatarName = useMemo(() => firstLetter(assistant?.name).toUpperCase(), [assistant?.name]) const username = useMemo(() => removeLeadingEmoji(getUserName()), [getUserName]) - const showMiniApp = useCallback(() => model?.provider && startMinAppById(model.provider), [model?.provider]) + const showMiniApp = useCallback(() => { + showMinappIcon && model?.provider && startMinAppById(model.provider) + }, [model?.provider, showMinappIcon]) const avatarStyle: CSSProperties | undefined = isBubbleStyle ? { @@ -62,7 +64,7 @@ const MessageHeader: FC = memo(({ assistant, model, message }) => { size={35} style={{ borderRadius: '20%', - cursor: 'pointer', + cursor: showMinappIcon ? 'pointer' : 'default', border: isLocalAi ? '1px solid var(--color-border-soft)' : 'none', filter: theme === 'dark' ? 'invert(0.05)' : undefined }} diff --git a/src/renderer/src/pages/home/Navbar.tsx b/src/renderer/src/pages/home/Navbar.tsx index f2eb5785..6545ec27 100644 --- a/src/renderer/src/pages/home/Navbar.tsx +++ b/src/renderer/src/pages/home/Navbar.tsx @@ -25,7 +25,7 @@ interface Props { const HeaderNavbar: FC = ({ activeAssistant }) => { const { assistant } = useAssistant(activeAssistant.id) const { showAssistants, toggleShowAssistants } = useShowAssistants() - const { topicPosition } = useSettings() + const { topicPosition, showMinappIcon } = useSettings() const { showTopics, toggleShowTopics } = useShowTopics() useShortcut('toggle_show_assistants', () => { @@ -79,11 +79,13 @@ const HeaderNavbar: FC = ({ activeAssistant }) => { SearchPopup.show()}> - - - - - + {showMinappIcon && ( + + + + + + )} {topicPosition === 'right' && ( diff --git a/src/renderer/src/pages/settings/DisplaySettings.tsx b/src/renderer/src/pages/settings/DisplaySettings.tsx index a4c99c66..0d839670 100644 --- a/src/renderer/src/pages/settings/DisplaySettings.tsx +++ b/src/renderer/src/pages/settings/DisplaySettings.tsx @@ -6,8 +6,11 @@ import { setClickAssistantToShowTopic, setCustomCss, setShowFilesIcon, + setShowKnowledgeIcon, setShowMinappIcon, - setShowTopicTime + setShowPaintingIcon, + setShowTopicTime, + setShowTranslateIcon } from '@renderer/store/settings' import { ThemeMode } from '@renderer/types' import { Input, Select, Switch } from 'antd' @@ -22,7 +25,10 @@ const DisplaySettings: FC = () => { theme, windowStyle, setWindowStyle, + showTranslateIcon, + showPaintingIcon, showMinappIcon, + showKnowledgeIcon, showFilesIcon, topicPosition, setTopicPosition, @@ -103,11 +109,26 @@ const DisplaySettings: FC = () => { {t('settings.display.sidebar.title')} + + {t('settings.display.sidebar.translate.icon')} + dispatch(setShowTranslateIcon(value))} /> + + + + {t('settings.display.sidebar.painting.icon')} + dispatch(setShowPaintingIcon(value))} /> + + {t('settings.display.sidebar.minapp.icon')} dispatch(setShowMinappIcon(value))} /> + + {t('settings.display.sidebar.knowledge.icon')} + dispatch(setShowKnowledgeIcon(value))} /> + + {t('settings.display.sidebar.files.icon')} dispatch(setShowFilesIcon(value))} /> diff --git a/src/renderer/src/store/migrate.ts b/src/renderer/src/store/migrate.ts index 1dd66e7e..0ab1c783 100644 --- a/src/renderer/src/store/migrate.ts +++ b/src/renderer/src/store/migrate.ts @@ -786,6 +786,9 @@ const migrateConfig = { system: false }) } + state.settings.showTranslateIcon = true + state.settings.showPaintingIcon = true + state.settings.showKnowledgeIcon = true return state } } diff --git a/src/renderer/src/store/settings.ts b/src/renderer/src/store/settings.ts index b778aff0..163c4363 100644 --- a/src/renderer/src/store/settings.ts +++ b/src/renderer/src/store/settings.ts @@ -42,7 +42,10 @@ export interface SettingsState { autoTranslateWithSpace: boolean enableTopicNaming: boolean // Sidebar icons + showTranslateIcon: boolean + showPaintingIcon: boolean showMinappIcon: boolean + showKnowledgeIcon: boolean showFilesIcon: boolean customCss: string topicNamingPrompt: string @@ -84,7 +87,10 @@ const initialState: SettingsState = { translateModelPrompt: TRANSLATE_PROMPT, autoTranslateWithSpace: false, enableTopicNaming: true, + showTranslateIcon: true, + showPaintingIcon: true, showMinappIcon: true, + showKnowledgeIcon: true, showFilesIcon: true, customCss: '', topicNamingPrompt: '' @@ -203,9 +209,18 @@ const settingsSlice = createSlice({ setEnableTopicNaming: (state, action: PayloadAction) => { state.enableTopicNaming = action.payload }, + setShowTranslateIcon: (state, action: PayloadAction) => { + state.showTranslateIcon = action.payload + }, + setShowPaintingIcon: (state, action: PayloadAction) => { + state.showPaintingIcon = action.payload + }, setShowMinappIcon: (state, action: PayloadAction) => { state.showMinappIcon = action.payload }, + setShowKnowledgeIcon: (state, action: PayloadAction) => { + state.showKnowledgeIcon = action.payload + }, setShowFilesIcon: (state, action: PayloadAction) => { state.showFilesIcon = action.payload }, @@ -258,7 +273,10 @@ export const { setTranslateModelPrompt, setAutoTranslateWithSpace, setEnableTopicNaming, + setShowTranslateIcon, + setShowPaintingIcon, setShowMinappIcon, + setShowKnowledgeIcon, setShowFilesIcon, setPasteLongTextThreshold, setCustomCss,