From 2c215c6a2412d7a08904f9cc014af2b32586318e Mon Sep 17 00:00:00 2001 From: zhangfen21082 <290440677@qq.com> Date: Fri, 21 Nov 2025 17:35:14 +0800 Subject: [PATCH 1/2] fix(folders): ensure context and toolbar folder creation respect parent - propagate optional parentId so context subfolders stay under their parents - regenerate API types to expose parentId in foldersAdd schema Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> --- src/main/api/dto/folders.ts | 1 + src/main/api/routes/folders.ts | 9 +++++---- src/renderer/components/sidebar/folders/Tree.vue | 2 +- src/renderer/components/sidebar/library/Library.vue | 2 +- src/renderer/composables/useFolders.ts | 11 ++++++++--- src/renderer/services/api/generated/index.ts | 5 ++++- 6 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/main/api/dto/folders.ts b/src/main/api/dto/folders.ts index 9f2dca9c..6ce8dade 100644 --- a/src/main/api/dto/folders.ts +++ b/src/main/api/dto/folders.ts @@ -2,6 +2,7 @@ import Elysia, { t } from 'elysia' const foldersAdd = t.Object({ name: t.String(), + parentId: t.Optional(t.Union([t.Number(), t.Null()])), }) const foldersUpdate = t.Object({ diff --git a/src/main/api/routes/folders.ts b/src/main/api/routes/folders.ts index e7ffcc74..5641d115 100644 --- a/src/main/api/routes/folders.ts +++ b/src/main/api/routes/folders.ts @@ -90,18 +90,19 @@ app '/', ({ body }) => { const db = useDB() - const { name } = body + const { name, parentId } = body const now = Date.now() + // (parentId) const { maxOrder } = db .prepare( ` SELECT COALESCE(MAX(orderIndex), -1) as maxOrder FROM folders - WHERE parentId IS NULL + WHERE parentId ${parentId ? '= ?' : 'IS NULL'} `, ) - .get() as { maxOrder: number } + .get(...(parentId ? [parentId] : [])) as { maxOrder: number } const newOrder = maxOrder + 1 @@ -120,7 +121,7 @@ app const { lastInsertRowid } = stmt.run( name, 'plain_text', - null, + parentId ?? null, 0, now, now, diff --git a/src/renderer/components/sidebar/folders/Tree.vue b/src/renderer/components/sidebar/folders/Tree.vue index 9f9ba8c6..e05eab53 100644 --- a/src/renderer/components/sidebar/folders/Tree.vue +++ b/src/renderer/components/sidebar/folders/Tree.vue @@ -210,7 +210,7 @@ provide(treeKeys, { - + {{ i18n.t("action.new.folder") }} diff --git a/src/renderer/components/sidebar/library/Library.vue b/src/renderer/components/sidebar/library/Library.vue index bc2d66ec..461a83ed 100644 --- a/src/renderer/components/sidebar/library/Library.vue +++ b/src/renderer/components/sidebar/library/Library.vue @@ -186,7 +186,7 @@ function onResizeTagList(val: number[]) { diff --git a/src/renderer/composables/useFolders.ts b/src/renderer/composables/useFolders.ts index 4c6b141e..a54287c9 100644 --- a/src/renderer/composables/useFolders.ts +++ b/src/renderer/composables/useFolders.ts @@ -123,12 +123,17 @@ async function getFolders(shouldEnsureVisibility = true) { } } -async function createFolder() { +async function createFolder(parentId?: number) { try { const { data } = await api.folders.postFolders({ name: i18n.t('folder.untitled'), + ...(parentId !== undefined && { parentId }), }) + if (parentId) { + await updateFolder(parentId, { isOpen: 1 }) + } + await getFolders(false) return data.id @@ -138,9 +143,9 @@ async function createFolder() { } } -async function createFolderAndSelect() { +async function createFolderAndSelect(parentId?: number) { const { clearSnippetsState } = useSnippets() - const id = await createFolder() + const id = await createFolder(parentId) if (id) { await selectFolder(Number(id)) diff --git a/src/renderer/services/api/generated/index.ts b/src/renderer/services/api/generated/index.ts index 65c36017..63c1656c 100644 --- a/src/renderer/services/api/generated/index.ts +++ b/src/renderer/services/api/generated/index.ts @@ -160,6 +160,9 @@ export type SnippetsResponse = { export interface FoldersAdd { name: string; + parentId?: + | (string | (string | (string | (string | (string | (string | number)))))) + | null; } export type FoldersResponse = { @@ -465,7 +468,7 @@ export class HttpClient { /** * @title massCode API - * @version 3.11.0 + * @version 4.2.2 * * Development documentation */ From b487c99122a881b8348fc3f7c0aa8a788ab30383 Mon Sep 17 00:00:00 2001 From: Zhangfen21082 <290440677@qq.com> Date: Tue, 25 Nov 2025 21:49:13 +0800 Subject: [PATCH 2/2] fix:remote extra code --- src/main/index.ts | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/main/index.ts b/src/main/index.ts index 911103e1..1b341d41 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -1,5 +1,5 @@ /* eslint-disable node/prefer-global/process */ -import { existsSync, readFileSync } from 'node:fs' +import { readFileSync } from 'node:fs' import path from 'node:path' import { app, BrowserWindow, Menu } from 'electron' import { initApi } from './api' @@ -115,12 +115,7 @@ else { } try { - const storagePath = store.preferences.get('storagePath') - const jsonDbPath = `${storagePath}/db.json` - - if (!existsSync(jsonDbPath)) - return - + const jsonDbPath = `${store.preferences.get('storagePath')}/db.json` const jsonData = readFileSync(jsonDbPath, 'utf8') migrateJsonToSqlite(JSON.parse(jsonData))