feat: added webdav auto-sync settings synchronization and custom show message option

This commit is contained in:
kangfenmao 2024-12-24 10:25:19 +08:00
parent fbd189c5e1
commit f1f7e8e11b
4 changed files with 24 additions and 28 deletions

View File

@ -2,6 +2,7 @@ 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'
@ -15,7 +16,8 @@ import useUpdateHandler from './useUpdateHandler'
export function useAppInit() {
const dispatch = useAppDispatch()
const { proxyUrl, language, windowStyle, manualUpdateCheck, proxyMode } = useSettings()
const { proxyUrl, language, windowStyle, manualUpdateCheck, proxyMode, webdavAutoSync, webdavSyncInterval } =
useSettings()
const { minappShow } = useRuntime()
const { setDefaultModel, setTopicNamingModel, setTranslateModel } = useDefaultModel()
const avatar = useLiveQuery(() => db.settings.get('image://avatar'))
@ -74,6 +76,10 @@ export function useAppInit() {
})
}, [dispatch])
useEffect(() => {
webdavAutoSync ? startAutoSync() : stopAutoSync()
}, [webdavAutoSync, webdavSyncInterval])
useEffect(() => {
import('@renderer/queue/KnowledgeQueue')
}, [])

View File

@ -37,8 +37,6 @@ export const useShortcut = (
const shortcutConfig = shortcuts.find((s) => s.key === shortcutKey)
console.log(shortcutConfig)
useHotkeys(
shortcutConfig?.enabled ? formatShortcut(shortcutConfig.shortcut) : 'none',
(e) => {

View File

@ -1,7 +1,7 @@
import { FolderOpenOutlined, SaveOutlined } from '@ant-design/icons'
import { HStack } from '@renderer/components/Layout'
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 {
setWebdavAutoSync,
@ -63,15 +63,11 @@ const WebDavSettings: FC = () => {
await restoreFromWebdav()
setRestoring(false)
}
const onToggleAutoSync = (checked: boolean) => {
dispatch(setWebdavAutoSync(checked))
if (checked) {
startAutoSync()
} else {
stopAutoSync()
}
}
const onSyncIntervalChange = (value: number) => {
setSyncInterval(value)
dispatch(_setWebdavSyncInterval(value))
@ -138,7 +134,7 @@ const WebDavSettings: FC = () => {
disabled={!webdavHost}
/>
<Select
value={syncInterval}
value={syncInterval || 5}
onChange={onSyncIntervalChange}
disabled={!webdavHost || !autoSync}
style={{ width: 120 }}>

View File

@ -58,7 +58,7 @@ export async function reset() {
}
// 备份到 webdav
export async function backupToWebdav() {
export async function backupToWebdav({ showMessage = true }: { showMessage?: boolean }) {
const { webdavHost, webdavUser, webdavPass, webdavPath } = store.getState().settings
const backupData = await getBackupData()
@ -72,16 +72,17 @@ export async function backupToWebdav() {
webdavPath
})
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 {
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) {
console.error('[backup] backupToWebdav: Error uploading file to WebDAV:', error)
window.modal.error({
title: i18n.t('message.backup.failed'),
content: error.message
})
showMessage &&
window.modal.error({
title: i18n.t('message.backup.failed'),
content: error.message
})
}
}
@ -122,24 +123,19 @@ export function startAutoSync() {
const performBackup = async () => {
try {
console.log('[AutoSync] Performing backup...')
await backupToWebdav()
window.message.success({
content: i18n.t('message.backup.start.success'),
key: 'webdav-sync'
})
await backupToWebdav({ showMessage: false })
window.message.success({ content: i18n.t('message.backup.success'), key: 'webdav-sync' })
} catch (error) {
console.error('[AutoSync] Backup failed:', error)
window.message.error({
content: i18n.t('message.backup.failed'),
key: 'webdav-sync'
})
window.message.error({ content: i18n.t('message.backup.failed'), key: 'webdav-sync' })
}
}
performBackup()
syncInterval = setInterval(performBackup, webdavSyncInterval * 60 * 1000)
console.log('[AutoSync] Sync interval set up:', syncInterval)
console.log(`[AutoSync] Sync interval set up: ${webdavSyncInterval} minutes`)
}
}