trilium/src/services/handlers.js

46 lines
1.6 KiB
JavaScript
Raw Normal View History

const eventService = require('./events');
const scriptService = require('./script');
const treeService = require('./tree');
const messagingService = require('./messaging');
2018-08-10 02:08:00 +08:00
const repository = require('./repository');
2018-08-15 04:50:05 +08:00
const log = require('./log');
2018-08-10 19:30:20 +08:00
async function runAttachedRelations(note, relationName, originEntity) {
const attributes = await note.getAttributes();
2018-08-10 02:08:00 +08:00
const runRelations = attributes.filter(relation => relation.type === 'relation' && relation.name === relationName);
for (const relation of runRelations) {
const scriptNote = await relation.getTargetNote();
2018-08-15 04:50:05 +08:00
if (scriptNote) {
await scriptService.executeNote(scriptNote, originEntity);
}
else {
log.error(`Target note ${relation.value} of atttribute ${relation.attributeId} has not been found.`);
}
}
2018-08-10 02:08:00 +08:00
}
eventService.subscribe(eventService.NOTE_TITLE_CHANGED, async note => {
await runAttachedRelations(note, 'runOnNoteTitleChange', note);
if (!note.isRoot()) {
const parents = await note.getParentNotes();
for (const parent of parents) {
if (await parent.hasLabel("sorted")) {
await treeService.sortNotesAlphabetically(parent.noteId);
messagingService.sendMessageToAllClients({ type: 'refresh-tree' });
}
}
}
2018-08-10 02:08:00 +08:00
});
eventService.subscribe(eventService.ENTITY_CHANGED, async ({ entityId, entityName }) => {
if (entityName === 'attributes') {
const attribute = await repository.getEntityFromName(entityName, entityId);
await runAttachedRelations(await attribute.getNote(), 'runOnAttributeChange', attribute);
}
});