feat: 更新自动检查更新功能易读性

将手动检查更新的设置更改为自动检查更新,更新相关的状态管理和界面文本,以提升用户体验。
This commit is contained in:
wangxiaolong 2025-03-25 12:49:29 +08:00 committed by 亢奋猫
parent 8d48824981
commit e2d8b89ffd
5 changed files with 18 additions and 18 deletions

View File

@ -18,7 +18,7 @@ import useUpdateHandler from './useUpdateHandler'
export function useAppInit() { export function useAppInit() {
const dispatch = useAppDispatch() const dispatch = useAppDispatch()
const { proxyUrl, language, windowStyle, manualUpdateCheck, proxyMode, customCss } = useSettings() const { proxyUrl, language, windowStyle, autoCheckUpdate, proxyMode, customCss } = useSettings()
const { minappShow } = useRuntime() const { minappShow } = useRuntime()
const { setDefaultModel, setTopicNamingModel, setTranslateModel } = useDefaultModel() const { setDefaultModel, setTopicNamingModel, setTranslateModel } = useDefaultModel()
const avatar = useLiveQuery(() => db.settings.get('image://avatar')) const avatar = useLiveQuery(() => db.settings.get('image://avatar'))
@ -36,13 +36,13 @@ export function useAppInit() {
document.getElementById('spinner')?.remove() document.getElementById('spinner')?.remove()
runAsyncFunction(async () => { runAsyncFunction(async () => {
const { isPackaged } = await window.api.getAppInfo() const { isPackaged } = await window.api.getAppInfo()
if (isPackaged && !manualUpdateCheck) { if (isPackaged && autoCheckUpdate) {
await delay(2) await delay(2)
const { updateInfo } = await window.api.checkForUpdate() const { updateInfo } = await window.api.checkForUpdate()
dispatch(setUpdateState({ info: updateInfo })) dispatch(setUpdateState({ info: updateInfo }))
} }
}) })
}, [dispatch, manualUpdateCheck]) }, [dispatch, autoCheckUpdate])
useEffect(() => { useEffect(() => {
if (proxyMode === 'system') { if (proxyMode === 'system') {

View File

@ -921,7 +921,7 @@
"general.display.title": "Display Settings", "general.display.title": "Display Settings",
"general.emoji_picker": "Emoji Picker", "general.emoji_picker": "Emoji Picker",
"general.image_upload": "Image Upload", "general.image_upload": "Image Upload",
"general.manually_check_update.title": "Turn off update checking", "general.auto_check_update.title": "Auto update checking",
"general.reset.button": "Reset", "general.reset.button": "Reset",
"general.reset.title": "Data Reset", "general.reset.title": "Data Reset",
"general.restore.button": "Restore", "general.restore.button": "Restore",

View File

@ -921,7 +921,7 @@
"general.display.title": "显示设置", "general.display.title": "显示设置",
"general.emoji_picker": "表情选择器", "general.emoji_picker": "表情选择器",
"general.image_upload": "图片上传", "general.image_upload": "图片上传",
"general.manually_check_update.title": "关闭更新检测", "general.auto_check_update.title": "自动检测更新",
"general.reset.button": "重置", "general.reset.button": "重置",
"general.reset.title": "重置数据", "general.reset.title": "重置数据",
"general.restore.button": "恢复", "general.restore.button": "恢复",

View File

@ -9,7 +9,7 @@ import { useRuntime } from '@renderer/hooks/useRuntime'
import { useSettings } from '@renderer/hooks/useSettings' import { useSettings } from '@renderer/hooks/useSettings'
import { useAppDispatch } from '@renderer/store' import { useAppDispatch } from '@renderer/store'
import { setUpdateState } from '@renderer/store/runtime' import { setUpdateState } from '@renderer/store/runtime'
import { setManualUpdateCheck } from '@renderer/store/settings' import { setAutoCheckUpdate } from '@renderer/store/settings'
import { ThemeMode } from '@renderer/types' import { ThemeMode } from '@renderer/types'
import { compareVersions, runAsyncFunction } from '@renderer/utils' import { compareVersions, runAsyncFunction } from '@renderer/utils'
import { Avatar, Button, Progress, Row, Switch, Tag } from 'antd' import { Avatar, Button, Progress, Row, Switch, Tag } from 'antd'
@ -25,7 +25,7 @@ import { SettingContainer, SettingDivider, SettingGroup, SettingRow, SettingTitl
const AboutSettings: FC = () => { const AboutSettings: FC = () => {
const [version, setVersion] = useState('') const [version, setVersion] = useState('')
const { t } = useTranslation() const { t } = useTranslation()
const { manualUpdateCheck } = useSettings() const { autoCheckUpdate } = useSettings()
const { theme } = useTheme() const { theme } = useTheme()
const dispatch = useAppDispatch() const dispatch = useAppDispatch()
const { update } = useRuntime() const { update } = useRuntime()
@ -146,8 +146,8 @@ const AboutSettings: FC = () => {
</AboutHeader> </AboutHeader>
<SettingDivider /> <SettingDivider />
<SettingRow> <SettingRow>
<SettingRowTitle>{t('settings.general.manually_check_update.title')}</SettingRowTitle> <SettingRowTitle>{t('settings.general.auto_check_update.title')}</SettingRowTitle>
<Switch value={manualUpdateCheck} onChange={(v) => dispatch(setManualUpdateCheck(v))} /> <Switch value={autoCheckUpdate} onChange={(v) => dispatch(setAutoCheckUpdate(v))} />
</SettingRow> </SettingRow>
</SettingGroup> </SettingGroup>
{hasNewVersion && update.info && ( {hasNewVersion && update.info && (
@ -161,7 +161,7 @@ const AboutSettings: FC = () => {
<UpdateNotesWrapper> <UpdateNotesWrapper>
<Markdown> <Markdown>
{typeof update.info.releaseNotes === 'string' {typeof update.info.releaseNotes === 'string'
? update.info.releaseNotes.replaceAll('\n', '\n\n') ? update.info.releaseNotes.replace(/\n/g, '\n\n')
: update.info.releaseNotes?.map((note) => note.note).join('\n')} : update.info.releaseNotes?.map((note) => note.note).join('\n')}
</Markdown> </Markdown>
</UpdateNotesWrapper> </UpdateNotesWrapper>

View File

@ -45,7 +45,7 @@ export interface SettingsState {
pasteLongTextAsFile: boolean pasteLongTextAsFile: boolean
pasteLongTextThreshold: number pasteLongTextThreshold: number
clickAssistantToShowTopic: boolean clickAssistantToShowTopic: boolean
manualUpdateCheck: boolean autoCheckUpdate: boolean
renderInputMessageAsMarkdown: boolean renderInputMessageAsMarkdown: boolean
codeShowLineNumbers: boolean codeShowLineNumbers: boolean
codeCollapsible: boolean codeCollapsible: boolean
@ -130,7 +130,7 @@ const initialState: SettingsState = {
pasteLongTextAsFile: false, pasteLongTextAsFile: false,
pasteLongTextThreshold: 1500, pasteLongTextThreshold: 1500,
clickAssistantToShowTopic: false, clickAssistantToShowTopic: false,
manualUpdateCheck: false, autoCheckUpdate: true,
renderInputMessageAsMarkdown: false, renderInputMessageAsMarkdown: false,
codeShowLineNumbers: false, codeShowLineNumbers: false,
codeCollapsible: false, codeCollapsible: false,
@ -261,15 +261,15 @@ const settingsSlice = createSlice({
setPasteLongTextAsFile: (state, action: PayloadAction<boolean>) => { setPasteLongTextAsFile: (state, action: PayloadAction<boolean>) => {
state.pasteLongTextAsFile = action.payload state.pasteLongTextAsFile = action.payload
}, },
setAutoCheckUpdate: (state, action: PayloadAction<boolean>) => {
state.autoCheckUpdate = action.payload
},
setRenderInputMessageAsMarkdown: (state, action: PayloadAction<boolean>) => { setRenderInputMessageAsMarkdown: (state, action: PayloadAction<boolean>) => {
state.renderInputMessageAsMarkdown = action.payload state.renderInputMessageAsMarkdown = action.payload
}, },
setClickAssistantToShowTopic: (state, action: PayloadAction<boolean>) => { setClickAssistantToShowTopic: (state, action: PayloadAction<boolean>) => {
state.clickAssistantToShowTopic = action.payload state.clickAssistantToShowTopic = action.payload
}, },
setManualUpdateCheck: (state, action: PayloadAction<boolean>) => {
state.manualUpdateCheck = action.payload
},
setWebdavHost: (state, action: PayloadAction<string>) => { setWebdavHost: (state, action: PayloadAction<string>) => {
state.webdavHost = action.payload state.webdavHost = action.payload
}, },
@ -444,9 +444,9 @@ export const {
setShowTopicTime, setShowTopicTime,
setShowAssistantIcon, setShowAssistantIcon,
setPasteLongTextAsFile, setPasteLongTextAsFile,
setAutoCheckUpdate,
setRenderInputMessageAsMarkdown, setRenderInputMessageAsMarkdown,
setClickAssistantToShowTopic, setClickAssistantToShowTopic,
setManualUpdateCheck,
setWebdavHost, setWebdavHost,
setWebdavUser, setWebdavUser,
setWebdavPass, setWebdavPass,