fix delete note function just work one time, closes #1101

This commit is contained in:
zadam 2020-06-10 23:43:59 +02:00
parent 2d92b4931a
commit 910bda860c
5 changed files with 31 additions and 62 deletions

View File

@ -1,29 +0,0 @@
export default class Mutex {
constructor() {
this.queue = [];
this.pending = false;
}
isLocked() {
return this.pending;
}
acquire() {
const ticket = new Promise(resolve => this.queue.push(resolve));
if (!this.pending) {
this.dispatchNext();
}
return ticket;
}
dispatchNext() {
if (this.queue.length > 0) {
this.pending = true;
this.queue.shift()(this.dispatchNext.bind(this));
} else {
this.pending = false;
}
}
}

View File

@ -22,7 +22,7 @@ async function resolveNotePath(notePath) {
* *
* @return {string[]} * @return {string[]}
*/ */
async function getRunPath(notePath) { async function getRunPath(notePath, logErrors = true) {
utils.assertArguments(notePath); utils.assertArguments(notePath);
notePath = notePath.split("-")[0].trim(); notePath = notePath.split("-")[0].trim();
@ -66,10 +66,14 @@ async function getRunPath(notePath) {
} }
if (!parents.some(p => p.noteId === parentNoteId)) { if (!parents.some(p => p.noteId === parentNoteId)) {
console.debug(utils.now(), "Did not find parent " + parentNoteId + " for child " + childNoteId); if (logErrors) {
console.log(utils.now(), "Did not find parent " + parentNoteId + " for child " + childNoteId);
}
if (parents.length > 0) { if (parents.length > 0) {
console.debug(utils.now(), "Available parents:", parents); if (logErrors) {
console.log(utils.now(), "Available parents:", parents);
}
const someNotePath = await getSomeNotePath(parents[0]); const someNotePath = await getSomeNotePath(parents[0]);
@ -86,7 +90,10 @@ async function getRunPath(notePath) {
break; break;
} }
else { else {
if (logErrors) {
console.log("No parents so no run path."); console.log("No parents so no run path.");
}
return; return;
} }
} }

View File

@ -1,13 +1,11 @@
import utils from '../services/utils.js'; import utils from '../services/utils.js';
import Mutex from "../services/mutex.js";
/** /**
* Abstract class for all components in the Trilium's frontend. * Abstract class for all components in the Trilium's frontend.
* *
* Contains also event implementation with following properties: * Contains also event implementation with following properties:
* - event / command distribution is synchronous which among others mean that events are well ordered - event * - event / command distribution is synchronous which among others mean that events are well ordered - event
* which was sent out first will also be processed first by the component since it was added to the mutex queue * which was sent out first will also be processed first by the component
* as the first one
* - execution of the event / command is asynchronous - each component executes the event on its own without regard for * - execution of the event / command is asynchronous - each component executes the event on its own without regard for
* other components. * other components.
* - although the execution is async, we are collecting all the promises and therefore it is possible to wait until the * - although the execution is async, we are collecting all the promises and therefore it is possible to wait until the
@ -19,7 +17,6 @@ export default class Component {
/** @type Component[] */ /** @type Component[] */
this.children = []; this.children = [];
this.initialized = Promise.resolve(); this.initialized = Promise.resolve();
this.mutex = new Mutex();
} }
setParent(parent) { setParent(parent) {
@ -79,22 +76,8 @@ export default class Component {
return false; return false;
} }
let release;
try {
if (this.mutex.isLocked()) {
console.debug("Mutex locked for", this.constructor.name);
}
release = await this.mutex.acquire();
await fun.call(this, data); await fun.call(this, data);
return true; return true;
} finally {
if (release) {
release();
}
}
} }
} }

View File

@ -743,17 +743,20 @@ export default class NoteTreeWidget extends TabAwareWidget {
} }
/** @return {FancytreeNode} */ /** @return {FancytreeNode} */
async getNodeFromPath(notePath, expand = false) { async getNodeFromPath(notePath, expand = false, logErrors = true) {
utils.assertArguments(notePath); utils.assertArguments(notePath);
const hoistedNoteId = hoistedNoteService.getHoistedNoteId(); const hoistedNoteId = hoistedNoteService.getHoistedNoteId();
/** @var {FancytreeNode} */ /** @var {FancytreeNode} */
let parentNode = null; let parentNode = null;
const runPath = await treeService.getRunPath(notePath); const runPath = await treeService.getRunPath(notePath, logErrors);
if (!runPath) { if (!runPath) {
if (logErrors) {
console.error("Could not find run path for notePath:", notePath); console.error("Could not find run path for notePath:", notePath);
}
return; return;
} }
@ -790,7 +793,10 @@ export default class NoteTreeWidget extends TabAwareWidget {
foundChildNode = this.findChildNode(parentNode, childNoteId); foundChildNode = this.findChildNode(parentNode, childNoteId);
if (!foundChildNode) { if (!foundChildNode) {
if (logErrors) {
ws.logError(`Can't find node for child node of noteId=${childNoteId} for parent of noteId=${parentNode.data.noteId} and hoistedNoteId=${hoistedNoteId}, requested path is ${notePath}`); ws.logError(`Can't find node for child node of noteId=${childNoteId} for parent of noteId=${parentNode.data.noteId} and hoistedNoteId=${hoistedNoteId}, requested path is ${notePath}`);
}
return; return;
} }
} }
@ -817,8 +823,8 @@ export default class NoteTreeWidget extends TabAwareWidget {
} }
/** @return {FancytreeNode} */ /** @return {FancytreeNode} */
async expandToNote(notePath) { async expandToNote(notePath, logErrors = true) {
return this.getNodeFromPath(notePath, true); return this.getNodeFromPath(notePath, true, logErrors);
} }
updateNode(node) { updateNode(node) {
@ -1026,7 +1032,7 @@ export default class NoteTreeWidget extends TabAwareWidget {
} }
if (activeNotePath) { if (activeNotePath) {
let node = await this.expandToNote(activeNotePath); let node = await this.expandToNote(activeNotePath, false);
if (node && node.data.noteId !== activeNoteId) { if (node && node.data.noteId !== activeNoteId) {
// if the active note has been moved elsewhere then it won't be found by the path // if the active note has been moved elsewhere then it won't be found by the path
@ -1042,7 +1048,7 @@ export default class NoteTreeWidget extends TabAwareWidget {
} }
else { else {
// this is used when original note has been deleted and we want to move the focus to the note above/below // this is used when original note has been deleted and we want to move the focus to the note above/below
node = await this.expandToNote(nextNotePath); node = await this.expandToNote(nextNotePath, false);
if (node) { if (node) {
await appContext.tabManager.getActiveTabContext().setNote(nextNotePath); await appContext.tabManager.getActiveTabContext().setNote(nextNotePath);

View File

@ -68,6 +68,8 @@
.note-detail-image { .note-detail-image {
text-align: center; text-align: center;
height: 100%;
overflow: auto;
} }
.note-detail-image-view { .note-detail-image-view {