fix: 修复跨平台恢复场景下的笔记目录验证和默认路径重置逻辑 (#11950)

* fix: 修复跨平台恢复场景下的笔记目录验证和默认路径重置逻辑

* fix: 优化跨平台恢复场景下的笔记目录验证逻辑,跳过默认路径的验证
This commit is contained in:
SuYao 2025-12-17 13:36:13 +08:00 committed by GitHub
parent 432b31c7b1
commit 784fdd4fed
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
12 changed files with 49 additions and 1 deletions

View File

@ -163,7 +163,7 @@ class FileStorage {
fs.mkdirSync(this.storageDir, { recursive: true }) fs.mkdirSync(this.storageDir, { recursive: true })
} }
if (!fs.existsSync(this.notesDir)) { if (!fs.existsSync(this.notesDir)) {
fs.mkdirSync(this.storageDir, { recursive: true }) fs.mkdirSync(this.notesDir, { recursive: true })
} }
if (!fs.existsSync(this.tempDir)) { if (!fs.existsSync(this.tempDir)) {
fs.mkdirSync(this.tempDir, { recursive: true }) fs.mkdirSync(this.tempDir, { recursive: true })

View File

@ -2152,6 +2152,7 @@
"collapse": "Collapse", "collapse": "Collapse",
"content_placeholder": "Please enter the note content...", "content_placeholder": "Please enter the note content...",
"copyContent": "Copy Content", "copyContent": "Copy Content",
"crossPlatformRestoreWarning": "Cross-platform configuration restored, but notes directory is empty. Please copy your note files to: {{path}}",
"delete": "delete", "delete": "delete",
"delete_confirm": "Are you sure you want to delete this {{type}}?", "delete_confirm": "Are you sure you want to delete this {{type}}?",
"delete_folder_confirm": "Are you sure you want to delete the folder \"{{name}}\" and all of its contents?", "delete_folder_confirm": "Are you sure you want to delete the folder \"{{name}}\" and all of its contents?",

View File

@ -2152,6 +2152,7 @@
"collapse": "收起", "collapse": "收起",
"content_placeholder": "请输入笔记内容...", "content_placeholder": "请输入笔记内容...",
"copyContent": "复制内容", "copyContent": "复制内容",
"crossPlatformRestoreWarning": "检测到从其他设备恢复配置,但笔记目录为空。请将笔记文件复制到: {{path}}",
"delete": "删除", "delete": "删除",
"delete_confirm": "确定要删除这个{{type}}吗?", "delete_confirm": "确定要删除这个{{type}}吗?",
"delete_folder_confirm": "确定要删除文件夹 \"{{name}}\" 及其所有内容吗?", "delete_folder_confirm": "确定要删除文件夹 \"{{name}}\" 及其所有内容吗?",

View File

@ -2152,6 +2152,7 @@
"collapse": "收合", "collapse": "收合",
"content_placeholder": "請輸入筆記內容...", "content_placeholder": "請輸入筆記內容...",
"copyContent": "複製內容", "copyContent": "複製內容",
"crossPlatformRestoreWarning": "偵測到從其他裝置恢復設定,但筆記目錄為空。請將筆記檔案複製到:{{path}}",
"delete": "刪除", "delete": "刪除",
"delete_confirm": "確定要刪除此 {{type}} 嗎?", "delete_confirm": "確定要刪除此 {{type}} 嗎?",
"delete_folder_confirm": "確定要刪除資料夾 \"{{name}}\" 及其所有內容嗎?", "delete_folder_confirm": "確定要刪除資料夾 \"{{name}}\" 及其所有內容嗎?",

View File

@ -2152,6 +2152,7 @@
"collapse": "Einklappen", "collapse": "Einklappen",
"content_placeholder": "Bitte Notizinhalt eingeben...", "content_placeholder": "Bitte Notizinhalt eingeben...",
"copyContent": "Inhalt kopieren", "copyContent": "Inhalt kopieren",
"crossPlatformRestoreWarning": "[to be translated]:Cross-platform configuration restored, but notes directory is empty. Please copy your note files to: {{path}}",
"delete": "Löschen", "delete": "Löschen",
"delete_confirm": "Möchten Sie diesen {{type}} wirklich löschen?", "delete_confirm": "Möchten Sie diesen {{type}} wirklich löschen?",
"delete_folder_confirm": "Möchten Sie Ordner \"{{name}}\" und alle seine Inhalte wirklich löschen?", "delete_folder_confirm": "Möchten Sie Ordner \"{{name}}\" und alle seine Inhalte wirklich löschen?",

View File

@ -2152,6 +2152,7 @@
"collapse": "σύμπτυξη", "collapse": "σύμπτυξη",
"content_placeholder": "Παρακαλώ εισαγάγετε το περιεχόμενο των σημειώσεων...", "content_placeholder": "Παρακαλώ εισαγάγετε το περιεχόμενο των σημειώσεων...",
"copyContent": "αντιγραφή περιεχομένου", "copyContent": "αντιγραφή περιεχομένου",
"crossPlatformRestoreWarning": "[to be translated]:Cross-platform configuration restored, but notes directory is empty. Please copy your note files to: {{path}}",
"delete": "διαγραφή", "delete": "διαγραφή",
"delete_confirm": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό το {{type}};", "delete_confirm": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό το {{type}};",
"delete_folder_confirm": "Θέλετε να διαγράψετε τον φάκελο «{{name}}» και όλο το περιεχόμενό του;", "delete_folder_confirm": "Θέλετε να διαγράψετε τον φάκελο «{{name}}» και όλο το περιεχόμενό του;",

View File

@ -2152,6 +2152,7 @@
"collapse": "ocultar", "collapse": "ocultar",
"content_placeholder": "Introduzca el contenido de la nota...", "content_placeholder": "Introduzca el contenido de la nota...",
"copyContent": "copiar contenido", "copyContent": "copiar contenido",
"crossPlatformRestoreWarning": "[to be translated]:Cross-platform configuration restored, but notes directory is empty. Please copy your note files to: {{path}}",
"delete": "eliminar", "delete": "eliminar",
"delete_confirm": "¿Estás seguro de que deseas eliminar este {{type}}?", "delete_confirm": "¿Estás seguro de que deseas eliminar este {{type}}?",
"delete_folder_confirm": "¿Está seguro de que desea eliminar la carpeta \"{{name}}\" y todo su contenido?", "delete_folder_confirm": "¿Está seguro de que desea eliminar la carpeta \"{{name}}\" y todo su contenido?",

View File

@ -2152,6 +2152,7 @@
"collapse": "réduire", "collapse": "réduire",
"content_placeholder": "Veuillez saisir le contenu de la note...", "content_placeholder": "Veuillez saisir le contenu de la note...",
"copyContent": "contenu copié", "copyContent": "contenu copié",
"crossPlatformRestoreWarning": "[to be translated]:Cross-platform configuration restored, but notes directory is empty. Please copy your note files to: {{path}}",
"delete": "supprimer", "delete": "supprimer",
"delete_confirm": "Êtes-vous sûr de vouloir supprimer ce {{type}} ?", "delete_confirm": "Êtes-vous sûr de vouloir supprimer ce {{type}} ?",
"delete_folder_confirm": "Êtes-vous sûr de vouloir supprimer le dossier \"{{name}}\" et tout son contenu ?", "delete_folder_confirm": "Êtes-vous sûr de vouloir supprimer le dossier \"{{name}}\" et tout son contenu ?",

View File

@ -2152,6 +2152,7 @@
"collapse": "閉じる", "collapse": "閉じる",
"content_placeholder": "メモの内容を入力してください...", "content_placeholder": "メモの内容を入力してください...",
"copyContent": "コンテンツをコピーします", "copyContent": "コンテンツをコピーします",
"crossPlatformRestoreWarning": "[to be translated]:Cross-platform configuration restored, but notes directory is empty. Please copy your note files to: {{path}}",
"delete": "削除", "delete": "削除",
"delete_confirm": "この{{type}}を本当に削除しますか?", "delete_confirm": "この{{type}}を本当に削除しますか?",
"delete_folder_confirm": "「{{name}}」フォルダーとそのすべての内容を削除してもよろしいですか?", "delete_folder_confirm": "「{{name}}」フォルダーとそのすべての内容を削除してもよろしいですか?",

View File

@ -2152,6 +2152,7 @@
"collapse": "[minimizar]", "collapse": "[minimizar]",
"content_placeholder": "Introduza o conteúdo da nota...", "content_placeholder": "Introduza o conteúdo da nota...",
"copyContent": "copiar conteúdo", "copyContent": "copiar conteúdo",
"crossPlatformRestoreWarning": "[to be translated]:Cross-platform configuration restored, but notes directory is empty. Please copy your note files to: {{path}}",
"delete": "eliminar", "delete": "eliminar",
"delete_confirm": "Tem a certeza de que deseja eliminar este {{type}}?", "delete_confirm": "Tem a certeza de que deseja eliminar este {{type}}?",
"delete_folder_confirm": "Tem a certeza de que deseja eliminar a pasta \"{{name}}\" e todos os seus conteúdos?", "delete_folder_confirm": "Tem a certeza de que deseja eliminar a pasta \"{{name}}\" e todos os seus conteúdos?",

View File

@ -2152,6 +2152,7 @@
"collapse": "Свернуть", "collapse": "Свернуть",
"content_placeholder": "Введите содержимое заметки...", "content_placeholder": "Введите содержимое заметки...",
"copyContent": "Копировать контент", "copyContent": "Копировать контент",
"crossPlatformRestoreWarning": "[to be translated]:Cross-platform configuration restored, but notes directory is empty. Please copy your note files to: {{path}}",
"delete": "удалить", "delete": "удалить",
"delete_confirm": "Вы уверены, что хотите удалить этот объект {{type}}?", "delete_confirm": "Вы уверены, что хотите удалить этот объект {{type}}?",
"delete_folder_confirm": "Вы уверены, что хотите удалить папку \"{{name}}\" со всем ее содержимым?", "delete_folder_confirm": "Вы уверены, что хотите удалить папку \"{{name}}\" со всем ее содержимым?",

View File

@ -39,6 +39,7 @@ import {
} from '@renderer/store/note' } from '@renderer/store/note'
import type { NotesSortType, NotesTreeNode } from '@renderer/types/note' import type { NotesSortType, NotesTreeNode } from '@renderer/types/note'
import type { FileChangeEvent } from '@shared/config/types' import type { FileChangeEvent } from '@shared/config/types'
import { message } from 'antd'
import { debounce } from 'lodash' import { debounce } from 'lodash'
import { AnimatePresence, motion } from 'motion/react' import { AnimatePresence, motion } from 'motion/react'
import type { FC } from 'react' import type { FC } from 'react'
@ -246,6 +247,43 @@ const NotesPage: FC = () => {
updateNotesPath(defaultPath) updateNotesPath(defaultPath)
return return
} }
// 验证路径是否有效(处理跨平台恢复场景)
try {
// 获取当前平台的默认路径
const info = await window.api.getAppInfo()
const defaultPath = info.notesPath
// 如果当前路径就是默认路径,跳过验证(默认路径始终有效)
if (notesPath === defaultPath) {
return
}
const isValid = await window.api.file.validateNotesDirectory(notesPath)
if (!isValid) {
logger.warn('Invalid notes path detected, resetting to default', { path: notesPath })
// 重置为默认路径
updateNotesPath(defaultPath)
// 检查默认路径下是否有笔记文件
try {
const tree = await window.api.file.getDirectoryStructure(defaultPath)
if (!tree || tree.length === 0) {
// 默认目录为空,提示用户需要迁移文件
message.warning({
content: t('notes.crossPlatformRestoreWarning', { path: defaultPath }),
duration: 10
})
}
} catch (error) {
// 目录不存在或读取失败,会由 FileStorage 自动创建
logger.debug('Default notes directory will be created', { error })
}
}
} catch (error) {
logger.error('Failed to validate notes path:', error as Error)
}
} }
initialize() initialize()