fix bulk/search action delete

This commit is contained in:
zadam 2022-06-08 22:25:00 +02:00
parent 15f8173add
commit 2d33f570f4
6 changed files with 47 additions and 35 deletions

46
package-lock.json generated
View File

@ -1,12 +1,12 @@
{ {
"name": "trilium", "name": "trilium",
"version": "0.51.2", "version": "0.52.1-beta",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "trilium", "name": "trilium",
"version": "0.51.2", "version": "0.52.1-beta",
"hasInstallScript": true, "hasInstallScript": true,
"license": "AGPL-3.0-only", "license": "AGPL-3.0-only",
"dependencies": { "dependencies": {
@ -21,7 +21,7 @@
"commonmark": "0.30.0", "commonmark": "0.30.0",
"cookie-parser": "1.4.6", "cookie-parser": "1.4.6",
"csurf": "1.11.0", "csurf": "1.11.0",
"dayjs": "1.11.2", "dayjs": "1.11.3",
"ejs": "3.1.8", "ejs": "3.1.8",
"electron-debug": "3.2.0", "electron-debug": "3.2.0",
"electron-dl": "3.3.1", "electron-dl": "3.3.1",
@ -65,7 +65,7 @@
"tmp": "0.2.1", "tmp": "0.2.1",
"turndown": "7.1.1", "turndown": "7.1.1",
"unescape": "1.0.1", "unescape": "1.0.1",
"ws": "8.6.0", "ws": "8.7.0",
"yauzl": "2.10.0" "yauzl": "2.10.0"
}, },
"bin": { "bin": {
@ -82,7 +82,7 @@
"jsdoc": "3.6.10", "jsdoc": "3.6.10",
"lorem-ipsum": "2.0.4", "lorem-ipsum": "2.0.4",
"rcedit": "3.0.1", "rcedit": "3.0.1",
"webpack": "5.72.1", "webpack": "5.73.0",
"webpack-cli": "4.9.2" "webpack-cli": "4.9.2"
}, },
"optionalDependencies": { "optionalDependencies": {
@ -3115,9 +3115,9 @@
} }
}, },
"node_modules/dayjs": { "node_modules/dayjs": {
"version": "1.11.2", "version": "1.11.3",
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.2.tgz", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.3.tgz",
"integrity": "sha512-F4LXf1OeU9hrSYRPTTj/6FbO4HTjPKXvEIC1P2kcnFurViINCVk3ZV0xAS3XVx9MkMsXbbqlK6hjseaYbgKEHw==" "integrity": "sha512-xxwlswWOlGhzgQ4TKzASQkUhqERI3egRNqgV4ScR8wlANA/A9tZ7miXa44vTTKEq5l7vWoL5G57bG3zA+Kow0A=="
}, },
"node_modules/debug": { "node_modules/debug": {
"version": "4.3.4", "version": "4.3.4",
@ -10252,9 +10252,9 @@
} }
}, },
"node_modules/webpack": { "node_modules/webpack": {
"version": "5.72.1", "version": "5.73.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.72.1.tgz", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.73.0.tgz",
"integrity": "sha512-dXG5zXCLspQR4krZVR6QgajnZOjW2K/djHvdcRaDQvsjV9z9vaW6+ja5dZOYbqBBjF6kGXka/2ZyxNdc+8Jung==", "integrity": "sha512-svjudQRPPa0YiOYa2lM/Gacw0r6PvxptHj4FuEKQ2kX05ZLkjbVc5MnPs6its5j7IZljnIqSVo/OsY2X0IpHGA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@types/eslint-scope": "^3.7.3", "@types/eslint-scope": "^3.7.3",
@ -10594,9 +10594,9 @@
} }
}, },
"node_modules/ws": { "node_modules/ws": {
"version": "8.6.0", "version": "8.7.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.6.0.tgz", "resolved": "https://registry.npmjs.org/ws/-/ws-8.7.0.tgz",
"integrity": "sha512-AzmM3aH3gk0aX7/rZLYvjdvZooofDu3fFOzGqcSnQ1tOcTWwhM/o+q++E8mAyVVIyUdajrkzWUGftaVSDLn1bw==", "integrity": "sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg==",
"engines": { "engines": {
"node": ">=10.0.0" "node": ">=10.0.0"
}, },
@ -13271,9 +13271,9 @@
} }
}, },
"dayjs": { "dayjs": {
"version": "1.11.2", "version": "1.11.3",
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.2.tgz", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.3.tgz",
"integrity": "sha512-F4LXf1OeU9hrSYRPTTj/6FbO4HTjPKXvEIC1P2kcnFurViINCVk3ZV0xAS3XVx9MkMsXbbqlK6hjseaYbgKEHw==" "integrity": "sha512-xxwlswWOlGhzgQ4TKzASQkUhqERI3egRNqgV4ScR8wlANA/A9tZ7miXa44vTTKEq5l7vWoL5G57bG3zA+Kow0A=="
}, },
"debug": { "debug": {
"version": "4.3.4", "version": "4.3.4",
@ -18776,9 +18776,9 @@
"integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g=="
}, },
"webpack": { "webpack": {
"version": "5.72.1", "version": "5.73.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.72.1.tgz", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.73.0.tgz",
"integrity": "sha512-dXG5zXCLspQR4krZVR6QgajnZOjW2K/djHvdcRaDQvsjV9z9vaW6+ja5dZOYbqBBjF6kGXka/2ZyxNdc+8Jung==", "integrity": "sha512-svjudQRPPa0YiOYa2lM/Gacw0r6PvxptHj4FuEKQ2kX05ZLkjbVc5MnPs6its5j7IZljnIqSVo/OsY2X0IpHGA==",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/eslint-scope": "^3.7.3", "@types/eslint-scope": "^3.7.3",
@ -19028,9 +19028,9 @@
} }
}, },
"ws": { "ws": {
"version": "8.6.0", "version": "8.7.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.6.0.tgz", "resolved": "https://registry.npmjs.org/ws/-/ws-8.7.0.tgz",
"integrity": "sha512-AzmM3aH3gk0aX7/rZLYvjdvZooofDu3fFOzGqcSnQ1tOcTWwhM/o+q++E8mAyVVIyUdajrkzWUGftaVSDLn1bw==", "integrity": "sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg==",
"requires": {} "requires": {}
}, },
"xdg-basedir": { "xdg-basedir": {

View File

@ -36,7 +36,7 @@
"commonmark": "0.30.0", "commonmark": "0.30.0",
"cookie-parser": "1.4.6", "cookie-parser": "1.4.6",
"csurf": "1.11.0", "csurf": "1.11.0",
"dayjs": "1.11.2", "dayjs": "1.11.3",
"ejs": "3.1.8", "ejs": "3.1.8",
"electron-debug": "3.2.0", "electron-debug": "3.2.0",
"electron-dl": "3.3.1", "electron-dl": "3.3.1",
@ -80,7 +80,7 @@
"tmp": "0.2.1", "tmp": "0.2.1",
"turndown": "7.1.1", "turndown": "7.1.1",
"unescape": "1.0.1", "unescape": "1.0.1",
"ws": "8.6.0", "ws": "8.7.0",
"yauzl": "2.10.0" "yauzl": "2.10.0"
}, },
"devDependencies": { "devDependencies": {
@ -94,7 +94,7 @@
"jsdoc": "3.6.10", "jsdoc": "3.6.10",
"lorem-ipsum": "2.0.4", "lorem-ipsum": "2.0.4",
"rcedit": "3.0.1", "rcedit": "3.0.1",
"webpack": "5.72.1", "webpack": "5.73.0",
"webpack-cli": "4.9.2" "webpack-cli": "4.9.2"
}, },
"optionalDependencies": { "optionalDependencies": {

View File

@ -1133,6 +1133,10 @@ class Note extends AbstractEntity {
* @param {TaskContext} [taskContext] * @param {TaskContext} [taskContext]
*/ */
deleteNote(deleteId, taskContext) { deleteNote(deleteId, taskContext) {
if (this.isDeleted) {
return;
}
if (!deleteId) { if (!deleteId) {
deleteId = utils.randomString(10); deleteId = utils.randomString(10);
} }

View File

@ -9,15 +9,16 @@ const noteRevisionService = require("../../services/note_revisions");
const branchService = require("../../services/branches"); const branchService = require("../../services/branches");
const cloningService = require("../../services/cloning"); const cloningService = require("../../services/cloning");
const {formatAttrForSearch} = require("../../services/attribute_formatter"); const {formatAttrForSearch} = require("../../services/attribute_formatter");
const utils = require("../../services/utils.js");
async function searchFromNoteInt(note) { function searchFromNoteInt(note) {
let searchResultNoteIds; let searchResultNoteIds;
const searchScript = note.getRelationValue('searchScript'); const searchScript = note.getRelationValue('searchScript');
const searchString = note.getLabelValue('searchString'); const searchString = note.getLabelValue('searchString');
if (searchScript) { if (searchScript) {
searchResultNoteIds = await searchFromRelation(note, 'searchScript'); searchResultNoteIds = searchFromRelation(note, 'searchScript');
} else { } else {
const searchContext = new SearchContext({ const searchContext = new SearchContext({
fastSearch: note.hasLabel('fastSearch'), fastSearch: note.hasLabel('fastSearch'),
@ -61,7 +62,9 @@ async function searchFromNote(req) {
const ACTION_HANDLERS = { const ACTION_HANDLERS = {
deleteNote: (action, note) => { deleteNote: (action, note) => {
note.markAsDeleted(); const deleteId = 'searchbulkaction-' + utils.randomString(10);
note.deleteNote(deleteId);
}, },
deleteNoteRevisions: (action, note) => { deleteNoteRevisions: (action, note) => {
noteRevisionService.eraseNoteRevisions(note.getNoteRevisions().map(rev => rev.noteRevisionId)); noteRevisionService.eraseNoteRevisions(note.getNoteRevisions().map(rev => rev.noteRevisionId));
@ -149,7 +152,7 @@ function getActions(note) {
.filter(a => !!a); .filter(a => !!a);
} }
async function searchAndExecute(req) { function searchAndExecute(req) {
const note = becca.getNote(req.params.noteId); const note = becca.getNote(req.params.noteId);
if (!note) { if (!note) {
@ -165,7 +168,7 @@ async function searchAndExecute(req) {
return [400, `Note ${req.params.noteId} is not a search note.`] return [400, `Note ${req.params.noteId} is not a search note.`]
} }
const searchResultNoteIds = await searchFromNoteInt(note); const searchResultNoteIds = searchFromNoteInt(note);
const actions = getActions(note); const actions = getActions(note);

View File

@ -78,6 +78,10 @@ function findResultsWithExpression(expression, searchContext) {
const searchResults = noteSet.notes const searchResults = noteSet.notes
.map(note => { .map(note => {
if (note.isDeleted) {
return null;
}
const notePathArray = executionContext.noteIdToNotePath[note.noteId] || beccaService.getSomePath(note); const notePathArray = executionContext.noteIdToNotePath[note.noteId] || beccaService.getSomePath(note);
if (!notePathArray) { if (!notePathArray) {
@ -85,7 +89,8 @@ function findResultsWithExpression(expression, searchContext) {
} }
return new SearchResult(notePathArray); return new SearchResult(notePathArray);
}); })
.filter(note => !!note);
for (const res of searchResults) { for (const res of searchResults) {
res.computeScore(searchContext.highlightedTokens); res.computeScore(searchContext.highlightedTokens);
@ -129,7 +134,7 @@ function parseQueryToExpression(query, searchContext) {
structuredExpressionTokens, structuredExpressionTokens,
expression expression
}; };
log.info("Search debug: " + JSON.stringify(searchContext.debugInfo, null, 4)); log.info("Search debug: " + JSON.stringify(searchContext.debugInfo, null, 4));
} }

View File

@ -242,9 +242,9 @@ function transactional(func) {
return ret; return ret;
} }
catch (e) { 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."); log.info("Transaction rollback dirtied the becca, forcing reload.");
require('../becca/becca_loader').load(); require('../becca/becca_loader').load();