fix(nutstore): fix the issue of not being able to customize the name of nutstore backup files. (#4050)

Co-authored-by: shlroland <shlroland1995@gmail.com>
This commit is contained in:
nutstore-dev 2025-03-28 15:06:15 +08:00 committed by GitHub
parent c4162bd9e3
commit 5712a58a5e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -3,6 +3,8 @@ import store from '@renderer/store'
import { setNutstoreSyncState } from '@renderer/store/nutstore' import { setNutstoreSyncState } from '@renderer/store/nutstore'
import { WebDavConfig } from '@renderer/types' import { WebDavConfig } from '@renderer/types'
import { NUTSTORE_HOST } from '@shared/config/nutstore' import { NUTSTORE_HOST } from '@shared/config/nutstore'
import dayjs from 'dayjs'
import Logger from 'electron-log'
import { type CreateDirectoryOptions } from 'webdav' import { type CreateDirectoryOptions } from 'webdav'
import { getBackupData, handleData } from './BackupService' import { getBackupData, handleData } from './BackupService'
@ -59,13 +61,18 @@ let syncTimeout: NodeJS.Timeout | null = null
let isAutoBackupRunning = false let isAutoBackupRunning = false
let isManualBackupRunning = false let isManualBackupRunning = false
export async function backupToNutstore(options: { showMessage?: boolean } = {}) { export async function backupToNutstore({
showMessage = false,
customFileName = ''
}: {
showMessage?: boolean
customFileName?: string
} = {}) {
const nutstoreToken = getNutstoreToken() const nutstoreToken = getNutstoreToken()
if (!nutstoreToken) { if (!nutstoreToken) {
return return
} }
const { showMessage = false } = options
if (isManualBackupRunning) { if (isManualBackupRunning) {
console.log('Backup already in progress') console.log('Backup already in progress')
return return
@ -76,6 +83,16 @@ export async function backupToNutstore(options: { showMessage?: boolean } = {})
return return
} }
let deviceType = 'unknown'
try {
deviceType = (await window.api.system.getDeviceType()) || 'unknown'
} catch (error) {
Logger.error('[Backup] Failed to get device type:', error)
}
const timestamp = dayjs().format('YYYYMMDDHHmmss')
const backupFileName = customFileName || `cherry-studio.${timestamp}.${deviceType}.zip`
const finalFileName = backupFileName.endsWith('.zip') ? backupFileName : `${backupFileName}.zip`
isManualBackupRunning = true isManualBackupRunning = true
store.dispatch(setNutstoreSyncState({ syncing: true, lastSyncError: null })) store.dispatch(setNutstoreSyncState({ syncing: true, lastSyncError: null }))
@ -83,7 +100,7 @@ export async function backupToNutstore(options: { showMessage?: boolean } = {})
const backupData = await getBackupData() const backupData = await getBackupData()
try { try {
const isSuccess = await window.api.backup.backupToWebdav(backupData, config) const isSuccess = await window.api.backup.backupToWebdav(backupData, { ...config, fileName: finalFileName })
if (isSuccess) { if (isSuccess) {
store.dispatch( store.dispatch(