From 2d33f570f4ebfa8dad2ad2cda87de99b96d51e1d Mon Sep 17 00:00:00 2001 From: zadam Date: Wed, 8 Jun 2022 22:25:00 +0200 Subject: [PATCH] fix bulk/search action delete --- package-lock.json | 46 +++++++++++++------------- package.json | 6 ++-- src/becca/entities/note.js | 4 +++ src/routes/api/search.js | 13 +++++--- src/services/search/services/search.js | 9 +++-- src/services/sql.js | 4 +-- 6 files changed, 47 insertions(+), 35 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6424b4f78..a873e3fa7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "trilium", - "version": "0.51.2", + "version": "0.52.1-beta", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "trilium", - "version": "0.51.2", + "version": "0.52.1-beta", "hasInstallScript": true, "license": "AGPL-3.0-only", "dependencies": { @@ -21,7 +21,7 @@ "commonmark": "0.30.0", "cookie-parser": "1.4.6", "csurf": "1.11.0", - "dayjs": "1.11.2", + "dayjs": "1.11.3", "ejs": "3.1.8", "electron-debug": "3.2.0", "electron-dl": "3.3.1", @@ -65,7 +65,7 @@ "tmp": "0.2.1", "turndown": "7.1.1", "unescape": "1.0.1", - "ws": "8.6.0", + "ws": "8.7.0", "yauzl": "2.10.0" }, "bin": { @@ -82,7 +82,7 @@ "jsdoc": "3.6.10", "lorem-ipsum": "2.0.4", "rcedit": "3.0.1", - "webpack": "5.72.1", + "webpack": "5.73.0", "webpack-cli": "4.9.2" }, "optionalDependencies": { @@ -3115,9 +3115,9 @@ } }, "node_modules/dayjs": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.2.tgz", - "integrity": "sha512-F4LXf1OeU9hrSYRPTTj/6FbO4HTjPKXvEIC1P2kcnFurViINCVk3ZV0xAS3XVx9MkMsXbbqlK6hjseaYbgKEHw==" + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.3.tgz", + "integrity": "sha512-xxwlswWOlGhzgQ4TKzASQkUhqERI3egRNqgV4ScR8wlANA/A9tZ7miXa44vTTKEq5l7vWoL5G57bG3zA+Kow0A==" }, "node_modules/debug": { "version": "4.3.4", @@ -10252,9 +10252,9 @@ } }, "node_modules/webpack": { - "version": "5.72.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.72.1.tgz", - "integrity": "sha512-dXG5zXCLspQR4krZVR6QgajnZOjW2K/djHvdcRaDQvsjV9z9vaW6+ja5dZOYbqBBjF6kGXka/2ZyxNdc+8Jung==", + "version": "5.73.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.73.0.tgz", + "integrity": "sha512-svjudQRPPa0YiOYa2lM/Gacw0r6PvxptHj4FuEKQ2kX05ZLkjbVc5MnPs6its5j7IZljnIqSVo/OsY2X0IpHGA==", "dev": true, "dependencies": { "@types/eslint-scope": "^3.7.3", @@ -10594,9 +10594,9 @@ } }, "node_modules/ws": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.6.0.tgz", - "integrity": "sha512-AzmM3aH3gk0aX7/rZLYvjdvZooofDu3fFOzGqcSnQ1tOcTWwhM/o+q++E8mAyVVIyUdajrkzWUGftaVSDLn1bw==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.7.0.tgz", + "integrity": "sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg==", "engines": { "node": ">=10.0.0" }, @@ -13271,9 +13271,9 @@ } }, "dayjs": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.2.tgz", - "integrity": "sha512-F4LXf1OeU9hrSYRPTTj/6FbO4HTjPKXvEIC1P2kcnFurViINCVk3ZV0xAS3XVx9MkMsXbbqlK6hjseaYbgKEHw==" + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.3.tgz", + "integrity": "sha512-xxwlswWOlGhzgQ4TKzASQkUhqERI3egRNqgV4ScR8wlANA/A9tZ7miXa44vTTKEq5l7vWoL5G57bG3zA+Kow0A==" }, "debug": { "version": "4.3.4", @@ -18776,9 +18776,9 @@ "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" }, "webpack": { - "version": "5.72.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.72.1.tgz", - "integrity": "sha512-dXG5zXCLspQR4krZVR6QgajnZOjW2K/djHvdcRaDQvsjV9z9vaW6+ja5dZOYbqBBjF6kGXka/2ZyxNdc+8Jung==", + "version": "5.73.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.73.0.tgz", + "integrity": "sha512-svjudQRPPa0YiOYa2lM/Gacw0r6PvxptHj4FuEKQ2kX05ZLkjbVc5MnPs6its5j7IZljnIqSVo/OsY2X0IpHGA==", "dev": true, "requires": { "@types/eslint-scope": "^3.7.3", @@ -19028,9 +19028,9 @@ } }, "ws": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.6.0.tgz", - "integrity": "sha512-AzmM3aH3gk0aX7/rZLYvjdvZooofDu3fFOzGqcSnQ1tOcTWwhM/o+q++E8mAyVVIyUdajrkzWUGftaVSDLn1bw==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.7.0.tgz", + "integrity": "sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg==", "requires": {} }, "xdg-basedir": { diff --git a/package.json b/package.json index e619e299a..d37eff8eb 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "commonmark": "0.30.0", "cookie-parser": "1.4.6", "csurf": "1.11.0", - "dayjs": "1.11.2", + "dayjs": "1.11.3", "ejs": "3.1.8", "electron-debug": "3.2.0", "electron-dl": "3.3.1", @@ -80,7 +80,7 @@ "tmp": "0.2.1", "turndown": "7.1.1", "unescape": "1.0.1", - "ws": "8.6.0", + "ws": "8.7.0", "yauzl": "2.10.0" }, "devDependencies": { @@ -94,7 +94,7 @@ "jsdoc": "3.6.10", "lorem-ipsum": "2.0.4", "rcedit": "3.0.1", - "webpack": "5.72.1", + "webpack": "5.73.0", "webpack-cli": "4.9.2" }, "optionalDependencies": { diff --git a/src/becca/entities/note.js b/src/becca/entities/note.js index 662a0ba78..4b43f07dc 100644 --- a/src/becca/entities/note.js +++ b/src/becca/entities/note.js @@ -1133,6 +1133,10 @@ class Note extends AbstractEntity { * @param {TaskContext} [taskContext] */ deleteNote(deleteId, taskContext) { + if (this.isDeleted) { + return; + } + if (!deleteId) { deleteId = utils.randomString(10); } diff --git a/src/routes/api/search.js b/src/routes/api/search.js index ca64f24fe..9e4e9ce15 100644 --- a/src/routes/api/search.js +++ b/src/routes/api/search.js @@ -9,15 +9,16 @@ const noteRevisionService = require("../../services/note_revisions"); const branchService = require("../../services/branches"); const cloningService = require("../../services/cloning"); const {formatAttrForSearch} = require("../../services/attribute_formatter"); +const utils = require("../../services/utils.js"); -async function searchFromNoteInt(note) { +function searchFromNoteInt(note) { let searchResultNoteIds; const searchScript = note.getRelationValue('searchScript'); const searchString = note.getLabelValue('searchString'); if (searchScript) { - searchResultNoteIds = await searchFromRelation(note, 'searchScript'); + searchResultNoteIds = searchFromRelation(note, 'searchScript'); } else { const searchContext = new SearchContext({ fastSearch: note.hasLabel('fastSearch'), @@ -61,7 +62,9 @@ async function searchFromNote(req) { const ACTION_HANDLERS = { deleteNote: (action, note) => { - note.markAsDeleted(); + const deleteId = 'searchbulkaction-' + utils.randomString(10); + + note.deleteNote(deleteId); }, deleteNoteRevisions: (action, note) => { noteRevisionService.eraseNoteRevisions(note.getNoteRevisions().map(rev => rev.noteRevisionId)); @@ -149,7 +152,7 @@ function getActions(note) { .filter(a => !!a); } -async function searchAndExecute(req) { +function searchAndExecute(req) { const note = becca.getNote(req.params.noteId); if (!note) { @@ -165,7 +168,7 @@ async function searchAndExecute(req) { return [400, `Note ${req.params.noteId} is not a search note.`] } - const searchResultNoteIds = await searchFromNoteInt(note); + const searchResultNoteIds = searchFromNoteInt(note); const actions = getActions(note); diff --git a/src/services/search/services/search.js b/src/services/search/services/search.js index c8729e365..b5389569e 100644 --- a/src/services/search/services/search.js +++ b/src/services/search/services/search.js @@ -78,6 +78,10 @@ function findResultsWithExpression(expression, searchContext) { const searchResults = noteSet.notes .map(note => { + if (note.isDeleted) { + return null; + } + const notePathArray = executionContext.noteIdToNotePath[note.noteId] || beccaService.getSomePath(note); if (!notePathArray) { @@ -85,7 +89,8 @@ function findResultsWithExpression(expression, searchContext) { } return new SearchResult(notePathArray); - }); + }) + .filter(note => !!note); for (const res of searchResults) { res.computeScore(searchContext.highlightedTokens); @@ -129,7 +134,7 @@ function parseQueryToExpression(query, searchContext) { structuredExpressionTokens, expression }; - + log.info("Search debug: " + JSON.stringify(searchContext.debugInfo, null, 4)); } diff --git a/src/services/sql.js b/src/services/sql.js index 1f60ef52e..06159abda 100644 --- a/src/services/sql.js +++ b/src/services/sql.js @@ -242,9 +242,9 @@ function transactional(func) { return ret; } catch (e) { - const entityChanges = cls.getAndClearEntityChangeIds(); + const entityChangeIds = cls.getAndClearEntityChangeIds(); - if (entityChanges.length > 0) { + if (entityChangeIds.length > 0) { log.info("Transaction rollback dirtied the becca, forcing reload."); require('../becca/becca_loader').load();