From 5712a58a5ee2dcade969aded681874c3498ef699 Mon Sep 17 00:00:00 2001 From: nutstore-dev Date: Fri, 28 Mar 2025 15:06:15 +0800 Subject: [PATCH] fix(nutstore): fix the issue of not being able to customize the name of nutstore backup files. (#4050) Co-authored-by: shlroland --- src/renderer/src/services/NutstoreService.ts | 23 +++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/renderer/src/services/NutstoreService.ts b/src/renderer/src/services/NutstoreService.ts index 66ca2253..67ada3b1 100644 --- a/src/renderer/src/services/NutstoreService.ts +++ b/src/renderer/src/services/NutstoreService.ts @@ -3,6 +3,8 @@ import store from '@renderer/store' import { setNutstoreSyncState } from '@renderer/store/nutstore' import { WebDavConfig } from '@renderer/types' import { NUTSTORE_HOST } from '@shared/config/nutstore' +import dayjs from 'dayjs' +import Logger from 'electron-log' import { type CreateDirectoryOptions } from 'webdav' import { getBackupData, handleData } from './BackupService' @@ -59,13 +61,18 @@ let syncTimeout: NodeJS.Timeout | null = null let isAutoBackupRunning = 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() if (!nutstoreToken) { return } - const { showMessage = false } = options if (isManualBackupRunning) { console.log('Backup already in progress') return @@ -76,6 +83,16 @@ export async function backupToNutstore(options: { showMessage?: boolean } = {}) 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 store.dispatch(setNutstoreSyncState({ syncing: true, lastSyncError: null })) @@ -83,7 +100,7 @@ export async function backupToNutstore(options: { showMessage?: boolean } = {}) const backupData = await getBackupData() try { - const isSuccess = await window.api.backup.backupToWebdav(backupData, config) + const isSuccess = await window.api.backup.backupToWebdav(backupData, { ...config, fileName: finalFileName }) if (isSuccess) { store.dispatch(