diff --git a/js/fetcher_helper.js b/js/fetcher_helper.js new file mode 100644 index 00000000..04532873 --- /dev/null +++ b/js/fetcher_helper.js @@ -0,0 +1,12 @@ +const FetcherHelper = { + checkStatus: function (response) { + // response.status >= 200 && response.status < 300 + if (response.ok) { + return response; + } else { + throw Error(response.statusText); + } + } +}; + +module.exports = FetcherHelper; diff --git a/modules/default/calendar/calendarfetcher.js b/modules/default/calendar/calendarfetcher.js index 855257d4..b5d98607 100644 --- a/modules/default/calendar/calendarfetcher.js +++ b/modules/default/calendar/calendarfetcher.js @@ -5,6 +5,7 @@ * MIT Licensed. */ const CalendarUtils = require("./calendarutils"); +const FetcherHelper = require("fetcher_helper"); const Log = require("logger"); const ical = require("node-ical"); const fetch = require("node-fetch"); @@ -62,17 +63,7 @@ const CalendarFetcher = function (url, reloadInterval, excludedEvents, maximumEn } fetcher - .catch((error) => { - fetchFailedCallback(this, error); - scheduleTimer(); - }) - .then((response) => { - if (response.status !== 200) { - fetchFailedCallback(this, response.statusText); - scheduleTimer(); - } - return response; - }) + .then(FetcherHelper.checkStatus) .then((response) => response.text()) .then((responseData) => { let data = []; @@ -93,6 +84,10 @@ const CalendarFetcher = function (url, reloadInterval, excludedEvents, maximumEn } this.broadcastEvents(); scheduleTimer(); + }) + .catch((error) => { + fetchFailedCallback(this, error.message); + scheduleTimer(); }); }; diff --git a/modules/default/calendar/node_helper.js b/modules/default/calendar/node_helper.js index d544878b..a280ddff 100644 --- a/modules/default/calendar/node_helper.js +++ b/modules/default/calendar/node_helper.js @@ -46,7 +46,7 @@ module.exports = NodeHelper.create({ let fetcher; if (typeof this.fetchers[identifier + url] === "undefined") { - Log.log("Create new calendar fetcher for url: " + url + " - Interval: " + fetchInterval); + Log.log("Create new calendarfetcher for url: " + url + " - Interval: " + fetchInterval); fetcher = new CalendarFetcher(url, fetchInterval, excludedEvents, maximumEntries, maximumNumberOfDays, auth, broadcastPastEvents, selfSignedCert); fetcher.onReceive((fetcher) => { @@ -64,7 +64,7 @@ module.exports = NodeHelper.create({ this.fetchers[identifier + url] = fetcher; } else { - Log.log("Use existing calendar fetcher for url: " + url); + Log.log("Use existing calendarfetcher for url: " + url); fetcher = this.fetchers[identifier + url]; fetcher.broadcastEvents(); } diff --git a/modules/default/newsfeed/newsfeed.js b/modules/default/newsfeed/newsfeed.js index 13efd590..3946a9dd 100644 --- a/modules/default/newsfeed/newsfeed.js +++ b/modules/default/newsfeed/newsfeed.js @@ -90,7 +90,7 @@ Module.register("newsfeed", { this.loaded = true; this.error = null; } else if (notification === "FETCH_ERROR") { - this.error = `Could not fetch newsfeed ${payload.url}`; + this.error = `${payload.error}`; this.scheduleUpdateInterval(); } else if (notification === "INCORRECT_URL") { this.error = `Incorrect url: ${payload.url}`; diff --git a/modules/default/newsfeed/newsfeedfetcher.js b/modules/default/newsfeed/newsfeedfetcher.js index d4db511d..4d359b99 100644 --- a/modules/default/newsfeed/newsfeedfetcher.js +++ b/modules/default/newsfeed/newsfeedfetcher.js @@ -5,6 +5,7 @@ * MIT Licensed. */ const Log = require("logger"); +const FetcherHelper = require("fetcher_helper"); const FeedMe = require("feedme"); const fetch = require("node-fetch"); const iconv = require("iconv-lite"); @@ -84,12 +85,13 @@ const NewsfeedFetcher = function (url, reloadInterval, encoding, logFeedWarnings }; fetch(url, { headers: headers }) - .catch((error) => { - fetchFailedCallback(this, error); - scheduleTimer(); + .then(FetcherHelper.checkStatus) + .then((response) => { + response.body.pipe(iconv.decodeStream(encoding)).pipe(parser); }) - .then((res) => { - res.body.pipe(iconv.decodeStream(encoding)).pipe(parser); + .catch((error) => { + fetchFailedCallback(this, error.message); + scheduleTimer(); }); }; diff --git a/modules/default/newsfeed/node_helper.js b/modules/default/newsfeed/node_helper.js index 29e503d8..926b9d3d 100644 --- a/modules/default/newsfeed/node_helper.js +++ b/modules/default/newsfeed/node_helper.js @@ -44,7 +44,7 @@ module.exports = NodeHelper.create({ let fetcher; if (typeof this.fetchers[url] === "undefined") { - Log.log("Create new news fetcher for url: " + url + " - Interval: " + reloadInterval); + Log.log("Create new newsfetcher for url: " + url + " - Interval: " + reloadInterval); fetcher = new NewsfeedFetcher(url, reloadInterval, encoding, config.logFeedWarnings); fetcher.onReceive(() => { @@ -61,7 +61,7 @@ module.exports = NodeHelper.create({ this.fetchers[url] = fetcher; } else { - Log.log("Use existing news fetcher for url: " + url); + Log.log("Use existing newsfetcher for url: " + url); fetcher = this.fetchers[url]; fetcher.setReloadInterval(reloadInterval); fetcher.broadcastItems(); diff --git a/package.json b/package.json index 4b45193d..39c47bd6 100644 --- a/package.json +++ b/package.json @@ -87,6 +87,7 @@ "socket.io": "^4.1.2" }, "_moduleAliases": { + "fetcher_helper": "js/fetcher_helper.js", "node_helper": "js/node_helper.js", "logger": "js/logger.js" },