diff --git a/src/entities/entity_constructor.js b/src/entities/entity_constructor.js index 892c0a71d..00fa8d084 100644 --- a/src/entities/entity_constructor.js +++ b/src/entities/entity_constructor.js @@ -5,7 +5,6 @@ const Branch = require('../entities/branch'); const Attribute = require('../entities/attribute'); const RecentNote = require('../entities/recent_note'); const ApiToken = require('../entities/api_token'); -const Option = require('../entities/option'); const cls = require('../services/cls'); const ENTITY_NAME_TO_ENTITY = { @@ -16,7 +15,6 @@ const ENTITY_NAME_TO_ENTITY = { "note_revisions": NoteRevision, "note_revision_contents": NoteRevision, "recent_notes": RecentNote, - "options": Option, "api_tokens": ApiToken, }; @@ -57,9 +55,6 @@ function createEntityFromRow(row) { cls.setEntityToCache('notes', row.noteId, entity); } - else if (row.name) { - entity = new Option(row); - } else { throw new Error('Unknown entity type for row: ' + JSON.stringify(row)); } diff --git a/src/services/becca/becca.js b/src/services/becca/becca.js index 814397ddb..f2a2ad7e1 100644 --- a/src/services/becca/becca.js +++ b/src/services/becca/becca.js @@ -75,6 +75,10 @@ class Becca { return row ? new NoteRevision(row) : null; } + + getOption(name) { + return this.options[name]; + } } const becca = new Becca(); diff --git a/src/services/becca/becca_loader.js b/src/services/becca/becca_loader.js index 0cb0facd0..29f5c301d 100644 --- a/src/services/becca/becca_loader.js +++ b/src/services/becca/becca_loader.js @@ -10,8 +10,14 @@ const Branch = require('./entities/branch'); const Attribute = require('./entities/attribute'); const Option = require('./entities/option'); -sqlInit.dbReady.then(() => { - load(); +const beccaLoaded = new Promise((res, rej) => { + sqlInit.dbReady.then(() => { + load(); + + require('../options_init').initStartupOptions(); + + res(); + }); }); function load() { @@ -182,5 +188,6 @@ eventService.subscribe(eventService.ENTER_PROTECTED_SESSION, () => { eventService.subscribe(eventService.LEAVE_PROTECTED_SESSION, load); module.exports = { - load + load, + beccaLoaded }; diff --git a/src/services/becca/entities/option.js b/src/services/becca/entities/option.js index 056d41474..78054cf5f 100644 --- a/src/services/becca/entities/option.js +++ b/src/services/becca/entities/option.js @@ -26,6 +26,8 @@ class Option extends AbstractEntity { super.beforeSaving(); this.utcDateModified = dateUtils.utcNowDateTime(); + // utcDateCreated is scheduled for removal so the value does not matter + this.utcDateCreated = dateUtils.utcNowDateTime(); } } diff --git a/src/services/content_hash.js b/src/services/content_hash.js index 331318ac0..2fbbc18c6 100644 --- a/src/services/content_hash.js +++ b/src/services/content_hash.js @@ -3,13 +3,6 @@ const sql = require('./sql'); const utils = require('./utils'); const log = require('./log'); -const ApiToken = require('../entities/api_token'); -const Branch = require('../entities/branch'); -const Note = require('../entities/note'); -const Attribute = require('../entities/attribute'); -const NoteRevision = require('./becca/entities/note_revision.js'); -const RecentNote = require('../entities/recent_note'); -const Option = require('../entities/option'); function getSectorHashes(tableName, primaryKeyName, whereBranch) { const hashes = sql.getRows(`SELECT ${primaryKeyName} AS id, hash FROM ${tableName}` diff --git a/src/services/options.js b/src/services/options.js index a7c96752f..c27e050ed 100644 --- a/src/services/options.js +++ b/src/services/options.js @@ -1,8 +1,10 @@ +const becca = require('./becca/becca'); + function getOption(name) { - const option = require('./becca').getOption(name); + const option = require('./becca/becca').getOption(name); if (!option) { - throw new Error(`Option ${name} doesn't exist`); + throw new Error(`Option "${name}" doesn't exist`); } return option.value; @@ -37,7 +39,7 @@ function getOptionBool(name) { } function setOption(name, value) { - const option = require('./becca').getOption(name); + const option = becca.getOption(name); if (value === true || value === false) { value = value.toString(); @@ -65,11 +67,17 @@ function createOption(name, value, isSynced) { } function getOptions() { - return require('./repository').getEntities("SELECT * FROM options ORDER BY name"); + return Object.values(becca.options); } function getOptionsMap() { - return require('./sql').getMap("SELECT name, value FROM options ORDER BY name"); + const map = {}; + + for (const option of Object.values(becca.options)) { + map[option.name] = option.value; + } + + return map; } module.exports = { diff --git a/src/services/sql_init.js b/src/services/sql_init.js index e5ab38e0c..279c3b05f 100644 --- a/src/services/sql_init.js +++ b/src/services/sql_init.js @@ -5,7 +5,7 @@ const sql = require('./sql'); const utils = require('./utils'); const optionService = require('./options'); const port = require('./port'); -const Option = require('../entities/option'); +const Option = require('./becca/entities/option'); const TaskContext = require('./task_context.js'); const migrationService = require('./migration'); const cls = require('./cls'); @@ -39,8 +39,6 @@ async function initDbConnection() { await migrationService.migrateIfNecessary(); - require('./options_init').initStartupOptions(); - sql.execute('CREATE TEMP TABLE "param_list" (`paramId` TEXT NOT NULL PRIMARY KEY)'); dbReady.resolve(); diff --git a/src/services/sync.js b/src/services/sync.js index f6bca6eab..7833603d9 100644 --- a/src/services/sync.js +++ b/src/services/sync.js @@ -383,17 +383,15 @@ function getOutstandingPullCount() { return outstandingPullCount; } -sqlInit.dbReady.then(() => { +require("./becca/becca_loader").beccaLoaded.then(() => { setInterval(cls.wrap(sync), 60000); // kickoff initial sync immediately setTimeout(cls.wrap(sync), 5000); -}); -if (sqlInit.isDbInitialized()) { // called just so ws.setLastSyncedPush() is called getLastSyncedPush(); -} +}); module.exports = { sync,