From 2fbcd9aaf758c99bc59f81f524faa3e703aff227 Mon Sep 17 00:00:00 2001 From: zadam Date: Wed, 23 Nov 2022 23:31:05 +0100 Subject: [PATCH] open window before loading becca --- electron.js | 10 +++++++--- package.json | 2 +- src/becca/becca_loader.js | 21 +++++++++++++-------- src/becca/becca_service.js | 3 +-- src/services/scheduler.js | 4 ++-- src/services/search/services/search.js | 2 +- src/services/window.js | 4 ++-- src/www | 6 +++++- 8 files changed, 32 insertions(+), 20 deletions(-) diff --git a/electron.js b/electron.js index f32f992ab..68aad6391 100644 --- a/electron.js +++ b/electron.js @@ -5,6 +5,7 @@ const sqlInit = require('./src/services/sql_init'); const appIconService = require('./src/services/app_icon'); const windowService = require('./src/services/window'); const tray = require('./src/services/tray'); +const beccaLoader = require("./src/becca/becca_loader"); // Adds debug features like hotkeys for triggering dev tools and reload require('electron-debug')(); @@ -28,14 +29,17 @@ app.on('ready', async () => { // if db is not initialized -> setup process // if db is initialized, then we need to wait until the migration process is finished if (sqlInit.isDbInitialized()) { - await sqlInit.dbReady; + // first let electron open the window, it will probably keep initializing for some time in async + windowService.createMainWindow(app); - await windowService.createMainWindow(app); + // then becca load will block the backend process for a while + await sqlInit.dbReady; + beccaLoader.loadInitially(); if (process.platform === 'darwin') { app.on('activate', async () => { if (BrowserWindow.getAllWindows().length === 0) { - await windowService.createMainWindow(app); + windowService.createMainWindow(app); } }); } diff --git a/package.json b/package.json index d0c307ae1..e476d4d8c 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ }, "scripts": { "start-server": "cross-env TRILIUM_DATA_DIR=./data TRILIUM_ENV=dev node ./src/www", - "start-electron": "cross-env TRILIUM_DATA_DIR=./data TRILIUM_ENV=dev electron --inspect=5858 .", + "start-electron": "cross-env TRILIUM_DATA_DIR=./data TRILIUM_ENV=dev electron --trace-warnings --inspect=5858 .", "switch-server": "rm -r ./node_modules/better-sqlite3 && npm install", "switch-electron": "rm -r ./node_modules/better-sqlite3 && npm install && ./node_modules/.bin/electron-rebuild", "build-backend-docs": "rm -r ./docs/backend_api && ./node_modules/.bin/jsdoc -c jsdoc-conf.json -d ./docs/backend_api src/becca/entities/*.js src/services/backend_script_api.js src/services/sql.js", diff --git a/src/becca/becca_loader.js b/src/becca/becca_loader.js index e21eeefe1..64a1377cf 100644 --- a/src/becca/becca_loader.js +++ b/src/becca/becca_loader.js @@ -13,16 +13,20 @@ const EtapiToken = require("./entities/etapi_token"); const cls = require("../services/cls"); const entityConstructor = require("../becca/entity_constructor"); +let setBeccaAsLoaded = null; + const beccaLoaded = new Promise((res, rej) => { - sqlInit.dbReady.then(() => { - load(); - - cls.init(() => require('../services/options_init').initStartupOptions()); - - res(); - }); + setBeccaAsLoaded = res; }); +function loadInitially() { + load(); + + cls.init(() => require('../services/options_init').initStartupOptions()); + + setBeccaAsLoaded(); +} + function load() { const start = Date.now(); becca.reset(); @@ -245,5 +249,6 @@ eventService.subscribeBeccaLoader(eventService.LEAVE_PROTECTED_SESSION, load); module.exports = { load, reload, - beccaLoaded + beccaLoaded, + loadInitially }; diff --git a/src/becca/becca_service.js b/src/becca/becca_service.js index f2cebbaae..954480ce0 100644 --- a/src/becca/becca_service.js +++ b/src/becca/becca_service.js @@ -1,8 +1,7 @@ "use strict"; -const becca = require('./becca.js'); +const becca = require('./becca'); const cls = require('../services/cls'); -const protectedSessionService = require('../services/protected_session'); const log = require('../services/log'); function isNotePathArchived(notePath) { diff --git a/src/services/scheduler.js b/src/services/scheduler.js index 20b964802..3c5cd5bbb 100644 --- a/src/services/scheduler.js +++ b/src/services/scheduler.js @@ -1,12 +1,12 @@ const scriptService = require('./script'); const cls = require('./cls'); -const sqlInit = require('./sql_init'); const config = require('./config'); const log = require('./log'); const sql = require("./sql"); const becca = require("../becca/becca"); const specialNotesService = require("../services/special_notes"); const protectedSessionService = require("../services/protected_session"); +const beccaLoader = require("../becca/becca_loader"); function getRunAtHours(note) { try { @@ -50,7 +50,7 @@ function runNotesWithLabel(runAttrValue) { } } -sqlInit.dbReady.then(() => { +beccaLoader.beccaLoaded.then(() => { if (!process.env.TRILIUM_SAFE_MODE) { cls.init(() => specialNotesService.createMissingSpecialNotes()); diff --git a/src/services/search/services/search.js b/src/services/search/services/search.js index 42897ebc5..bc469e8c7 100644 --- a/src/services/search/services/search.js +++ b/src/services/search/services/search.js @@ -10,7 +10,6 @@ const becca = require('../../../becca/becca'); const beccaService = require('../../../becca/becca_service'); const utils = require('../../utils'); const log = require('../../log'); -const scriptService = require("../../script.js"); function searchFromNote(note) { let searchResultNoteIds, highlightedTokens; @@ -69,6 +68,7 @@ function searchFromRelation(note, relationName) { return []; } + const scriptService = require("../../script"); const result = scriptService.executeNote(scriptNote, { originEntity: note }); if (!Array.isArray(result)) { diff --git a/src/services/window.js b/src/services/window.js index 6ccf16a5d..593bab020 100644 --- a/src/services/window.js +++ b/src/services/window.js @@ -44,11 +44,11 @@ ipcMain.on('create-extra-window', (event, arg) => { createExtraWindow(arg.notePath, arg.hoistedNoteId); }); -async function createMainWindow(app) { +function createMainWindow(app) { const windowStateKeeper = require('electron-window-state'); // should not be statically imported const mainWindowState = windowStateKeeper({ - // default window width & height so it's usable on 1600 * 900 display (including some extra panels etc.) + // default window width & height, so it's usable on 1600 * 900 display (including some extra panels etc.) defaultWidth: 1200, defaultHeight: 800 }); diff --git a/src/www b/src/www index 4652c785c..965173e6d 100644 --- a/src/www +++ b/src/www @@ -25,10 +25,10 @@ const log = require('./services/log'); const appInfo = require('./services/app_info'); const ws = require('./services/ws'); const utils = require('./services/utils'); -const sqlInit = require('./services/sql_init'); const port = require('./services/port'); const host = require('./services/host'); const semver = require('semver'); +const beccaLoader = require("./becca/becca_loader"); if (!semver.satisfies(process.version, ">=10.5.0")) { console.error("Trilium only supports node.js 10.5 and later"); @@ -95,6 +95,10 @@ async function startTrilium() { const cpuInfos = require('os').cpus(); log.info(`CPU model: ${cpuInfos[0].model}, logical cores: ${cpuInfos.length} freq: ${cpuInfos[0].speed} Mhz`); // for perf. issues it's good to know the rough configuration + if (!utils.isElectron()) { + beccaLoader.loadInitially(); + } + /** * Listen on provided port, on all network interfaces. */