Add possibility to display item description. #157

This commit is contained in:
Michael Teeuw 2016-04-12 11:06:59 +02:00
parent a64699d064
commit af2f469b84
4 changed files with 46 additions and 63 deletions

View File

@ -44,8 +44,15 @@ The following properties can be configured:
<tr>
<td><code>showPublishDate</code></td>
<td>Display the publish date of an headline.<br>
<br><b>Possible values:</b> <code>true</code> or <code>false</code>
<br><b>Default value:</b> <code>true</code>
<br><b>Default value:</b> <code>true</code> or <code>false</code>
</td>
</tr>
<tr>
<td><code>showDescription</code></td>
<td>Display the description of an item.<br>
<br><b>Possible values:</b> <code>true</code> or <code>false</code>
<br><b>Default value:</b> <code>false</code>
</td>
</tr>
@ -60,7 +67,7 @@ The following properties can be configured:
<td><code>updateInterval</code></td>
<td>How often do you want to display a new headline? (Milliseconds)<br>
<br><b>Possible values:</b><code>1000</code> - <code>60000</code>
<br><b>Default value:</b> <code>7500</code> (7.5 seconds)
<br><b>Default value:</b> <code>10000</code> (10 seconds)
</td>
</tr>
<tr>

View File

@ -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()

View File

@ -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";

View File

@ -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;