Merge remote-tracking branch 'MichMich/develop'

This commit is contained in:
Thomas Bachmann 2017-01-11 11:32:20 +01:00
parent c302030301
commit 3ba16f1773
10 changed files with 79 additions and 25 deletions

1
.gitignore vendored
View File

@ -59,6 +59,7 @@ Temporary Items
# Ignore all modules except the default modules. # Ignore all modules except the default modules.
/modules/** /modules/**
!/modules/default
!/modules/default/** !/modules/default/**
!/modules/README.md** !/modules/README.md**

View File

@ -2,9 +2,19 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](http://semver.org/). This project adheres to [Semantic Versioning](http://semver.org/).
## [develop] - release date to be defined ## [2.1.1] - Unreleased
### Changed
- Installer: Use init config.js from config.js.sample.
### Added
- Add loaded function to modules, providing an async callback.
- Made default newsfeed module aware of gesture events from [MMM-Gestures](https://github.com/thobach/MMM-Gestures) - Made default newsfeed module aware of gesture events from [MMM-Gestures](https://github.com/thobach/MMM-Gestures)
### Fixed
- Update .gitignore to not ignore default modules folder.
- Remove white flash on boot up.
## [2.1.0] - 2016-12-31 ## [2.1.0] - 2016-12-31
**Note:** This update uses new dependencies. Please update using the following command: `git pull && npm install` **Note:** This update uses new dependencies. Please update using the following command: `git pull && npm install`

View File

@ -1,7 +1,7 @@
The MIT License (MIT) The MIT License (MIT)
===================== =====================
Copyright © 2016 Michael Teeuw Copyright © 2016-2017 Michael Teeuw
Permission is hereby granted, free of charge, to any person Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation obtaining a copy of this software and associated documentation

View File

@ -113,6 +113,9 @@ else
exit; exit;
fi fi
# Use sample config for start MagicMirror
cp config/config.js.sample config/config.js
# Check if plymouth is installed (default with PIXEL desktop environment), then install custom splashscreen. # Check if plymouth is installed (default with PIXEL desktop environment), then install custom splashscreen.
echo -e "\e[96mCheck plymouth installation ...\e[0m" echo -e "\e[96mCheck plymouth installation ...\e[0m"
if command_exists plymouth; then if command_exists plymouth; then

View File

@ -66,7 +66,7 @@ var App = function() {
* *
* argument module string - The name of the module (including subpath). * argument module string - The name of the module (including subpath).
*/ */
var loadModule = function(module) { var loadModule = function(module, callback) {
var elements = module.split("/"); var elements = module.split("/");
var moduleName = elements[elements.length - 1]; var moduleName = elements[elements.length - 1];
@ -103,6 +103,10 @@ var App = function() {
m.setName(moduleName); m.setName(moduleName);
m.setPath(path.resolve(moduleFolder)); m.setPath(path.resolve(moduleFolder));
nodeHelpers.push(m); nodeHelpers.push(m);
m.loaded(callback);
} else {
callback();
} }
}; };
@ -111,14 +115,24 @@ var App = function() {
* *
* argument module string - The name of the module (including subpath). * argument module string - The name of the module (including subpath).
*/ */
var loadModules = function(modules) { var loadModules = function(modules, callback) {
console.log("Loading module helpers ..."); console.log("Loading module helpers ...");
for (var m in modules) { var loadNextModule = function() {
loadModule(modules[m]); if (modules.length > 0) {
} var nextModule = modules[0];
loadModule(nextModule, function() {
modules = modules.slice(1);
loadNextModule();
});
} else {
// All modules are loaded
console.log("All module helpers loaded.");
callback();
}
};
console.log("All module helpers loaded."); loadNextModule();
}; };
/* cmpVersions(a,b) /* cmpVersions(a,b)
@ -164,24 +178,24 @@ var App = function() {
} }
} }
loadModules(modules); loadModules(modules, function() {
var server = new Server(config, function(app, io) {
console.log("Server started ...");
var server = new Server(config, function(app, io) { for (var h in nodeHelpers) {
console.log("Server started ..."); var nodeHelper = nodeHelpers[h];
nodeHelper.setExpressApp(app);
nodeHelper.setSocketIO(io);
nodeHelper.start();
}
for (var h in nodeHelpers) { console.log("Sockets connected & modules started ...");
var nodeHelper = nodeHelpers[h];
nodeHelper.setExpressApp(app);
nodeHelper.setSocketIO(io);
nodeHelper.start();
}
console.log("Sockets connected & modules started ..."); if (typeof callback === "function") {
callback(config);
if (typeof callback === "function") { }
callback(config);
}
});
}); });
}); });
}; };

View File

@ -28,7 +28,8 @@ function createWindow() {
webPreferences: { webPreferences: {
nodeIntegration: false, nodeIntegration: false,
zoomFactor: config.zoom zoomFactor: config.zoom
} },
backgroundColor: "#000000"
} }
// DEPRECATED: "kioskmode" backwards compatibility, to be removed // DEPRECATED: "kioskmode" backwards compatibility, to be removed

View File

@ -96,6 +96,21 @@ requiresVersion: "2.1.0",
####`init()` ####`init()`
This method is called when a module gets instantiated. In most cases you do not need to subclass this method. This method is called when a module gets instantiated. In most cases you do not need to subclass this method.
####`loaded(callback)`
*Introduced in version: 2.1.1.*
This method is called when a module is loaded. Subsequent modules in the config are not yet loaded. The `callback` function MUST be called when the module is done loading. In most cases you do not need to subclass this method.
**Example:**
````javascript
loaded: function(callback) {
this.finishLoading();
Log.log(this.name + ' is loaded!');
callback();
}
````
####`start()` ####`start()`
This method is called when all modules are loaded an the system is ready to boot up. Keep in mind that the dom object for the module is not yet created. The start method is a perfect place to define any additional module properties: This method is called when all modules are loaded an the system is ready to boot up. Keep in mind that the dom object for the module is not yet created. The start method is a perfect place to define any additional module properties:

View File

@ -85,7 +85,12 @@ var Fetcher = function(url, reloadInterval, encoding) {
nodeVersion = Number(process.version.match(/^v(\d+\.\d+)/)[1]); nodeVersion = Number(process.version.match(/^v(\d+\.\d+)/)[1]);
headers = {"User-Agent": "Mozilla/5.0 (Node.js "+ nodeVersion + ") MagicMirror/" + global.version + " (https://github.com/MichMich/MagicMirror/)"} headers = {"User-Agent": "Mozilla/5.0 (Node.js "+ nodeVersion + ") MagicMirror/" + global.version + " (https://github.com/MichMich/MagicMirror/)"}
request({uri: url, encoding: null, headers: headers}).pipe(iconv.decodeStream(encoding)).pipe(parser); request({uri: url, encoding: null, headers: headers})
.on("error", function(error) {
fetchFailedCallback(self, error);
scheduleTimer();
})
.pipe(iconv.decodeStream(encoding)).pipe(parser);
}; };

View File

@ -14,6 +14,11 @@ NodeHelper = Class.extend({
console.log("Initializing new module helper ..."); console.log("Initializing new module helper ...");
}, },
loaded: function(callback) {
console.log("Module helper loaded: " + this.name);
callback();
},
start: function() { start: function() {
console.log("Staring module helper: " + this.name); console.log("Staring module helper: " + this.name);
}, },

View File

@ -1,6 +1,6 @@
{ {
"name": "magicmirror", "name": "magicmirror",
"version": "2.1.0", "version": "2.1.1",
"description": "A modular interface for smart mirrors.", "description": "A modular interface for smart mirrors.",
"main": "js/electron.js", "main": "js/electron.js",
"scripts": { "scripts": {