From a05eb23306ddad63da6a2e077d457d1dbc00c756 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Thu, 10 Jul 2025 08:12:09 +0200 Subject: [PATCH] refactor default modules: move scheduleTimer to one place (#3837) see #3819 --------- Co-authored-by: Kristjan ESPERANTO <35647502+KristjanESPERANTO@users.noreply.github.com> Co-authored-by: Veeck --- CHANGELOG.md | 3 ++- js/module_functions.js | 18 ++++++++++++++++++ modules/default/calendar/calendarfetcher.js | 20 ++++---------------- modules/default/newsfeed/newsfeedfetcher.js | 20 ++++---------------- package.json | 5 +++++ 5 files changed, 33 insertions(+), 33 deletions(-) create mode 100644 js/module_functions.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 96d317e3..e00648b1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,7 +16,8 @@ Thanks to: @dathbe. ### Changed - [clock] Add CSS to prevent line breaking of sunset/sunrise time display (#3816) -- [core] Enhance system information logging format and include additional env and RAM details +- [core] Enhance system information logging format and include additional env and RAM details (#3839) +- [refactor] Add new file `js/module_functions.js` to move code used in several modules to one place (#3837) ### Updated diff --git a/js/module_functions.js b/js/module_functions.js new file mode 100644 index 00000000..96ba4f28 --- /dev/null +++ b/js/module_functions.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 }; diff --git a/modules/default/calendar/calendarfetcher.js b/modules/default/calendar/calendarfetcher.js index 92c65a1d..b7499b0f 100644 --- a/modules/default/calendar/calendarfetcher.js +++ b/modules/default/calendar/calendarfetcher.js @@ -3,6 +3,7 @@ const ical = require("node-ical"); const Log = require("logger"); const NodeHelper = require("node_helper"); const CalendarFetcherUtils = require("./calendarfetcherutils"); +const { scheduleTimer } = require("#module_functions"); /** * @@ -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 adad7442..bcebc271 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("#module_functions"); /** * 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/package.json b/package.json index c21ac118..6859a2ab 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",