mirror of
https://github.com/MichMich/MagicMirror.git
synced 2025-04-25 06:58:30 -04:00
Thanks to: @Developer-Incoming, @eltociear, @geraki, @khassel, @KristjanESPERANTO, @MagMar94, @mixasgr, @n8many, @OWL4C, @rejas, @savvadam, @sdetweil. > ⚠️ This release needs nodejs version `v22.14.0 or higher` ### Added - Add CSS support to the digital clock hour/minute/second through the use of the classes `clock-hour-digital`, `clock-minute-digital`, and `clock-second-digital`. - Add Arabic (#3719) and Esperanto translation. - Mark option `secondsColor` as deprecated in clock module. - Add Greek translation to Alerts module. - [newsfeed] Add specific ignoreOlderThan value (override) per feed (#3360) - [weather] Added option Humidity to hourly View - [weather] Added option to hide hourly entries that are Zero, hiding the entire column if empty. - [updatenotification] Added option to iterate over modules directory instead using modules defined in `config.js` (#3739) ### Changed - [core] starting clientonly now checks for needed env var `WAYLAND_DISPLAY` or `DISPLAY` and starts electron with needed parameters (if both are set wayland is used) (#3677) - [core] Optimize systeminformation calls and output (#3689) - [core] Add issue templates for feature requests and bug reports (#3695) - [core] Adapt `start:x11:dev` script - [weather/yr] The Yr weather provider now enforces a minimum `updateInterval` of 600 000 ms (10 minutes) to comply with the terms of service. If a lower value is set, it will be automatically increased to this minimum. - [weather/weatherflow] Fixed icons and added hourly support as well as UV, precipitation, and location name support. - [workflow] Run `sudo apt-get update` before installing packages to avoid install errors - [workflow] Exclude issues with label `ready (coming with next release)` from stale job ### Removed ### Updated - [core] Update requirements and dependencies including electron to v35 and formatting (#3593, #3693, #3717) - [core] Update prettier, ESLint and simplify config - Update Greek translation ### Fixed - [calendar] Fix clipping events being broadcast (#3678) - [tests] Fix Electron tests by running them under new github image ubuntu-24.04, replace xserver with labwc, running under xserver and labwc depending on env variable WAYLAND_DISPLAY is set (#3676) - [calendar] Fix arrayed symbols, #3267, again, add testcase, add testcase for #3678 - [weather] Fix wrong weatherCondition name in openmeteo provider which lead to n/a icon (#3691) - [core] Fix wrong port in log message when starting server only (#3696) - [calendar] Fix NewYork event processed on system in Central timezone shows wrong time #3701 - [weather/yr] The Yr weather provider is now able to recover from bad API responses instead of freezing (#3296) - [compliments] Fix evening events being shown during the day (#3727) - [weather] Fixed minor spacing issues when using UV Index in Hourly - [workflow] Fix command to run spellcheck --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Michael Teeuw <michael@xonaymedia.nl> Co-authored-by: Kristjan ESPERANTO <35647502+KristjanESPERANTO@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Karsten Hassel <hassel@gmx.de> Co-authored-by: Ross Younger <crazyscot@gmail.com> Co-authored-by: Bugsounet - Cédric <github@bugsounet.fr> Co-authored-by: jkriegshauser <joshuakr@nvidia.com> Co-authored-by: illimarkangur <116028111+illimarkangur@users.noreply.github.com> Co-authored-by: sam detweiler <sdetweil@gmail.com> Co-authored-by: vppencilsharpener <tim.pray@gmail.com> Co-authored-by: Paranoid93 <6515818+Paranoid93@users.noreply.github.com> Co-authored-by: Brian O'Connor <btoconnor@users.noreply.github.com> Co-authored-by: WallysWellies <59727507+WallysWellies@users.noreply.github.com> Co-authored-by: Jason Stieber <jrstieber@gmail.com> Co-authored-by: jargordon <50050429+jargordon@users.noreply.github.com> Co-authored-by: Daniel <32464403+dkallen78@users.noreply.github.com> Co-authored-by: Ryan Williams <65094007+ryan-d-williams@users.noreply.github.com> Co-authored-by: Panagiotis Skias <panagiotis.skias@gmail.com> Co-authored-by: Marc Landis <dirk.rettschlag@gmail.com> Co-authored-by: HeikoGr <20295490+HeikoGr@users.noreply.github.com> Co-authored-by: Pedro Lamas <pedrolamas@gmail.com> Co-authored-by: veeck <gitkraken@veeck.de> Co-authored-by: Magnus <34011212+MagMar94@users.noreply.github.com> Co-authored-by: Ikko Eltociear Ashimine <eltociear@gmail.com> Co-authored-by: DevIncomin <56730075+Developer-Incoming@users.noreply.github.com> Co-authored-by: Nathan <n8nyoung@gmail.com> Co-authored-by: mixasgr <mixasgr@users.noreply.github.com> Co-authored-by: Savvas Adamtziloglou <savvas-gr@greeklug.gr> Co-authored-by: Konstantinos <geraki@gmail.com> Co-authored-by: OWL4C <124401812+OWL4C@users.noreply.github.com>
121 lines
3 KiB
JavaScript
121 lines
3 KiB
JavaScript
const fs = require("node:fs");
|
|
const path = require("node:path");
|
|
const NodeHelper = require("node_helper");
|
|
const defaultModules = require("../defaultmodules");
|
|
const GitHelper = require("./git_helper");
|
|
const UpdateHelper = require("./update_helper");
|
|
|
|
const ONE_MINUTE = 60 * 1000;
|
|
|
|
module.exports = NodeHelper.create({
|
|
config: {},
|
|
|
|
updateTimer: null,
|
|
updateProcessStarted: false,
|
|
|
|
gitHelper: new GitHelper(),
|
|
updateHelper: null,
|
|
|
|
getModules (modules) {
|
|
if (this.config.useModulesFromConfig) {
|
|
return modules;
|
|
} else {
|
|
// get modules from modules-directory
|
|
const moduleDir = path.normalize(`${__dirname}/../../`);
|
|
const getDirectories = (source) => {
|
|
return fs.readdirSync(source, { withFileTypes: true })
|
|
.filter((dirent) => dirent.isDirectory() && dirent.name !== "default")
|
|
.map((dirent) => dirent.name);
|
|
};
|
|
return getDirectories(moduleDir);
|
|
}
|
|
},
|
|
|
|
async configureModules (modules) {
|
|
for (const moduleName of this.getModules(modules)) {
|
|
if (!this.ignoreUpdateChecking(moduleName)) {
|
|
await this.gitHelper.add(moduleName);
|
|
}
|
|
}
|
|
|
|
if (!this.ignoreUpdateChecking("MagicMirror")) {
|
|
await this.gitHelper.add("MagicMirror");
|
|
}
|
|
},
|
|
|
|
async socketNotificationReceived (notification, payload) {
|
|
switch (notification) {
|
|
case "CONFIG":
|
|
this.config = payload;
|
|
this.updateHelper = new UpdateHelper(this.config);
|
|
await this.updateHelper.check_PM2_Process();
|
|
break;
|
|
case "MODULES":
|
|
// if this is the 1st time thru the update check process
|
|
if (!this.updateProcessStarted) {
|
|
this.updateProcessStarted = true;
|
|
await this.configureModules(payload);
|
|
await this.performFetch();
|
|
}
|
|
break;
|
|
case "SCAN_UPDATES":
|
|
// 1st time of check allows to force new scan
|
|
if (this.updateProcessStarted) {
|
|
clearTimeout(this.updateTimer);
|
|
await this.performFetch();
|
|
}
|
|
break;
|
|
}
|
|
},
|
|
|
|
async performFetch () {
|
|
const repos = await this.gitHelper.getRepos();
|
|
|
|
for (const repo of repos) {
|
|
this.sendSocketNotification("REPO_STATUS", repo);
|
|
}
|
|
|
|
const updates = await this.gitHelper.checkUpdates();
|
|
|
|
if (this.config.sendUpdatesNotifications && updates.length) {
|
|
this.sendSocketNotification("UPDATES", updates);
|
|
}
|
|
|
|
if (updates.length) {
|
|
const updateResult = await this.updateHelper.parse(updates);
|
|
for (const update of updateResult) {
|
|
if (update.inProgress) {
|
|
this.sendSocketNotification("UPDATE_STATUS", update);
|
|
}
|
|
}
|
|
}
|
|
|
|
this.scheduleNextFetch(this.config.updateInterval);
|
|
},
|
|
|
|
scheduleNextFetch (delay) {
|
|
clearTimeout(this.updateTimer);
|
|
|
|
this.updateTimer = setTimeout(
|
|
() => {
|
|
this.performFetch();
|
|
},
|
|
Math.max(delay, ONE_MINUTE)
|
|
);
|
|
},
|
|
|
|
ignoreUpdateChecking (moduleName) {
|
|
// Should not check for updates for default modules
|
|
if (defaultModules.includes(moduleName)) {
|
|
return true;
|
|
}
|
|
|
|
// Should not check for updates for ignored modules
|
|
if (this.config.ignoreModules.includes(moduleName)) {
|
|
return true;
|
|
}
|
|
|
|
// The rest of the modules that passes should check for updates
|
|
return false;
|
|
}
|
|
});
|