diff --git a/CHANGELOG.md b/CHANGELOG.md index c00ece23..cb8526de 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,8 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Italian translation for "Feels" - 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. - Danish translation for "Feels" and "Weeks" ### Updated 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); + }); + } + } +}); diff --git a/modules/default/currentweather/currentweather.js b/modules/default/currentweather/currentweather.js index 2a6d24b9..0472b7a1 100644 --- a/modules/default/currentweather/currentweather.js +++ b/modules/default/currentweather/currentweather.js @@ -11,6 +11,7 @@ Module.register("currentweather",{ // Default module config. defaults: { + autoLocation: false, location: false, locationID: false, appid: "", @@ -109,8 +110,19 @@ Module.register("currentweather",{ this.weatherType = null; this.feelsLike = null; this.loaded = false; - this.scheduleUpdate(this.config.initialLoadDelay); + if (this.config.autoLocation) { + this.sendSocketNotification("AUTO_LOCATION"); + } else { + this.scheduleUpdate(this.config.initialLoadDelay); + } + }, + + socketNotificationReceived: function (notification, payload) { + if (notification === "UPDATE_LOCATION") { + this.config.location = payload.location; + this.scheduleUpdate(this.config.initialLoadDelay); + } }, // add extra information of current weather diff --git a/modules/default/currentweather/node_helper.js b/modules/default/currentweather/node_helper.js new file mode 100644 index 00000000..53956f62 --- /dev/null +++ b/modules/default/currentweather/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_LOCATION") { + 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.location = body.city + ", " + body.regionName; + self.sendSocketNotification("UPDATE_LOCATION", payload); + }); + }).on("error", function () { + payload.error = "Could not figure out the timezone."; + self.sendSocketNotification("UPDATE_LOCATION", payload); + }); + } + } +}); diff --git a/modules/default/weatherforecast/node_helper.js b/modules/default/weatherforecast/node_helper.js new file mode 100644 index 00000000..53956f62 --- /dev/null +++ b/modules/default/weatherforecast/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_LOCATION") { + 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.location = body.city + ", " + body.regionName; + self.sendSocketNotification("UPDATE_LOCATION", payload); + }); + }).on("error", function () { + payload.error = "Could not figure out the timezone."; + self.sendSocketNotification("UPDATE_LOCATION", payload); + }); + } + } +}); diff --git a/modules/default/weatherforecast/weatherforecast.js b/modules/default/weatherforecast/weatherforecast.js index 67193696..c32821db 100644 --- a/modules/default/weatherforecast/weatherforecast.js +++ b/modules/default/weatherforecast/weatherforecast.js @@ -11,6 +11,7 @@ Module.register("weatherforecast",{ // Default module config. defaults: { + autoLocation: false, location: false, locationID: false, appid: "", @@ -95,10 +96,20 @@ Module.register("weatherforecast",{ this.forecast = []; this.loaded = false; - this.scheduleUpdate(this.config.initialLoadDelay); - this.updateTimer = null; + if (this.config.autoLocation) { + this.sendSocketNotification("AUTO_LOCATION"); + } else { + this.scheduleUpdate(this.config.initialLoadDelay); + } + }, + + socketNotificationReceived: function (notification, payload) { + if (notification === "UPDATE_LOCATION") { + this.config.location = payload.location; + this.scheduleUpdate(this.config.initialLoadDelay); + } }, // Override dom generator.