Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
76 commits
Select commit Hold shift + click to select a range
5e346e7
Start of 2.27.0 develop branch.
MichMich Jan 1, 2024
367d02f
Update URLs to MagicMirrorOrg (#3321)
KristjanESPERANTO Jan 1, 2024
ae1f9d0
Bump moment-timezone from 0.5.43 to 0.5.44 in /vendor (#3317)
dependabot[bot] Jan 1, 2024
bcab8eb
skip changelog requirement when running tests for dependency updates …
khassel Jan 1, 2024
5f7b56e
Bump eslint-plugin-jsdoc from 46.9.1 to 47.0.2 (#3315)
dependabot[bot] Jan 1, 2024
6097547
Add systeminfo (#3331)
KristjanESPERANTO Jan 4, 2024
407072d
Update system information (#3337)
KristjanESPERANTO Jan 7, 2024
4bbd35f
Use node prefix for build-in modules (#3340)
KristjanESPERANTO Jan 8, 2024
b47600e
Remove lodash (#3339)
KristjanESPERANTO Jan 8, 2024
dadc7ba
[newsfeed] Suppress unsightly animation edge cases when there are 0 o…
crazyscot Jan 14, 2024
f890f14
ignore strange errors from systeminformation under aarch64 (#3349)
khassel Jan 14, 2024
58bc14e
Request only required information instead of all (#3338)
KristjanESPERANTO Jan 14, 2024
098757f
update dependencies including electron to v28 (#3357)
khassel Jan 16, 2024
6dbacbb
Rework logging colors (#3350)
KristjanESPERANTO Jan 16, 2024
35e4dfb
Ignore all custom css files (#3359)
KristjanESPERANTO Jan 16, 2024
b005a8f
[newsfeed] Fix bug where the newsfeed sometimes stops (#3361)
crazyscot Jan 18, 2024
c09338a
changed `log.debug` to `log.log` in `app.js` (#3362)
khassel Jan 18, 2024
995b61b
Bump follow-redirects from 1.15.3 to 1.15.5 (#3356)
dependabot[bot] Jan 20, 2024
c96ced9
updatenotification: update_helper.js recode with pm2 library (v2.27.x…
bugsounet Jan 20, 2024
c75b7d4
pm2 update ;) (#3364)
bugsounet Jan 20, 2024
339aaf4
Bump actions/dependency-review-action from 3 to 4 (#3366)
dependabot[bot] Jan 22, 2024
f88b92f
Bump follow-redirects from 1.15.3 to 1.15.5 (#3367)
dependabot[bot] Jan 22, 2024
b0161fe
Lint package.json files (#3368)
KristjanESPERANTO Jan 24, 2024
27f3c86
remove all useless header comments (#3363)
khassel Jan 24, 2024
7f0b8e4
Better fixes for #3291 and the underlying exdate issues (#3342)
jkriegshauser Jan 27, 2024
fb5fab8
Cleanups (#3369)
rejas Jan 27, 2024
3bf8480
Correct apibase of weathergov weatherprovider to match documentation …
rejas Jan 27, 2024
431bf22
Update husky and let lint-staged fix ESLint issues (#3370)
KristjanESPERANTO Jan 28, 2024
57de389
[cosmetic] Weather module humidity positioning (#3330)
crazyscot Jan 29, 2024
5fb5ef6
Improved, fixed and added translations for estonian (#3371)
illimarkangur Feb 1, 2024
db65cd6
Bundle all Dependabot updates (#3378)
rejas Feb 1, 2024
88a96fb
Bump husky from 9.0.7 to 9.0.10 (#3379)
dependabot[bot] Feb 1, 2024
08f8a51
add error message if config.js appears empty after loading w require(…
sdetweil Feb 13, 2024
73140cd
update electron to v29 and other deps (#3386)
khassel Feb 24, 2024
313531d
Bump @stylistic/eslint-plugin from 1.6.2 to 1.6.3 (#3391)
dependabot[bot] Mar 1, 2024
2f2d84b
Bump electron from 29.0.1 to 29.1.0 (#3390)
dependabot[bot] Mar 1, 2024
c7d94a0
Bump express from 4.18.2 to 4.18.3 (#3389)
dependabot[bot] Mar 1, 2024
e5678f0
Bump playwright from 1.41.2 to 1.42.0 (#3388)
dependabot[bot] Mar 1, 2024
90ff340
Bump node-ical from 0.17.2 to 0.18.0 (#3387)
dependabot[bot] Mar 1, 2024
1a745cf
Fix issue 3393 (#3395)
jkriegshauser Mar 13, 2024
16af809
Update .npmrc (#3399)
bugsounet Mar 16, 2024
c5f9050
[calendar] deny fetch interval < 60000 and set 60000 in this case (pr…
bugsounet Mar 21, 2024
d970214
Fix for #3345 - precipitation probability not displayed when it is 0%…
vppencilsharpener Mar 21, 2024
6de578e
move suncalc dependency out of dev, as it is used by the clock module…
sdetweil Mar 22, 2024
52cfbac
Changes the layout of the current weather module, targetting indoor v…
Paranoid93 Mar 23, 2024
57549fa
Fix compliments module bringing mirror to a halt (#3402)
rejas Mar 23, 2024
be63e36
Add electron-rebuild to suite test (#3392)
bugsounet Mar 27, 2024
fd44445
update deps and package.json's (eslint) (#3406)
khassel Mar 27, 2024
d9926fa
MM² Icon (#3407)
bugsounet Mar 28, 2024
e004b33
Change multiday fullDay Event behaviour (#3396)
Paranoid93 Mar 28, 2024
72ef823
update Collaboration.md (added infos from discord) (#3408)
khassel Mar 30, 2024
b262bf6
Release 2.27.0
Apr 1, 2024
53420f5
Fix check for mastermerge label (#3415)
rejas Apr 1, 2024
2a883c3
Remove codecov yaml (#3416)
rejas Apr 1, 2024
1981601
Merge branch 'mm_master' into mm_develop
Apr 1, 2024
8aaad8e
Prepare v2.28.0-develop
Apr 1, 2024
1fa1788
Bump ansis from 2.3.0 to 3.0.1 (#3417)
dependabot[bot] Apr 1, 2024
3b00357
Update deps (#3439)
khassel May 1, 2024
d1c17e7
weather module: Fixed precipitationProbability in forecast … (#3448)
khassel May 13, 2024
cd0bc5b
fixed type=daily for provider openmeteo having no data … (#3451)
khassel May 20, 2024
4bd66cb
fixed type=daily for provider openmeteo showing nightly icons (#3459)
khassel Jun 8, 2024
6332445
update dependencies (#3460)
khassel Jun 11, 2024
bc27c46
MM² Main core use node >= v20 // delete node v18 from test suite (#3463)
bugsounet Jun 19, 2024
9cbd30f
update dependencies incl. electron v31 (#3473)
khassel Jun 19, 2024
4c748a4
update `config.js.sample` to use openmeteo as weather provider (#3476)
khassel Jun 22, 2024
e95c144
Fix crash possibility if `module: <name>` is not defined and on mista…
bugsounet Jun 24, 2024
8d20832
[calendar] add config option "showEndsOnlyWithDuration" (#3477)
khassel Jun 24, 2024
3d9d72e
Open-Meteo: Fix forecast and hourly weather to use real temperatures,…
btoconnor Jun 24, 2024
aefb3a0
Update compliments module (#3471)
WallysWellies Jun 24, 2024
f28b4bd
Use latest@version of node for automated-tests.yaml (#3483)
bugsounet Jun 26, 2024
4aafa32
fixes e2e tests running in docker container (#3485)
khassel Jun 27, 2024
cfc0bc6
Update CHANGELOG.md (#3486)
bugsounet Jun 27, 2024
74c6bb3
Update dependencies (#3487)
khassel Jun 28, 2024
c89c3ed
Fix weathergov api precipitationLastHour (#3125)
JasonStieber Jun 28, 2024
92ac389
updatenotification: avoid using pm2 when running in docker container …
khassel Jun 28, 2024
795e5c7
Release 2.28.0
khassel Jun 28, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .github/workflows/automated-tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,15 @@ jobs:
timeout-minutes: 30
strategy:
matrix:
node-version: [18.x, 20.x, 21.x]
node-version: [20.x, 22.x]
steps:
- name: "Checkout code"
uses: actions/checkout@v4
- name: "Use Node.js ${{ matrix.node-version }}"
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
check-latest: true
cache: "npm"
- name: "Install dependencies"
run: |
Expand Down
8 changes: 8 additions & 0 deletions .github/workflows/electronRebuild.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,17 @@ jobs:
rebuild:
name: Run electron-rebuild
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [20.x, 22.x]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: "Use Node.js ${{ matrix.node-version }}"
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
check-latest: true
- name: Install MagicMirror
run: npm run install-mm
- name: Install @electron/rebuild
Expand Down
45 changes: 39 additions & 6 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,39 @@ This project adheres to [Semantic Versioning](https://semver.org/).

❤️ **Donate:** Enjoying MagicMirror²? [Please consider a donation!](https://magicmirror.builders/#donate) With your help we can continue to improve the MagicMirror².

## [2.28.0] - 2024-07-01

Thanks to: @btoconnor, @bugsounet, @JasonStieber, @khassel, @kleinmantara and @WallysWellies.

> ⚠️ This release needs nodejs version >= v20

### Added

- [calendar] Added config option "showEndsOnlyWithDuration" for default calendar
- [compliments] Added `specialDayUnique` config option, defaults to `false` (#3465)
- [weather] Provider weathergov: Use `precipitationLast3Hours` if `precipitationLastHour` is `null` (#3124)

### Removed

- [tests] delete node v18 support (#3462)

### Updated

- [core] Update dependencies including electron to v31
- [core] use node >= v20 (#3462)
- [core] Update `config.js.sample` to use openmeteo as weather provider which needs no api key
- [tests] Use latest@version of node for `automated-tests.yaml` (#3483)
- [updatenotification] Avoid using pm2 when running in docker container

### Fixed

- [core] Fixed crash possibility if `module: <name>` is not defined and on `postion: <positon>` mistake (#3445)
- [weather] Fixed precipitationProbability in forecast for provider openmeteo (#3446)
- [weather] Fixed type=daily for provider openmeteo having no data when running after 23:00 (#3449)
- [weather] Fixed type=daily for provider openmeteo showing nightly icons in forecast when current time is "nightly" (#3458)
- [weather] Fixed forecast and hourly weather for provider openmeteo to use real temperatures, not apparent temperatures (#3466)
- [tests] Fixed e2e tests running in docker container which needs `address: "0.0.0.0"` (#3479)

## [2.27.0] - 2024-04-01

Thanks to: @bugsounet, @crazyscot, @illimarkangur, @jkriegshauser, @khassel, @KristjanESPERANTO, @Paranoid93, @rejas, @sdetweil and @vppencilsharpener.
Expand All @@ -16,7 +49,7 @@ For more info, please read the following post: [A New Chapter for MagicMirror: T
### Added

- Output of system information to the console for troubleshooting (#3328 and #3337), ignore errors under aarch64 (#3349)
- [chore] Add `eslint-plugin-package-json` to lint the `package.json` files (#3368)
- [core] Add `eslint-plugin-package-json` to lint the `package.json` files (#3368)
- [weather] `showHumidity` config is now a string describing where to show this element. Supported values: "wind", "temp", "feelslike", "below", "none". (#3330)
- electron-rebuild test suite for electron and 3rd party modules compatibility (#3392)
- Create MM² icon and attach it to electron process (#3407)
Expand All @@ -28,8 +61,8 @@ For more info, please read the following post: [A New Chapter for MagicMirror: T
- Use node prefix for build-in modules (#3340)
- Rework logging colors (#3350)
- Update pm2 to v5.3.1 with no allow-ghsas (#3364)
- [chore] Update husky and let lint-staged fix ESLint issues
- [chore] Update dependencies including electron to v29 (#3357) and node-ical
- [core] Update husky and let lint-staged fix ESLint issues
- [core] Update dependencies including electron to v29 (#3357) and node-ical
- Update translations for estonian (#3371)
- Update electron to v29 and update other dependencies
- [calendar] fullDay events over several days now show the left days from the first day on and 'today' on the last day
Expand All @@ -51,9 +84,9 @@ For more info, please read the following post: [A New Chapter for MagicMirror: T
- added message in case where config.js is missing the module.export line PR #3383
- Fixed an issue where recurring events could extend past their recurrence end date (#3393)
- Don't display any `npm WARN <....>` on install (#3399)
- Fixed move suncalc dependency to production from dev, as it is used by clock module
- [core] Moved suncalc dependency to production from dev, as it is used by clock module
- [compliments] Fix mirror not responding anymore when no compliments are to be shown (#3385)
- [chore] Fixed mastermerge workflow (#3415)
- [core] Fixed mastermerge workflow (#3415)

### Deleted

Expand Down Expand Up @@ -87,7 +120,7 @@ This release also marks the latest release by Michael Teeuw. For more info, plea
- Update electron to v27 and update other dependencies as well as github actions
- Update newsfeed: Use `html-to-text` instead of regex for transform description
- Review ESLint config (#3269)
- Updated dependencies
- Update dependencies
- Clock module: optionally display current moon phase in addition to rise/set times
- electron is now per default started without gpu, if needed it must be enabled with new env var `ELECTRON_ENABLE_GPU=1` on startup (#3226)
- Replace prettier by stylistic in ESLint config to lint JavaScript (and disable some rules for `config/config.js*` files)
Expand Down
14 changes: 6 additions & 8 deletions config/config.js.sample
Original file line number Diff line number Diff line change
Expand Up @@ -67,23 +67,21 @@ let config = {
module: "weather",
position: "top_right",
config: {
weatherProvider: "openweathermap",
weatherProvider: "openmeteo",
type: "current",
location: "New York",
locationID: "5128581", //ID from http://bulk.openweathermap.org/sample/city.list.json.gz; unzip the gz file and find your city
apiKey: "YOUR_OPENWEATHER_API_KEY"
lat: 40.776676,
lon: -73.971321
}
},
{
module: "weather",
position: "top_right",
header: "Weather Forecast",
config: {
weatherProvider: "openweathermap",
weatherProvider: "openmeteo",
type: "forecast",
location: "New York",
locationID: "5128581", //ID from http://bulk.openweathermap.org/sample/city.list.json.gz; unzip the gz file and find your city
apiKey: "YOUR_OPENWEATHER_API_KEY"
lat: 40.776676,
lon: -73.971321
}
},
{
Expand Down
16 changes: 8 additions & 8 deletions fonts/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 5 additions & 5 deletions fonts/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,16 @@
"name": "magicmirror-fonts",
"version": "1.0.0",
"description": "Package for fonts use by MagicMirror² core.",
"bugs": {
"url": "https://github.com/MagicMirrorOrg/MagicMirror/issues"
},
"repository": {
"type": "git",
"url": "https://github.com/MagicMirrorOrg/MagicMirror"
},
"license": "MIT",
"bugs": {
"url": "https://github.com/MagicMirrorOrg/MagicMirror/issues"
},
"dependencies": {
"@fontsource/roboto": "^5.0.12",
"@fontsource/roboto-condensed": "^5.0.15"
"@fontsource/roboto": "^5.0.13",
"@fontsource/roboto-condensed": "^5.0.16"
}
}
15 changes: 13 additions & 2 deletions js/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,10 @@ function App () {
async function loadConfig () {
Log.log("Loading config ...");
const defaults = require(`${__dirname}/defaults`);
if (process.env.JEST_WORKER_ID !== undefined) {
// if we are running with jest
defaults.address = "0.0.0.0";
}

// For this check proposed to TestSuite
// https://forum.magicmirror.builders/topic/1456/test-suite-for-magicmirror/8
Expand Down Expand Up @@ -253,8 +257,15 @@ function App () {

let modules = [];
for (const module of config.modules) {
if (!modules.includes(module.module) && !module.disabled) {
modules.push(module.module);
if (module.disabled) continue;
if (module.module) {
if (Utils.moduleHasValidPosition(module.position) || typeof (module.position) === "undefined") {
modules.push(module.module);
} else {
Log.warn("Invalid module position found for this configuration:", module);
}
} else {
Log.warn("No module name found for this configuration:", module);
}
}

Expand Down
66 changes: 66 additions & 0 deletions js/check_config.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ const { Linter } = require("eslint");

const linter = new Linter();

const Ajv = require("ajv");

const ajv = new Ajv();

const rootPath = path.resolve(`${__dirname}/../`);
const Log = require(`${rootPath}/js/logger.js`);

Expand Down Expand Up @@ -59,6 +63,68 @@ function checkConfigFile () {
for (const error of errors) {
Log.error(`Line ${error.line} column ${error.column}: ${error.message}`);
}
return;
}

Log.info("Checking modules structure configuration... ");

// Make Ajv schema confguration of modules config
// only scan "module" and "position"
const schema = {
type: "object",
properties: {
modules: {
type: "array",
items: {
type: "object",
properties: {
module: {
type: "string"
},
position: {
type: "string",
enum: [
"top_bar",
"top_left",
"top_center",
"top_right",
"upper_third",
"middle_center",
"lower_third",
"bottom_left",
"bottom_center",
"bottom_right",
"bottom_bar",
"fullscreen_above",
"fullscreen_below"
]
}
},
required: ["module"]
}
}
}
};

// scan all modules
const validate = ajv.compile(schema);
const data = require(configFileName);

const valid = validate(data);
if (!valid) {
let module = validate.errors[0].instancePath.split("/")[2];
let position = validate.errors[0].instancePath.split("/")[3];

Log.error(colors.red("This module configuration contains errors:"));
Log.error(data.modules[module]);
if (position) {
Log.error(colors.red(`${position}: ${validate.errors[0].message}`));
Log.error(validate.errors[0].params.allowedValues);
} else {
Log.error(colors.red(validate.errors[0].message));
}
} else {
Log.info(colors.green("Your modules structure configuration doesn't contain errors :)"));
}
}

Expand Down
3 changes: 2 additions & 1 deletion js/loader.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,8 @@ const Loader = (function () {
* @returns {object[]} module data as configured in config
*/
const getAllModules = function () {
return config.modules;
const AllModules = config.modules.filter((module) => (module.module !== undefined) && (MM.getAvailableModulePositions.indexOf(module.position) > -1 || typeof (module.position) === "undefined"));
return AllModules;
};

/**
Expand Down
11 changes: 7 additions & 4 deletions js/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -450,10 +450,10 @@ const MM = (function () {
* an ugly top margin. By using this function, the top bar will be hidden if the
* update notification is not visible.
*/
const updateWrapperStates = function () {
const positions = ["top_bar", "top_left", "top_center", "top_right", "upper_third", "middle_center", "lower_third", "bottom_left", "bottom_center", "bottom_right", "bottom_bar", "fullscreen_above", "fullscreen_below"];
const modulePositions = ["top_bar", "top_left", "top_center", "top_right", "upper_third", "middle_center", "lower_third", "bottom_left", "bottom_center", "bottom_right", "bottom_bar", "fullscreen_above", "fullscreen_below"];

positions.forEach(function (position) {
const updateWrapperStates = function () {
modulePositions.forEach(function (position) {
const wrapper = selectWrapper(position);
const moduleWrappers = wrapper.getElementsByClassName("module");

Expand Down Expand Up @@ -701,7 +701,10 @@ const MM = (function () {
showModule (module, speed, callback, options) {
// do not change module.hidden yet, only if we really show it later
showModule(module, speed, callback, options);
}
},

// return all available module postions.
getAvailableModulePositions: modulePositions
};
}());

Expand Down
11 changes: 11 additions & 0 deletions js/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,16 @@ module.exports = {
} catch (e) {
Log.error(e);
}
},

// return all available module positions
getAvailableModulePositions () {
return ["top_bar", "top_left", "top_center", "top_right", "upper_third", "middle_center", "lower_third", "bottom_left", "bottom_center", "bottom_right", "bottom_bar", "fullscreen_above", "fullscreen_below"];
},

// return if postion is on modulePositions Array (true/false)
moduleHasValidPosition (position) {
if (this.getAvailableModulePositions().indexOf(position) === -1) return false;
return true;
}
};
15 changes: 12 additions & 3 deletions modules/default/calendar/calendar.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ Module.register("calendar", {
dateEndFormat: "LT",
fullDayEventDateFormat: "MMM Do",
showEnd: false,
showEndsOnlyWithDuration: false,
getRelative: 6,
hidePrivate: false,
hideOngoing: false,
Expand Down Expand Up @@ -388,7 +389,11 @@ Module.register("calendar", {

// Add endDate to dataheaders if showEnd is enabled
if (this.config.showEnd) {
timeWrapper.innerHTML += ` - ${CalendarUtils.capFirst(moment(event.endDate, "x").format("LT"))}`;
if (this.config.showEndsOnlyWithDuration && event.startDate === event.endDate) {
// no duration here, don't display end
} else {
timeWrapper.innerHTML += ` - ${CalendarUtils.capFirst(moment(event.endDate, "x").format("LT"))}`;
}
}

eventWrapper.appendChild(timeWrapper);
Expand All @@ -407,8 +412,12 @@ Module.register("calendar", {
timeWrapper.innerHTML = CalendarUtils.capFirst(moment(event.startDate, "x").format(this.config.dateFormat));
// Add end time if showEnd
if (this.config.showEnd) {
timeWrapper.innerHTML += "-";
timeWrapper.innerHTML += CalendarUtils.capFirst(moment(event.endDate, "x").format(this.config.dateEndFormat));
if (this.config.showEndsOnlyWithDuration && event.startDate === event.endDate) {
// no duration here, don't display end
} else {
timeWrapper.innerHTML += "-";
timeWrapper.innerHTML += CalendarUtils.capFirst(moment(event.endDate, "x").format(this.config.dateEndFormat));
}
}
// For full day events we use the fullDayEventDateFormat
if (event.fullDayEvent) {
Expand Down
Loading