From 16283d40548b9c62610dd0d91c91a1b713815990 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Wed, 3 Apr 2024 22:53:41 +0300 Subject: [PATCH] server-ts: Port services/spaced_update --- src/services/backend_script_api.js | 12 ++++++------ .../{spaced_update.js => spaced_update.ts} | 16 +++++++++++++--- 2 files changed, 19 insertions(+), 9 deletions(-) rename src/services/{spaced_update.js => spaced_update.ts} (78%) diff --git a/src/services/backend_script_api.js b/src/services/backend_script_api.js index a183f9d3b..7aba409b1 100644 --- a/src/services/backend_script_api.js +++ b/src/services/backend_script_api.js @@ -15,7 +15,7 @@ const searchService = require('./search/services/search'); const SearchContext = require('./search/search_context'); const becca = require('../becca/becca'); const ws = require('./ws'); -const SpacedUpdate = require('./spaced_update.js'); +const SpacedUpdate = require('./spaced_update'); const specialNotesService = require('./special_notes.js'); const branchService = require('./branches'); const exportService = require('./export/zip'); @@ -320,7 +320,7 @@ function BackendScriptApi(currentNote, apiParams) { * @param {string} [extraOptions.attributes.value] - attribute value * @returns {{note: BNote, branch: BBranch}} object contains newly created entities note and branch */ - this.createNote = (parentNoteId, title, content = "", extraOptions= {}) => { + this.createNote = (parentNoteId, title, content = "", extraOptions = {}) => { extraOptions.parentNoteId = parentNoteId; extraOptions.title = title; @@ -340,7 +340,7 @@ function BackendScriptApi(currentNote, apiParams) { } return sql.transactional(() => { - const {note, branch} = noteService.createNewNote(extraOptions); + const { note, branch } = noteService.createNewNote(extraOptions); for (const attr of extraOptions.attributes || []) { attributeService.createAttribute({ @@ -352,7 +352,7 @@ function BackendScriptApi(currentNote, apiParams) { }); } - return {note, branch}; + return { note, branch }; }); }; @@ -369,7 +369,7 @@ function BackendScriptApi(currentNote, apiParams) { this.log = message => { log.info(message); - const {noteId} = this.startNote; + const { noteId } = this.startNote; this.logMessages[noteId] = this.logMessages[noteId] || []; this.logSpacedUpdates[noteId] = this.logSpacedUpdates[noteId] || new SpacedUpdate(() => { @@ -600,7 +600,7 @@ function BackendScriptApi(currentNote, apiParams) { launcherNote.removeLabel('iconClass'); } - return {note: launcherNote}; + return { note: launcherNote }; }; /** diff --git a/src/services/spaced_update.js b/src/services/spaced_update.ts similarity index 78% rename from src/services/spaced_update.js rename to src/services/spaced_update.ts index 9518df908..24417d18c 100644 --- a/src/services/spaced_update.js +++ b/src/services/spaced_update.ts @@ -1,9 +1,19 @@ +type Updater = () => void; + class SpacedUpdate { - constructor(updater, updateInterval = 1000) { + + private updater: Updater; + private lastUpdated: number; + private changed: boolean; + private updateInterval: number; + private changeForbidden: boolean; + + constructor(updater: Updater, updateInterval = 1000) { this.updater = updater; this.lastUpdated = Date.now(); this.changed = false; this.updateInterval = updateInterval; + this.changeForbidden = false; } scheduleUpdate() { @@ -52,7 +62,7 @@ class SpacedUpdate { } } - async allowUpdateWithoutChange(callback) { + async allowUpdateWithoutChange(callback: () => void) { this.changeForbidden = true; try { @@ -64,4 +74,4 @@ class SpacedUpdate { } } -module.exports = SpacedUpdate; +export = SpacedUpdate;