From 087bfcab18047b57b064a1d5fbe59a6cd5b1dbda Mon Sep 17 00:00:00 2001 From: mdwriter-09idI Date: Tue, 11 Jul 2023 14:50:28 +0800 Subject: [PATCH] fix: rename dir name error --- src/renderer/src/components/tree/ui/TreeRender.tsx | 2 +- src/renderer/src/editor/parser/index.ts | 10 +++++++--- .../src/{components/tree => store}/parserNode.ts | 10 +++++----- src/renderer/src/store/tree.ts | 10 ++++++---- src/renderer/src/{components => store}/watch.ts | 8 ++++---- 5 files changed, 23 insertions(+), 17 deletions(-) rename src/renderer/src/{components/tree => store}/parserNode.ts (89%) rename src/renderer/src/{components => store}/watch.ts (94%) diff --git a/src/renderer/src/components/tree/ui/TreeRender.tsx b/src/renderer/src/components/tree/ui/TreeRender.tsx index dfeb9e81..12f1d002 100644 --- a/src/renderer/src/components/tree/ui/TreeRender.tsx +++ b/src/renderer/src/components/tree/ui/TreeRender.tsx @@ -56,7 +56,7 @@ const RenderItem = observer(({items, level}: {items: IFileItem[], level: number} clearTimeout(timer.current) timer.current = window.setTimeout(() => { treeStore.saveNote(item) - }, 60) + }, 30) }, []) return ( <> diff --git a/src/renderer/src/editor/parser/index.ts b/src/renderer/src/editor/parser/index.ts index b135e6f6..2af9d282 100644 --- a/src/renderer/src/editor/parser/index.ts +++ b/src/renderer/src/editor/parser/index.ts @@ -141,7 +141,11 @@ const parserBlock = (nodes: Content[], top = false) => { return els } export const markdownParser = (filePath: string) => { - const mdStr = fs.readFileSync(filePath, {encoding: 'utf-8'}) - const root = parser.parse(mdStr) - return {schema: parserBlock(root.children, true), nodes: root.children} + try { + const mdStr = fs.readFileSync(filePath, {encoding: 'utf-8'}) + const root = parser.parse(mdStr) + return {schema: parserBlock(root.children, true), nodes: root.children} + } catch (e) { + return {schema: [], nodes: []} + } } diff --git a/src/renderer/src/components/tree/parserNode.ts b/src/renderer/src/store/parserNode.ts similarity index 89% rename from src/renderer/src/components/tree/parserNode.ts rename to src/renderer/src/store/parserNode.ts index 167fecea..29d0818b 100644 --- a/src/renderer/src/components/tree/parserNode.ts +++ b/src/renderer/src/store/parserNode.ts @@ -1,6 +1,6 @@ -import {IFileItem} from '../../index' +import {IFileItem} from '../index' import {readdirSync, statSync} from 'fs' -import {basename, join, parse} from 'path' +import {basename, extname, join, parse} from 'path' import {observable} from 'mobx' import {nanoid} from 'nanoid' @@ -11,14 +11,14 @@ export const createFileNode = (params: { filePath?: string mode?: IFileItem['mode'] }) => { - const p = parse(params.fileName) + const p = params.folder ? params.fileName : parse(params.fileName).name const node = { id: nanoid(), - filename: p.name, + filename: p, folder: params.folder, children: params.folder ? [] : undefined, mode: params.mode, - ext: params.folder ? undefined : p.ext.replace(/^\./, ''), + ext: params.folder ? undefined : extname(params.fileName).replace(/^\./, ''), } as IFileItem Object.defineProperty(node, 'parent', { diff --git a/src/renderer/src/store/tree.ts b/src/renderer/src/store/tree.ts index 00f51b47..5db09d31 100644 --- a/src/renderer/src/store/tree.ts +++ b/src/renderer/src/store/tree.ts @@ -1,6 +1,6 @@ import {action, makeAutoObservable, observable, runInAction} from 'mobx' import {GetFields, IFileItem, Tab} from '../index' -import {createFileNode, parserNode, sortFiles} from '../components/tree/parserNode' +import {createFileNode, parserNode, sortFiles} from './parserNode' import {nanoid} from 'nanoid' import {basename, join, parse} from 'path' import {mkdirSync, appendFileSync, existsSync, renameSync, watch, statSync, readFileSync} from 'fs' @@ -8,7 +8,7 @@ import {MainApi} from '../api/main' import {markdownParser} from '../editor/parser' import {MenuKey} from '../utils/keyboard' import {message$, stat} from '../utils' -import {Watcher} from '../components/watch' +import {Watcher} from './watch' import {Subject} from 'rxjs' import {mediaType} from '../editor/utils/dom' import {configStore} from './config' @@ -405,8 +405,10 @@ export class TreeStore { } else { const p = parse(file.editName) const path = file.filePath - file.filename = p.name - renameSync(path, join(path, '..', p.name) + `.${file.ext}`) + file.filename = file.folder ? file.editName : p.name + let newPath = join(path, '..', file.filename) + if (!file.folder && file.ext) newPath += `.${file.ext}` + renameSync(path, newPath) file.mode = undefined } } diff --git a/src/renderer/src/components/watch.ts b/src/renderer/src/store/watch.ts similarity index 94% rename from src/renderer/src/components/watch.ts rename to src/renderer/src/store/watch.ts index 1726072b..74f505b2 100644 --- a/src/renderer/src/components/watch.ts +++ b/src/renderer/src/store/watch.ts @@ -1,7 +1,7 @@ -import {TreeStore} from '../store/tree' +import {TreeStore} from './tree' import {basename, join} from 'path' import {runInAction} from 'mobx' -import {createFileNode, sortFiles} from './tree/parserNode' +import {createFileNode, sortFiles} from './parserNode' import {markdownParser} from '../editor/parser' import {mediaType} from '../editor/utils/dom' @@ -53,7 +53,7 @@ export class Watcher { const parent = nodesMap.get(join(path, '..'))! switch (e) { case 'add': - if (!parent.children!.find(c => c.filePath === path)) { + if (parent.children && !parent.children.find(c => c.filePath === path)) { runInAction(() => { parent.children!.push(createFileNode({ folder: false, @@ -73,7 +73,7 @@ export class Watcher { }) break case 'addDir': - if (!parent.children!.find(c => c.filePath === path)) { + if (parent.children && !parent.children.find(c => c.filePath === path)) { runInAction(() => { parent.children!.push(createFileNode({ folder: true,