/* Magic Mirror * Node Helper: Newsfeed * * By Michael Teeuw http://michaelteeuw.nl * MIT Licensed. */ var NodeHelper = require("node_helper"); var validUrl = require("valid-url"); var Fetcher = require("./fetcher.js"); module.exports = NodeHelper.create({ // Subclass start method. start: function() { console.log("Starting module: " + this.name); this.fetchers = []; }, // Subclass socketNotificationReceived received. socketNotificationReceived: function(notification, payload) { if (notification === "ADD_FEED") { this.createFetcher(payload.url, payload.reloadInterval, payload.encoding); } }, /* createFetcher(url, reloadInterval) * Creates a fetcher for a new url if it doesn't exsist yet. * Otherwise it reoses the exsisting one. * * attribute url string - URL of the news feed. * attribute reloadInterval number - Reload interval in milliseconds. */ createFetcher: function(url, reloadInterval, encoding) { var self = this; if (!validUrl.isUri(url)) { self.sendSocketNotification("INCORRECT_URL", url); return; } var fetcher; if (typeof self.fetchers[url] === "undefined") { console.log("Create new news fetcher for url: " + url + " - Interval: " + reloadInterval); fetcher = new Fetcher(url, reloadInterval, encoding); fetcher.onReceive(function(fetcher) { self.sendSocketNotification("NEWS_ITEMS", { url: fetcher.url(), items: fetcher.items() }); }); fetcher.onError(function(fetcher, error) { self.sendSocketNotification("FETCH_ERROR", { url: fetcher.url(), error: error }); }); self.fetchers[url] = fetcher; } else { console.log("Use exsisting news fetcher for url: " + url); fetcher = self.fetchers[url]; fetcher.setReloadInterval(reloadInterval); fetcher.broadcastItems(); } fetcher.startFetch(); } });