diff --git a/modules/default/newsfeed/README.md b/modules/default/newsfeed/README.md index eaaf2032..ae6ee061 100644 --- a/modules/default/newsfeed/README.md +++ b/modules/default/newsfeed/README.md @@ -44,8 +44,15 @@ The following properties can be configured: showPublishDate Display the publish date of an headline.
+
Possible values: true or false
Default value: true -
Default value: true or false + + + + showDescription + Display the description of an item.
+
Possible values: true or false +
Default value: false @@ -60,7 +67,7 @@ The following properties can be configured: updateInterval How often do you want to display a new headline? (Milliseconds)

Possible values:1000 - 60000 -
Default value: 7500 (7.5 seconds) +
Default value: 10000 (10 seconds) diff --git a/modules/default/newsfeed/fetcher.js b/modules/default/newsfeed/fetcher.js index 03dea1b3..32081457 100644 --- a/modules/default/newsfeed/fetcher.js +++ b/modules/default/newsfeed/fetcher.js @@ -5,7 +5,9 @@ * MIT Licensed. */ -var NewsFetcher = require("./newsfetcher.js"); +var FeedMe = require("feedme"); +var request = require("request"); +var iconv = require("iconv-lite"); /* Fetcher * Responsible for requesting an update on the set interval and broadcasting the data. @@ -16,7 +18,6 @@ var NewsFetcher = require("./newsfetcher.js"); var Fetcher = function(url, reloadInterval, encoding) { var self = this; - var newsFetcher = new NewsFetcher(); if (reloadInterval < 1000) { reloadInterval = 1000; } @@ -30,21 +31,40 @@ var Fetcher = function(url, reloadInterval, encoding) { /* private methods */ /* fetchNews() - * Request the new items from the newsFetcher. + * Request the new items. */ var fetchNews = function() { - //console.log('Fetch news.'); clearTimeout(reloadTimer); reloadTimer = null; - newsFetcher.fetchNews(url, function(fetchedItems) { - items = fetchedItems; + items = []; + + var parser = new FeedMe(); + + parser.on("item", function(item) { + var description = item.description || ''; + var regex = /(<([^>]+)>)/ig; + description = description.replace(regex, ""); + + items.push({ + title: item.title, + description: description, + pubdate: item.pubdate, + }); + }); + + parser.on("end", function() { self.broadcastItems(); scheduleTimer(); - }, function(error) { + }); + + parser.on("error", function(error) { fetchFailedCallback(self, error); scheduleTimer(); - }, encoding); + }); + + request({uri: url, encoding: null}).pipe(iconv.decodeStream(encoding)).pipe(parser); + }; /* scheduleTimer() diff --git a/modules/default/newsfeed/newsfeed.js b/modules/default/newsfeed/newsfeed.js index 65a0c867..ef0073e6 100644 --- a/modules/default/newsfeed/newsfeed.js +++ b/modules/default/newsfeed/newsfeed.js @@ -13,8 +13,9 @@ Module.register("newsfeed",{ defaults: { feedUrl: "http://www.nytimes.com/services/xml/rss/nyt/HomePage.xml", showPublishDate: true, + showDescription: false, reloadInterval: 5 * 60 * 1000, // every 5 minutes - updateInterval: 7.5 * 1000, + updateInterval: 10 * 1000, animationSpeed: 2.5 * 1000, encoding: "UTF-8" //ISO-8859-1 }, @@ -83,6 +84,13 @@ Module.register("newsfeed",{ title.innerHTML = this.newsItems[this.activeItem].title; wrapper.appendChild(title); + if (this.config.showDescription) { + var description = document.createElement("div"); + description.className = "small light"; + description.innerHTML = this.newsItems[this.activeItem].description; + wrapper.appendChild(description); + } + } else { wrapper.innerHTML = "Loading news ..."; wrapper.className = "small dimmed"; diff --git a/modules/default/newsfeed/newsfetcher.js b/modules/default/newsfeed/newsfetcher.js deleted file mode 100644 index 50db36f4..00000000 --- a/modules/default/newsfeed/newsfetcher.js +++ /dev/null @@ -1,52 +0,0 @@ -/* Magic Mirror - * NewsFetcher - * - * By Michael Teeuw http://michaelteeuw.nl - * MIT Licensed. - */ - -var FeedMe = require("feedme"); -var request = require("request"); -var iconv = require("iconv-lite"); - -var NewsFetcher = function() { - var self = this; - - self.successCallback = function() {}; - self.errorCallback = function() {}; - - self.items = []; - - /* fetchNews() - * Fetch the new news items. - * - * attribute url string - The url to fetch. - * attribute success function(items) - Callback on succes. - * attribute error function(error) - Callback on error. - */ - self.fetchNews = function(url, success, error, encoding) { - self.successCallback = success; - self.errorCallback = error; - - var parser = new FeedMe(); - - parser.on("item", function(item) { - self.items.push({ - title: item.title, - pubdate: item.pubdate, - }); - }); - - parser.on("end", function(item) { - self.successCallback(self.items); - }); - - parser.on("error", function(error) { - self.errorCallback(error); - }); - - request({uri: url, encoding: null}).pipe(iconv.decodeStream(encoding)).pipe(parser); - }; -}; - -module.exports = NewsFetcher;