diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ff24c38..7d90b047 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Disabled the screensaver on raspbian with installation script - Added option to truncate the number of vertical lines a calendar item can span if `wrapEvents` is enabled. - Added autoLocation options for weather forcast and current weather modules. +- Added autoTimezone option for the default clock module. ### Updated - Bumped the Electron dependency to v3.0.13 to support the most recent Raspbian. [#1500](https://github.com/MichMich/MagicMirror/issues/1500) diff --git a/modules/default/clock/clock.js b/modules/default/clock/clock.js index 23b801d0..03528bce 100644 --- a/modules/default/clock/clock.js +++ b/modules/default/clock/clock.js @@ -26,6 +26,7 @@ Module.register("clock",{ analogShowDate: "top", // options: false, 'top', or 'bottom' secondsColor: "#888888", timezone: null, + autoTimezone: false }, // Define required scripts. getScripts: function() { @@ -39,16 +40,31 @@ Module.register("clock",{ start: function() { Log.info("Starting module: " + this.name); - // Schedule update interval. - var self = this; - setInterval(function() { - self.updateDom(); - }, 1000); + if (this.config.autoTimezone) { + this.sendSocketNotification("AUTO_TIMEZONE"); + } else { + // Schedule update interval. + var self = this; + setInterval(function() { + self.updateDom(); + }, 1000); + } // Set locale. moment.locale(config.language); }, + + socketNotificationReceived: function (notification, payload) { + if (notification === "UPDATE_TIMEZONE") { + var self = this; + self.config.timezone = payload.timezone; + setInterval(function() { + self.updateDom(); + }, 1000); + } + }, + // Override dom generator. getDom: function() { diff --git a/modules/default/clock/node_helper.js b/modules/default/clock/node_helper.js new file mode 100644 index 00000000..68258b0a --- /dev/null +++ b/modules/default/clock/node_helper.js @@ -0,0 +1,29 @@ +var http = require("http"); +var NodeHelper = require("node_helper"); + +module.exports = NodeHelper.create({ + start: function () { + }, + + socketNotificationReceived: function (notification, payload) { + var self = this; + + if (notification === "AUTO_TIMEZONE") { + console.log("Loading timezone..."); + http.get("http://ip-api.com/json", function (req) { + var data = ""; + req.on("data", function (d) { + data += d; + }); + req.on("end", function () { + var body = JSON.parse(data); + payload.timezone = body.timezone; + self.sendSocketNotification("UPDATE_TIMEZONE", payload); + }); + }).on("error", function () { + payload.error = "Could not figure out the timezone."; + self.sendSocketNotification("UPDATE_TIMEZONE", payload); + }); + } + } +});