feat: added webdav auto-sync settings synchronization and custom show message option
This commit is contained in:
parent
fbd189c5e1
commit
f1f7e8e11b
@ -2,6 +2,7 @@ import { isMac } from '@renderer/config/constant'
|
|||||||
import { isLocalAi } from '@renderer/config/env'
|
import { isLocalAi } from '@renderer/config/env'
|
||||||
import db from '@renderer/databases'
|
import db from '@renderer/databases'
|
||||||
import i18n from '@renderer/i18n'
|
import i18n from '@renderer/i18n'
|
||||||
|
import { startAutoSync, stopAutoSync } from '@renderer/services/BackupService'
|
||||||
import { useAppDispatch } from '@renderer/store'
|
import { useAppDispatch } from '@renderer/store'
|
||||||
import { setAvatar, setFilesPath, setUpdateState } from '@renderer/store/runtime'
|
import { setAvatar, setFilesPath, setUpdateState } from '@renderer/store/runtime'
|
||||||
import { delay, runAsyncFunction } from '@renderer/utils'
|
import { delay, runAsyncFunction } from '@renderer/utils'
|
||||||
@ -15,7 +16,8 @@ import useUpdateHandler from './useUpdateHandler'
|
|||||||
|
|
||||||
export function useAppInit() {
|
export function useAppInit() {
|
||||||
const dispatch = useAppDispatch()
|
const dispatch = useAppDispatch()
|
||||||
const { proxyUrl, language, windowStyle, manualUpdateCheck, proxyMode } = useSettings()
|
const { proxyUrl, language, windowStyle, manualUpdateCheck, proxyMode, webdavAutoSync, webdavSyncInterval } =
|
||||||
|
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'))
|
||||||
@ -74,6 +76,10 @@ export function useAppInit() {
|
|||||||
})
|
})
|
||||||
}, [dispatch])
|
}, [dispatch])
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
webdavAutoSync ? startAutoSync() : stopAutoSync()
|
||||||
|
}, [webdavAutoSync, webdavSyncInterval])
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
import('@renderer/queue/KnowledgeQueue')
|
import('@renderer/queue/KnowledgeQueue')
|
||||||
}, [])
|
}, [])
|
||||||
|
|||||||
@ -37,8 +37,6 @@ export const useShortcut = (
|
|||||||
|
|
||||||
const shortcutConfig = shortcuts.find((s) => s.key === shortcutKey)
|
const shortcutConfig = shortcuts.find((s) => s.key === shortcutKey)
|
||||||
|
|
||||||
console.log(shortcutConfig)
|
|
||||||
|
|
||||||
useHotkeys(
|
useHotkeys(
|
||||||
shortcutConfig?.enabled ? formatShortcut(shortcutConfig.shortcut) : 'none',
|
shortcutConfig?.enabled ? formatShortcut(shortcutConfig.shortcut) : 'none',
|
||||||
(e) => {
|
(e) => {
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { FolderOpenOutlined, SaveOutlined } from '@ant-design/icons'
|
import { FolderOpenOutlined, SaveOutlined } from '@ant-design/icons'
|
||||||
import { HStack } from '@renderer/components/Layout'
|
import { HStack } from '@renderer/components/Layout'
|
||||||
import { useSettings } from '@renderer/hooks/useSettings'
|
import { useSettings } from '@renderer/hooks/useSettings'
|
||||||
import { backupToWebdav, restoreFromWebdav, startAutoSync, stopAutoSync } from '@renderer/services/BackupService'
|
import { backupToWebdav, restoreFromWebdav } from '@renderer/services/BackupService'
|
||||||
import { useAppDispatch } from '@renderer/store'
|
import { useAppDispatch } from '@renderer/store'
|
||||||
import {
|
import {
|
||||||
setWebdavAutoSync,
|
setWebdavAutoSync,
|
||||||
@ -63,15 +63,11 @@ const WebDavSettings: FC = () => {
|
|||||||
await restoreFromWebdav()
|
await restoreFromWebdav()
|
||||||
setRestoring(false)
|
setRestoring(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
const onToggleAutoSync = (checked: boolean) => {
|
const onToggleAutoSync = (checked: boolean) => {
|
||||||
dispatch(setWebdavAutoSync(checked))
|
dispatch(setWebdavAutoSync(checked))
|
||||||
|
}
|
||||||
|
|
||||||
if (checked) {
|
|
||||||
startAutoSync()
|
|
||||||
} else {
|
|
||||||
stopAutoSync()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const onSyncIntervalChange = (value: number) => {
|
const onSyncIntervalChange = (value: number) => {
|
||||||
setSyncInterval(value)
|
setSyncInterval(value)
|
||||||
dispatch(_setWebdavSyncInterval(value))
|
dispatch(_setWebdavSyncInterval(value))
|
||||||
@ -138,7 +134,7 @@ const WebDavSettings: FC = () => {
|
|||||||
disabled={!webdavHost}
|
disabled={!webdavHost}
|
||||||
/>
|
/>
|
||||||
<Select
|
<Select
|
||||||
value={syncInterval}
|
value={syncInterval || 5}
|
||||||
onChange={onSyncIntervalChange}
|
onChange={onSyncIntervalChange}
|
||||||
disabled={!webdavHost || !autoSync}
|
disabled={!webdavHost || !autoSync}
|
||||||
style={{ width: 120 }}>
|
style={{ width: 120 }}>
|
||||||
|
|||||||
@ -58,7 +58,7 @@ export async function reset() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 备份到 webdav
|
// 备份到 webdav
|
||||||
export async function backupToWebdav() {
|
export async function backupToWebdav({ showMessage = true }: { showMessage?: boolean }) {
|
||||||
const { webdavHost, webdavUser, webdavPass, webdavPath } = store.getState().settings
|
const { webdavHost, webdavUser, webdavPass, webdavPath } = store.getState().settings
|
||||||
|
|
||||||
const backupData = await getBackupData()
|
const backupData = await getBackupData()
|
||||||
@ -72,12 +72,13 @@ export async function backupToWebdav() {
|
|||||||
webdavPath
|
webdavPath
|
||||||
})
|
})
|
||||||
if (success) {
|
if (success) {
|
||||||
window.message.success({ content: i18n.t('message.backup.success'), key: 'backup' })
|
showMessage && window.message.success({ content: i18n.t('message.backup.success'), key: 'backup' })
|
||||||
} else {
|
} else {
|
||||||
window.message.error({ content: i18n.t('message.backup.failed'), key: 'backup' })
|
showMessage && window.message.error({ content: i18n.t('message.backup.failed'), key: 'backup' })
|
||||||
}
|
}
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
console.error('[backup] backupToWebdav: Error uploading file to WebDAV:', error)
|
console.error('[backup] backupToWebdav: Error uploading file to WebDAV:', error)
|
||||||
|
showMessage &&
|
||||||
window.modal.error({
|
window.modal.error({
|
||||||
title: i18n.t('message.backup.failed'),
|
title: i18n.t('message.backup.failed'),
|
||||||
content: error.message
|
content: error.message
|
||||||
@ -122,24 +123,19 @@ export function startAutoSync() {
|
|||||||
const performBackup = async () => {
|
const performBackup = async () => {
|
||||||
try {
|
try {
|
||||||
console.log('[AutoSync] Performing backup...')
|
console.log('[AutoSync] Performing backup...')
|
||||||
await backupToWebdav()
|
await backupToWebdav({ showMessage: false })
|
||||||
window.message.success({
|
window.message.success({ content: i18n.t('message.backup.success'), key: 'webdav-sync' })
|
||||||
content: i18n.t('message.backup.start.success'),
|
|
||||||
key: 'webdav-sync'
|
|
||||||
})
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('[AutoSync] Backup failed:', error)
|
console.error('[AutoSync] Backup failed:', error)
|
||||||
window.message.error({
|
window.message.error({ content: i18n.t('message.backup.failed'), key: 'webdav-sync' })
|
||||||
content: i18n.t('message.backup.failed'),
|
|
||||||
key: 'webdav-sync'
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
performBackup()
|
performBackup()
|
||||||
|
|
||||||
syncInterval = setInterval(performBackup, webdavSyncInterval * 60 * 1000)
|
syncInterval = setInterval(performBackup, webdavSyncInterval * 60 * 1000)
|
||||||
console.log('[AutoSync] Sync interval set up:', syncInterval)
|
|
||||||
|
console.log(`[AutoSync] Sync interval set up: ${webdavSyncInterval} minutes`)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user