refactoring

This commit is contained in:
zadam 2020-01-24 15:44:24 +01:00
parent 8651e47118
commit 4b66765cc1
12 changed files with 87 additions and 89 deletions

31
package-lock.json generated
View File

@ -3383,15 +3383,15 @@
} }
}, },
"electron-rebuild": { "electron-rebuild": {
"version": "1.8.8", "version": "1.9.0",
"resolved": "https://registry.npmjs.org/electron-rebuild/-/electron-rebuild-1.8.8.tgz", "resolved": "https://registry.npmjs.org/electron-rebuild/-/electron-rebuild-1.9.0.tgz",
"integrity": "sha512-9a/VGbVpTJcuBaZa8yMcegqJ5flGPYDo363AxXDMxY4ZHPtFMLedGzQW9+720SIS1cvjX8B0zC+vMHO75ncOiA==", "integrity": "sha512-lnHW+gJIhukqVhME2v+LRDldafWwP0kGOPEpPuj59+F4NHEfu/vOjk8OLBcgDGt72CSWZm7zFUDE07oZxQJbHw==",
"dev": true, "dev": true,
"requires": { "requires": {
"colors": "^1.3.3", "colors": "^1.3.3",
"debug": "^4.1.1", "debug": "^4.1.1",
"detect-libc": "^1.0.3", "detect-libc": "^1.0.3",
"fs-extra": "^7.0.1", "fs-extra": "^8.1.0",
"node-abi": "^2.11.0", "node-abi": "^2.11.0",
"node-gyp": "^6.0.1", "node-gyp": "^6.0.1",
"ora": "^3.4.0", "ora": "^3.4.0",
@ -3399,21 +3399,10 @@
"yargs": "^13.2.4" "yargs": "^13.2.4"
}, },
"dependencies": { "dependencies": {
"fs-extra": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
"integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
"dev": true,
"requires": {
"graceful-fs": "^4.1.2",
"jsonfile": "^4.0.0",
"universalify": "^0.1.0"
}
},
"rxjs": { "rxjs": {
"version": "6.5.3", "version": "6.5.4",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz",
"integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==", "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==",
"dev": true, "dev": true,
"requires": { "requires": {
"tslib": "^1.9.0" "tslib": "^1.9.0"
@ -7062,9 +7051,9 @@
} }
}, },
"node-gyp": { "node-gyp": {
"version": "6.0.1", "version": "6.1.0",
"resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-6.0.1.tgz", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-6.1.0.tgz",
"integrity": "sha512-udHG4hGe3Ji97AYJbJhaRwuSOuQO7KHnE4ZPH3Sox3tjRZ+bkBsDvfZ7eYA1qwD8eLWr//193x806ss3HFTPRw==", "integrity": "sha512-h4A2zDlOujeeaaTx06r4Vy+8MZ1679lU+wbCKDS4ZtvY2A37DESo37oejIw0mtmR3+rvNwts5B6Kpt1KrNYdNw==",
"dev": true, "dev": true,
"requires": { "requires": {
"env-paths": "^2.2.0", "env-paths": "^2.2.0",

View File

@ -80,7 +80,7 @@
"electron": "6.0.12", "electron": "6.0.12",
"electron-builder": "22.2.0", "electron-builder": "22.2.0",
"electron-packager": "14.2.0", "electron-packager": "14.2.0",
"electron-rebuild": "1.8.8", "electron-rebuild": "1.9.0",
"jsdoc": "3.6.3", "jsdoc": "3.6.3",
"lorem-ipsum": "2.0.3" "lorem-ipsum": "2.0.3"
}, },

View File

@ -172,12 +172,11 @@ function AttributesModel() {
toastService.showMessage("Attributes have been saved."); toastService.showMessage("Attributes have been saved.");
const ctx = appContext.getActiveTabContext(); appContext.getActiveTabContext().attributes.refreshAttributes();
ctx.attributes.refreshAttributes();
// reload
noteDetailService.reload(); noteDetailService.reload();
treeService.reload(); appContext.trigger('reloadTree');
}; };
function addLastEmptyRow() { function addLastEmptyRow() {

View File

@ -7,6 +7,7 @@ import treeUtils from "./tree_utils.js";
import hoistedNoteService from "./hoisted_note.js"; import hoistedNoteService from "./hoisted_note.js";
import noteDetailService from "./note_detail.js"; import noteDetailService from "./note_detail.js";
import ws from "./ws.js"; import ws from "./ws.js";
import appContext from "./app_context.js";
async function moveBeforeNode(branchIdsToMove, beforeBranchId) { async function moveBeforeNode(branchIdsToMove, beforeBranchId) {
branchIdsToMove = await filterRootNote(branchIdsToMove); branchIdsToMove = await filterRootNote(branchIdsToMove);
@ -147,7 +148,7 @@ async function deleteNodes(branchIdsToDelete) {
const noteIds = Array.from(new Set(nodes.map(node => node.getParent().data.noteId))); const noteIds = Array.from(new Set(nodes.map(node => node.getParent().data.noteId)));
await treeService.reloadNotes(noteIds); appContext.trigger('reloadNotes', {noteIds});
return true; return true;
} }

View File

@ -1,6 +1,6 @@
import treeService from './tree.js';
import treeCache from './tree_cache.js'; import treeCache from './tree_cache.js';
import server from './server.js'; import server from './server.js';
import appContext from "./app_context.js";
async function cloneNoteTo(childNoteId, parentNoteId, prefix) { async function cloneNoteTo(childNoteId, parentNoteId, prefix) {
const resp = await server.put('notes/' + childNoteId + '/clone-to/' + parentNoteId, { const resp = await server.put('notes/' + childNoteId + '/clone-to/' + parentNoteId, {
@ -12,7 +12,7 @@ async function cloneNoteTo(childNoteId, parentNoteId, prefix) {
return; return;
} }
await treeService.reloadNotes([childNoteId, parentNoteId]); appContext.trigger('reloadNotes', {noteIds: [childNoteId, parentNoteId]});
} }
// beware that first arg is noteId and second is branchId! // beware that first arg is noteId and second is branchId!
@ -26,7 +26,7 @@ async function cloneNoteAfter(noteId, afterBranchId) {
const afterBranch = treeCache.getBranch(afterBranchId); const afterBranch = treeCache.getBranch(afterBranchId);
await treeService.reloadNotes([noteId, afterBranch.parentNoteId]); appContext.trigger('reloadNotes', {noteIds: [noteId, afterBranch.parentNoteId]});
} }
export default { export default {

View File

@ -2,6 +2,7 @@ import optionsService from './options.js';
import server from "./server.js"; import server from "./server.js";
import tree from "./tree.js"; import tree from "./tree.js";
import noteDetailService from "./note_detail.js"; import noteDetailService from "./note_detail.js";
import appContext from "./app_context.js";
let hoistedNoteId = 'root'; let hoistedNoteId = 'root';
@ -28,13 +29,7 @@ async function setHoistedNoteId(noteId) {
await server.put('options/hoistedNoteId/' + noteId); await server.put('options/hoistedNoteId/' + noteId);
await tree.reload(); appContext.trigger('hoistedNoteChanged');
const activeTabContext = appContext.getActiveTabContext();
if (activeTabContext) {
await tree.activateNote(activeTabContext.notePath);
}
} }
async function unhoist() { async function unhoist() {

View File

@ -3,6 +3,7 @@ import treeService from "./tree.js";
import server from "./server.js"; import server from "./server.js";
import ws from "./ws.js"; import ws from "./ws.js";
import utils from "./utils.js"; import utils from "./utils.js";
import appContext from "./app_context.js";
export async function uploadFiles(parentNoteId, files, options) { export async function uploadFiles(parentNoteId, files, options) {
if (files.length === 0) { if (files.length === 0) {
@ -63,7 +64,7 @@ ws.subscribeToMessages(async message => {
toastService.showPersistent(toast); toastService.showPersistent(toast);
await treeService.reloadNotes([message.result.parentNoteId]); appContext.trigger('reloadNotes', {noteIds: [message.result.parentNoteId]});
if (message.result.importedNoteId) { if (message.result.importedNoteId) {
const node = await treeService.activateNote(message.result.importedNoteId); const node = await treeService.activateNote(message.result.importedNoteId);

View File

@ -48,10 +48,7 @@ async function setupProtectedSession(password) {
protectedSessionHolder.setProtectedSessionId(response.protectedSessionId); protectedSessionHolder.setProtectedSessionId(response.protectedSessionId);
protectedSessionHolder.touchProtectedSession(); protectedSessionHolder.touchProtectedSession();
await treeService.reload(); appContext.trigger('protectedSessionStarted');
// it's important that tree has been already reloaded at this point since detail also uses tree cache (for book)
await appContext.reloadAllTabs();
if (protectedSessionDeferred !== null) { if (protectedSessionDeferred !== null) {
import("../dialogs/protected_session.js").then(dialog => dialog.close()); import("../dialogs/protected_session.js").then(dialog => dialog.close());

View File

@ -10,7 +10,6 @@ import treeBuilder from "./tree_builder.js";
import hoistedNoteService from '../services/hoisted_note.js'; import hoistedNoteService from '../services/hoisted_note.js';
import optionsService from "../services/options.js"; import optionsService from "../services/options.js";
import bundle from "./bundle.js"; import bundle from "./bundle.js";
import keyboardActionService from "./keyboard_actions.js";
import appContext from "./app_context.js"; import appContext from "./app_context.js";
let setFrontendAsLoaded; let setFrontendAsLoaded;
@ -201,14 +200,6 @@ async function getSomeNotePath(note) {
return path.reverse().join('/'); return path.reverse().join('/');
} }
async function setExpandedToServer(branchId, isExpanded) {
utils.assertArguments(branchId);
const expandedNum = isExpanded ? 1 : 0;
await server.put('branches/' + branchId + '/expanded/' + expandedNum);
}
async function treeInitialized() { async function treeInitialized() {
if (appContext.getTabContexts().length > 0) { if (appContext.getTabContexts().length > 0) {
// this is just tree reload - tabs are already in place // this is just tree reload - tabs are already in place
@ -287,23 +278,6 @@ async function treeInitialized() {
setFrontendAsLoaded(); setFrontendAsLoaded();
} }
async function reload() {
const notes = await loadTreeData();
const activeNode = appContext.getMainNoteTree().getActiveNode();
const activeNotePath = activeNode !== null ? await treeUtils.getNotePath(activeNode) : null;
await appContext.getMainNoteTree().reload(notes);
// reactivate originally activated node, but don't trigger note loading
if (activeNotePath) {
const node = await appContext.getMainNoteTree().getNodeFromPath(activeNotePath, true);
await node.setActive(true, {noEvents: true});
}
}
function isNotePathInAddress() { function isNotePathInAddress() {
const [notePath, tabId] = getHashValueFromAddress(); const [notePath, tabId] = getHashValueFromAddress();
@ -503,24 +477,10 @@ ws.subscribeToOutsideSyncMessages(async syncData => {
}); });
if (noteIdsToRefresh.size > 0) { if (noteIdsToRefresh.size > 0) {
await reloadNotes(Array.from(noteIdsToRefresh)); appContext.trigger('reloadNotes', {noteIds: Array.from(noteIdsToRefresh)});
} }
}); });
async function reloadNotes(noteIds, activateNotePath = null) {
if (noteIds.length === 0) {
return;
}
await treeCache.reloadNotes(noteIds);
if (!activateNotePath) {
activateNotePath = appContext.getActiveTabNotePath();
}
appContext.trigger('notesReloaded', { noteIds, activateNotePath });
}
$(window).bind('hashchange', async function() { $(window).bind('hashchange', async function() {
if (isNotePathInAddress()) { if (isNotePathInAddress()) {
const [notePath, tabId] = getHashValueFromAddress(); const [notePath, tabId] = getHashValueFromAddress();
@ -532,7 +492,7 @@ $(window).bind('hashchange', async function() {
async function duplicateNote(noteId, parentNoteId) { async function duplicateNote(noteId, parentNoteId) {
const {note} = await server.post(`notes/${noteId}/duplicate/${parentNoteId}`); const {note} = await server.post(`notes/${noteId}/duplicate/${parentNoteId}`);
await reload(); await ws.waitForMaxKnownSyncId();
await activateNote(note.noteId); await activateNote(note.noteId);
@ -543,7 +503,6 @@ async function duplicateNote(noteId, parentNoteId) {
frontendLoaded.then(bundle.executeStartupBundles); frontendLoaded.then(bundle.executeStartupBundles);
export default { export default {
reload,
setProtected, setProtected,
activateNote, activateNote,
setPrefix, setPrefix,
@ -551,8 +510,6 @@ export default {
sortAlphabetically, sortAlphabetically,
loadTreeData, loadTreeData,
treeInitialized, treeInitialized,
setExpandedToServer,
reloadNotes,
resolveNotePath, resolveNotePath,
getSomeNotePath, getSomeNotePath,
createNewTopLevelNote, createNewTopLevelNote,

View File

@ -201,4 +201,12 @@ export default class NoteDetailWidget extends TabAwareWidget {
debug: true debug: true
}); });
} }
hoistedNoteChangedListener() {
this.refresh();
}
protectedSessionStartedListener() {
this.refresh();
}
} }

View File

@ -13,6 +13,7 @@ import treeChangesService from "../services/branches.js";
import ws from "../services/ws.js"; import ws from "../services/ws.js";
import appContext from "../services/app_context.js"; import appContext from "../services/app_context.js";
import TabAwareWidget from "./tab_aware_widget.js"; import TabAwareWidget from "./tab_aware_widget.js";
import server from "../services/server.js";
const TPL = ` const TPL = `
<div class="tree"> <div class="tree">
@ -105,8 +106,8 @@ export default class NoteTreeWidget extends TabAwareWidget {
this.appContext.activateNote(notePath); this.appContext.activateNote(notePath);
}, },
expand: (event, data) => treeService.setExpandedToServer(data.node.data.branchId, true), expand: (event, data) => this.setExpandedToServer(data.node.data.branchId, true),
collapse: (event, data) => treeService.setExpandedToServer(data.node.data.branchId, false), collapse: (event, data) => this.setExpandedToServer(data.node.data.branchId, false),
init: (event, data) => treeService.treeInitialized(), init: (event, data) => treeService.treeInitialized(),
hotkeys: { hotkeys: {
keydown: await treeKeyBindingService.getKeyboardBindings(this) keydown: await treeKeyBindingService.getKeyboardBindings(this)
@ -491,4 +492,50 @@ export default class NoteTreeWidget extends TabAwareWidget {
}); });
} }
} }
async setExpandedToServer(branchId, isExpanded) {
utils.assertArguments(branchId);
const expandedNum = isExpanded ? 1 : 0;
await server.put('branches/' + branchId + '/expanded/' + expandedNum);
}
async reloadNotesListener({noteIds, activateNotePath = null}) {
if (noteIds.length === 0) {
return;
}
await treeCache.reloadNotes(noteIds);
if (!activateNotePath) {
activateNotePath = appContext.getActiveTabNotePath();
}
appContext.trigger('notesReloaded', { noteIds, activateNotePath });
}
async reloadTreeListener() {
const notes = await treeService.loadTreeData();
const activeNode = this.getActiveNode();
const activeNotePath = activeNode !== null ? await treeUtils.getNotePath(activeNode) : null;
await this.reload(notes);
if (activeNotePath) {
const node = await this.getNodeFromPath(activeNotePath, true);
await node.setActive(true, {noEvents: true});
}
}
hoistedNoteChangedListener() {
this.reloadTreeListener();
}
protectedSessionStartedListener() {
this.reloadTreeListener();
}
} }

View File

@ -655,4 +655,8 @@ export default class TabRowWidget extends BasicWidget {
$tab.addClass(utils.getNoteTypeClass(note.type)); $tab.addClass(utils.getNoteTypeClass(note.type));
$tab.addClass(utils.getMimeTypeClass(note.mime)); $tab.addClass(utils.getMimeTypeClass(note.mime));
} }
protectedSessionStartedListener() {
// FIXME
}
} }