mirror of
https://github.com/MichMich/MagicMirror.git
synced 2025-06-27 03:39:55 +00: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>
137 lines
4.4 KiB
JavaScript
137 lines
4.4 KiB
JavaScript
"use strict";
|
|
|
|
// Use separate scope to prevent global scope pollution
|
|
(function () {
|
|
const config = {};
|
|
|
|
/**
|
|
* Helper function to get server address/hostname from either the commandline or env
|
|
*/
|
|
function getServerAddress () {
|
|
|
|
/**
|
|
* Get command line parameters
|
|
* Assumes that a cmdline parameter is defined with `--key [value]`
|
|
* @param {string} key key to look for at the command line
|
|
* @param {string} defaultValue value if no key is given at the command line
|
|
* @returns {string} the value of the parameter
|
|
*/
|
|
function getCommandLineParameter (key, defaultValue = undefined) {
|
|
const index = process.argv.indexOf(`--${key}`);
|
|
const value = index > -1 ? process.argv[index + 1] : undefined;
|
|
return value !== undefined ? String(value) : defaultValue;
|
|
}
|
|
|
|
// Prefer command line arguments over environment variables
|
|
["address", "port"].forEach((key) => {
|
|
config[key] = getCommandLineParameter(key, process.env[key.toUpperCase()]);
|
|
});
|
|
|
|
// determine if "--use-tls"-flag was provided
|
|
config.tls = process.argv.indexOf("--use-tls") > 0;
|
|
}
|
|
|
|
/**
|
|
* Gets the config from the specified server url
|
|
* @param {string} url location where the server is running.
|
|
* @returns {Promise} the config
|
|
*/
|
|
function getServerConfig (url) {
|
|
// Return new pending promise
|
|
return new Promise((resolve, reject) => {
|
|
// Select http or https module, depending on requested url
|
|
const lib = url.startsWith("https") ? require("node:https") : require("node:http");
|
|
const request = lib.get(url, (response) => {
|
|
let configData = "";
|
|
|
|
// Gather incoming data
|
|
response.on("data", function (chunk) {
|
|
configData += chunk;
|
|
});
|
|
// Resolve promise at the end of the HTTP/HTTPS stream
|
|
response.on("end", function () {
|
|
resolve(JSON.parse(configData));
|
|
});
|
|
});
|
|
|
|
request.on("error", function (error) {
|
|
reject(new Error(`Unable to read config from server (${url} (${error.message}`));
|
|
});
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Print a message to the console in case of errors
|
|
* @param {string} message error message to print
|
|
* @param {number} code error code for the exit call
|
|
*/
|
|
function fail (message, code = 1) {
|
|
if (message !== undefined && typeof message === "string") {
|
|
console.log(message);
|
|
} else {
|
|
console.log("Usage: 'node clientonly --address 192.168.1.10 --port 8080 [--use-tls]'");
|
|
}
|
|
process.exit(code);
|
|
}
|
|
|
|
getServerAddress();
|
|
|
|
(config.address && config.port) || fail();
|
|
const prefix = config.tls ? "https://" : "http://";
|
|
|
|
// Only start the client if a non-local server was provided
|
|
if (["localhost", "127.0.0.1", "::1", "::ffff:127.0.0.1", undefined].indexOf(config.address) === -1) {
|
|
getServerConfig(`${prefix}${config.address}:${config.port}/config/`)
|
|
.then(function (configReturn) {
|
|
// check environment for DISPLAY or WAYLAND_DISPLAY
|
|
const elecParams = ["js/electron.js"];
|
|
if (process.env.WAYLAND_DISPLAY) {
|
|
console.log(`Client: Using WAYLAND_DISPLAY=${process.env.WAYLAND_DISPLAY}`);
|
|
elecParams.push("--enable-features=UseOzonePlatform");
|
|
elecParams.push("--ozone-platform=wayland");
|
|
} else if (process.env.DISPLAY) {
|
|
console.log(`Client: Using DISPLAY=${process.env.DISPLAY}`);
|
|
} else {
|
|
fail("Error: Requires environment variable WAYLAND_DISPLAY or DISPLAY, none is provided.");
|
|
}
|
|
// Pass along the server config via an environment variable
|
|
const env = Object.create(process.env);
|
|
env.clientonly = true; // set to pass to electron.js
|
|
const options = { env: env };
|
|
configReturn.address = config.address;
|
|
configReturn.port = config.port;
|
|
configReturn.tls = config.tls;
|
|
env.config = JSON.stringify(configReturn);
|
|
|
|
// Spawn electron application
|
|
const electron = require("electron");
|
|
const child = require("node:child_process").spawn(electron, elecParams, options);
|
|
|
|
// Pipe all child process output to current stdout
|
|
child.stdout.on("data", function (buf) {
|
|
process.stdout.write(`Client: ${buf}`);
|
|
});
|
|
|
|
// Pipe all child process errors to current stderr
|
|
child.stderr.on("data", function (buf) {
|
|
process.stderr.write(`Client: ${buf}`);
|
|
});
|
|
|
|
child.on("error", function (err) {
|
|
process.stdout.write(`Client: ${err}`);
|
|
});
|
|
|
|
child.on("close", (code) => {
|
|
if (code !== 0) {
|
|
console.log(`There something wrong. The clientonly is not running code ${code}`);
|
|
}
|
|
});
|
|
})
|
|
.catch(function (reason) {
|
|
fail(`Unable to connect to server: (${reason})`);
|
|
});
|
|
} else {
|
|
fail();
|
|
}
|
|
}());
|