From 0542741d7055658e5dda233f6110c4202f620c6b Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Tue, 8 Jul 2025 22:09:17 +0200 Subject: [PATCH 1/3] refactor: move scheduleTimer to one place --- CHANGELOG.md | 1 + modules/default/calendar/calendarfetcher.js | 20 ++++---------------- modules/default/newsfeed/newsfeedfetcher.js | 20 ++++---------------- modules/default/server_utils.js | 18 ++++++++++++++++++ 4 files changed, 27 insertions(+), 32 deletions(-) create mode 100644 modules/default/server_utils.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 4656a6c0d3..137fe8d58b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ Thanks to: @dathbe. ### Changed - [clock] Add CSS to prevent line breaking of sunset/sunrise time display (#3816) +- [refactor] Add new file `modules/default/server_utils.js` to move code used in several modules to one place (#3837) ### Updated diff --git a/modules/default/calendar/calendarfetcher.js b/modules/default/calendar/calendarfetcher.js index 92c65a1d66..9ce71fe678 100644 --- a/modules/default/calendar/calendarfetcher.js +++ b/modules/default/calendar/calendarfetcher.js @@ -2,6 +2,7 @@ const https = require("node:https"); const ical = require("node-ical"); const Log = require("logger"); const NodeHelper = require("node_helper"); +const { scheduleTimer } = require("../server_utils"); const CalendarFetcherUtils = require("./calendarfetcherutils"); /** @@ -65,31 +66,18 @@ const CalendarFetcher = function (url, reloadInterval, excludedEvents, maximumEn }); } catch (error) { fetchFailedCallback(this, error); - scheduleTimer(); + scheduleTimer(reloadTimer, reloadInterval, fetchCalendar); return; } this.broadcastEvents(); - scheduleTimer(); + scheduleTimer(reloadTimer, reloadInterval, fetchCalendar); }) .catch((error) => { fetchFailedCallback(this, error); - scheduleTimer(); + scheduleTimer(reloadTimer, reloadInterval, fetchCalendar); }); }; - /** - * Schedule the timer for the next update. - */ - const scheduleTimer = function () { - if (process.env.JEST_WORKER_ID === undefined) { - // only set timer when not running in jest - clearTimeout(reloadTimer); - reloadTimer = setTimeout(function () { - fetchCalendar(); - }, reloadInterval); - } - }; - /* public methods */ /** diff --git a/modules/default/newsfeed/newsfeedfetcher.js b/modules/default/newsfeed/newsfeedfetcher.js index adad744289..e5150ede74 100644 --- a/modules/default/newsfeed/newsfeedfetcher.js +++ b/modules/default/newsfeed/newsfeedfetcher.js @@ -5,6 +5,7 @@ const iconv = require("iconv-lite"); const { htmlToText } = require("html-to-text"); const Log = require("logger"); const NodeHelper = require("node_helper"); +const { scheduleTimer } = require("../server_utils"); /** * Responsible for requesting an update on the set interval and broadcasting the data. @@ -79,12 +80,12 @@ const NewsfeedFetcher = function (url, reloadInterval, encoding, logFeedWarnings parser.on("error", (error) => { fetchFailedCallback(this, error); - scheduleTimer(); + scheduleTimer(reloadTimer, reloadIntervalMS, fetchNews); }); //"end" event is not broadcast if the feed is empty but "finish" is used for both parser.on("finish", () => { - scheduleTimer(); + scheduleTimer(reloadTimer, reloadIntervalMS, fetchNews); }); parser.on("ttl", (minutes) => { @@ -120,23 +121,10 @@ const NewsfeedFetcher = function (url, reloadInterval, encoding, logFeedWarnings }) .catch((error) => { fetchFailedCallback(this, error); - scheduleTimer(); + scheduleTimer(reloadTimer, reloadIntervalMS, fetchNews); }); }; - /** - * Schedule the timer for the next update. - */ - const scheduleTimer = function () { - if (process.env.JEST_WORKER_ID === undefined) { - // only set timer when not running in jest - clearTimeout(reloadTimer); - reloadTimer = setTimeout(function () { - fetchNews(); - }, reloadIntervalMS); - } - }; - /* public methods */ /** diff --git a/modules/default/server_utils.js b/modules/default/server_utils.js new file mode 100644 index 0000000000..96ba4f28a6 --- /dev/null +++ b/modules/default/server_utils.js @@ -0,0 +1,18 @@ +/** + * Schedule the timer for the next update + * @param {object} timer The timer of the module + * @param {bigint} intervalMS interval in milliseconds + * @param {Function} callback function to call when the timer expires + */ +const scheduleTimer = function (timer, intervalMS, callback) { + if (process.env.JEST_WORKER_ID === undefined) { + // only set timer when not running in jest + let tmr = timer; + clearTimeout(tmr); + tmr = setTimeout(function () { + callback(); + }, intervalMS); + } +}; + +module.exports = { scheduleTimer }; From 5eed3f654acad803b3002a74b3afa9023def570e Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Tue, 8 Jul 2025 23:07:41 +0200 Subject: [PATCH 2/3] move new function to js dir --- CHANGELOG.md | 2 +- modules/default/server_utils.js => js/module_functions.js | 0 modules/default/calendar/calendarfetcher.js | 2 +- modules/default/newsfeed/newsfeedfetcher.js | 2 +- package.json | 3 ++- 5 files changed, 5 insertions(+), 4 deletions(-) rename modules/default/server_utils.js => js/module_functions.js (100%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 137fe8d58b..149deb1002 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,7 +16,7 @@ Thanks to: @dathbe. ### Changed - [clock] Add CSS to prevent line breaking of sunset/sunrise time display (#3816) -- [refactor] Add new file `modules/default/server_utils.js` to move code used in several modules to one place (#3837) +- [refactor] Add new file `js/module_functions.js` to move code used in several modules to one place (#3837) ### Updated diff --git a/modules/default/server_utils.js b/js/module_functions.js similarity index 100% rename from modules/default/server_utils.js rename to js/module_functions.js diff --git a/modules/default/calendar/calendarfetcher.js b/modules/default/calendar/calendarfetcher.js index 9ce71fe678..278050745e 100644 --- a/modules/default/calendar/calendarfetcher.js +++ b/modules/default/calendar/calendarfetcher.js @@ -2,7 +2,7 @@ const https = require("node:https"); const ical = require("node-ical"); const Log = require("logger"); const NodeHelper = require("node_helper"); -const { scheduleTimer } = require("../server_utils"); +const { scheduleTimer } = require("module_functions"); const CalendarFetcherUtils = require("./calendarfetcherutils"); /** diff --git a/modules/default/newsfeed/newsfeedfetcher.js b/modules/default/newsfeed/newsfeedfetcher.js index e5150ede74..aa6bf690a6 100644 --- a/modules/default/newsfeed/newsfeedfetcher.js +++ b/modules/default/newsfeed/newsfeedfetcher.js @@ -5,7 +5,7 @@ const iconv = require("iconv-lite"); const { htmlToText } = require("html-to-text"); const Log = require("logger"); const NodeHelper = require("node_helper"); -const { scheduleTimer } = require("../server_utils"); +const { scheduleTimer } = require("module_functions"); /** * Responsible for requesting an update on the set interval and broadcasting the data. diff --git a/package.json b/package.json index c21ac11856..b0fa2e69d1 100644 --- a/package.json +++ b/package.json @@ -116,6 +116,7 @@ }, "_moduleAliases": { "node_helper": "js/node_helper.js", - "logger": "js/logger.js" + "logger": "js/logger.js", + "module_functions": "js/module_functions.js" } } From 995dd7da0836e24f303171644403d193692a1b01 Mon Sep 17 00:00:00 2001 From: Kristjan ESPERANTO <35647502+KristjanESPERANTO@users.noreply.github.com> Date: Wed, 9 Jul 2025 21:28:03 +0200 Subject: [PATCH 3/3] refactor: use built-in `imports` instead of `_moduleAliases` --- modules/default/calendar/calendarfetcher.js | 2 +- modules/default/newsfeed/newsfeedfetcher.js | 2 +- package.json | 8 ++++++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/modules/default/calendar/calendarfetcher.js b/modules/default/calendar/calendarfetcher.js index 278050745e..b7499b0fe3 100644 --- a/modules/default/calendar/calendarfetcher.js +++ b/modules/default/calendar/calendarfetcher.js @@ -2,8 +2,8 @@ const https = require("node:https"); const ical = require("node-ical"); const Log = require("logger"); const NodeHelper = require("node_helper"); -const { scheduleTimer } = require("module_functions"); const CalendarFetcherUtils = require("./calendarfetcherutils"); +const { scheduleTimer } = require("#module_functions"); /** * diff --git a/modules/default/newsfeed/newsfeedfetcher.js b/modules/default/newsfeed/newsfeedfetcher.js index aa6bf690a6..bcebc271e9 100644 --- a/modules/default/newsfeed/newsfeedfetcher.js +++ b/modules/default/newsfeed/newsfeedfetcher.js @@ -5,7 +5,7 @@ const iconv = require("iconv-lite"); const { htmlToText } = require("html-to-text"); const Log = require("logger"); const NodeHelper = require("node_helper"); -const { scheduleTimer } = require("module_functions"); +const { scheduleTimer } = require("#module_functions"); /** * Responsible for requesting an update on the set interval and broadcasting the data. diff --git a/package.json b/package.json index b0fa2e69d1..6859a2abc8 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,11 @@ "https://github.com/MagicMirrorOrg/MagicMirror/graphs/contributors" ], "type": "commonjs", + "imports": { + "#module_functions": { + "default": "./js/module_functions.js" + } + }, "main": "js/electron.js", "scripts": { "config:check": "node js/check_config.js", @@ -116,7 +121,6 @@ }, "_moduleAliases": { "node_helper": "js/node_helper.js", - "logger": "js/logger.js", - "module_functions": "js/module_functions.js" + "logger": "js/logger.js" } }