From d31b69684658a0dad68a2a65d5523ff18f9aa458 Mon Sep 17 00:00:00 2001 From: DarthBrento Date: Mon, 1 Jun 2020 00:24:13 +0200 Subject: [PATCH 1/6] updated changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 78a594e6dc..77936100cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,6 +32,7 @@ _This release is scheduled to be released on 2020-07-01._ - The broken modules due to Socket.io change from last release [#1973](https://github.com/MichMich/MagicMirror/issues/1973) - Add backward compatibility for old module code in socketclient.js [#1973](https://github.com/MichMich/MagicMirror/issues/1973) +- Support multiple instances of calendar module with different config [#1109](https://github.com/MichMich/MagicMirror/issues/1109) ## [2.11.0] - 2020-04-01 From 37e31bac5b9d2e5894356326ed9dafc6600d0e27 Mon Sep 17 00:00:00 2001 From: DarthBrento Date: Mon, 1 Jun 2020 00:36:47 +0200 Subject: [PATCH 2/6] Update node_helper.js --- modules/default/calendar/node_helper.js | 27 ++++++++++++++----------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/modules/default/calendar/node_helper.js b/modules/default/calendar/node_helper.js index 95bb7dca06..d733137e6b 100644 --- a/modules/default/calendar/node_helper.js +++ b/modules/default/calendar/node_helper.js @@ -1,7 +1,7 @@ /* Magic Mirror * Node Helper: Calendar * - * By Michael Teeuw https://michaelteeuw.nl + * By Michael Teeuw http://michaelteeuw.nl * MIT Licensed. */ @@ -11,19 +11,20 @@ var CalendarFetcher = require("./calendarfetcher.js"); module.exports = NodeHelper.create({ // Override start method. - start: function () { + start: function() { var events = []; this.fetchers = []; console.log("Starting node helper for: " + this.name); + }, // Override socketNotificationReceived method. - socketNotificationReceived: function (notification, payload) { + socketNotificationReceived: function(notification, payload) { if (notification === "ADD_CALENDAR") { //console.log('ADD_CALENDAR: '); - this.createFetcher(payload.url, payload.fetchInterval, payload.excludedEvents, payload.maximumEntries, payload.maximumNumberOfDays, payload.auth, payload.broadcastPastEvents); + this.createFetcher(payload.url, payload.fetchInterval, payload.excludedEvents, payload.maximumEntries, payload.maximumNumberOfDays, payload.auth, payload.broadcastPastEvents, payload.id); } }, @@ -35,38 +36,40 @@ module.exports = NodeHelper.create({ * attribute reloadInterval number - Reload interval in milliseconds. */ - createFetcher: function (url, fetchInterval, excludedEvents, maximumEntries, maximumNumberOfDays, auth, broadcastPastEvents) { + createFetcher: function(url, fetchInterval, excludedEvents, maximumEntries, maximumNumberOfDays, auth, broadcastPastEvents, identifier) { var self = this; if (!validUrl.isUri(url)) { - self.sendSocketNotification("INCORRECT_URL", { url: url }); + self.sendSocketNotification("INCORRECT_URL", {url: url, id: identifier}); return; } var fetcher; - if (typeof self.fetchers[url] === "undefined") { + if (typeof self.fetchers[identifier + url] === "undefined") { console.log("Create new calendar fetcher for url: " + url + " - Interval: " + fetchInterval); fetcher = new CalendarFetcher(url, fetchInterval, excludedEvents, maximumEntries, maximumNumberOfDays, auth, broadcastPastEvents); - fetcher.onReceive(function (fetcher) { + fetcher.onReceive(function(fetcher) { //console.log('Broadcast events.'); //console.log(fetcher.events()); self.sendSocketNotification("CALENDAR_EVENTS", { url: fetcher.url(), - events: fetcher.events() + events: fetcher.events(), + id: identifier }); }); - fetcher.onError(function (fetcher, error) { + fetcher.onError(function(fetcher, error) { console.error("Calendar Error. Could not fetch calendar: ", fetcher.url(), error); self.sendSocketNotification("FETCH_ERROR", { url: fetcher.url(), - error: error + error: error, + id: identifier }); }); - self.fetchers[url] = fetcher; + self.fetchers[identifier + url] = fetcher; } else { //console.log('Use existing news fetcher for url: ' + url); fetcher = self.fetchers[url]; From 1405e8821cbdf84b5e11f29f821a4ab1e1778234 Mon Sep 17 00:00:00 2001 From: DarthBrento Date: Mon, 1 Jun 2020 00:38:05 +0200 Subject: [PATCH 3/6] Update calendar.js --- modules/default/calendar/calendar.js | 176 +++++++++++++++------------ 1 file changed, 95 insertions(+), 81 deletions(-) diff --git a/modules/default/calendar/calendar.js b/modules/default/calendar/calendar.js index f80992699e..a84b98e3a4 100755 --- a/modules/default/calendar/calendar.js +++ b/modules/default/calendar/calendar.js @@ -1,18 +1,20 @@ -/* global cloneObject */ +/* global Module */ /* Magic Mirror * Module: Calendar * - * By Michael Teeuw https://michaelteeuw.nl + * By Michael Teeuw http://michaelteeuw.nl * MIT Licensed. */ + Module.register("calendar", { + // Define module defaults defaults: { maximumEntries: 10, // Total Maximum Entries maximumNumberOfDays: 365, displaySymbol: true, - defaultSymbol: "calendar", // Fontawesome Symbol see https://fontawesome.com/cheatsheet?from=io + defaultSymbol: "calendar", // Fontawesome Symbol see http://fontawesome.io/cheatsheet/ showLocation: false, displayRepeatingCountTitle: false, defaultRepeatingCountTitle: "", @@ -38,8 +40,8 @@ Module.register("calendar", { calendars: [ { symbol: "calendar", - url: "https://www.calendarlabs.com/templates/ical/US-Holidays.ics" - } + url: "http://www.calendarlabs.com/templates/ical/US-Holidays.ics", + }, ], titleReplace: { "De verjaardag van ": "", @@ -84,7 +86,7 @@ Module.register("calendar", { var calendarConfig = { maximumEntries: calendar.maximumEntries, maximumNumberOfDays: calendar.maximumNumberOfDays, - broadcastPastEvents: calendar.broadcastPastEvents + broadcastPastEvents: calendar.broadcastPastEvents, }; if (calendar.symbolClass === "undefined" || calendar.symbolClass === null) { calendarConfig.symbolClass = ""; @@ -97,7 +99,7 @@ Module.register("calendar", { } // we check user and password here for backwards compatibility with old configs - if (calendar.user && calendar.pass) { + if(calendar.user && calendar.pass) { Log.warn("Deprecation warning: Please update your calendar authentication configuration."); Log.warn("https://github.com/MichMich/MagicMirror/tree/v2.1.2/modules/default/calendar#calendar-authentication-options"); calendar.auth = { @@ -111,7 +113,7 @@ Module.register("calendar", { // Trigger ADD_CALENDAR every fetchInterval to make sure there is always a calendar // fetcher running on the server side. var self = this; - setInterval(function () { + setInterval(function() { self.addCalendar(calendar.url, calendar.auth, calendarConfig); }, self.config.fetchInterval); } @@ -122,6 +124,9 @@ Module.register("calendar", { // Override socket notification handler. socketNotificationReceived: function (notification, payload) { + if (this.identifier != payload.id) + {return;} + if (notification === "CALENDAR_EVENTS") { if (this.hasCalendarURL(payload.url)) { this.calendarData[payload.url] = payload.events; @@ -143,12 +148,13 @@ Module.register("calendar", { // Override dom generator. getDom: function () { + var events = this.createEventList(); var wrapper = document.createElement("table"); wrapper.className = this.config.tableClass; if (events.length === 0) { - wrapper.innerHTML = this.loaded ? this.translate("EMPTY") : this.translate("LOADING"); + wrapper.innerHTML = (this.loaded) ? this.translate("EMPTY") : this.translate("LOADING"); wrapper.className = this.config.tableClass + " dimmed"; return wrapper; } @@ -167,8 +173,8 @@ Module.register("calendar", { for (var e in events) { var event = events[e]; var dateAsString = moment(event.startDate, "x").format(this.config.dateFormat); - if (this.config.timeFormat === "dateheaders") { - if (lastSeenDate !== dateAsString) { + if(this.config.timeFormat === "dateheaders"){ + if(lastSeenDate !== dateAsString){ var dateRow = document.createElement("tr"); dateRow.className = "normal"; var dateCell = document.createElement("td"); @@ -179,10 +185,9 @@ Module.register("calendar", { dateRow.appendChild(dateCell); wrapper.appendChild(dateRow); - if (e >= startFade) { - //fading + if (e >= startFade) { //fading currentFadeStep = e - startFade; - dateRow.style.opacity = 1 - (1 / fadeSteps) * currentFadeStep; + dateRow.style.opacity = 1 - (1 / fadeSteps * currentFadeStep); } lastSeenDate = dateAsString; @@ -208,20 +213,20 @@ Module.register("calendar", { symbolWrapper.className = "symbol align-right " + symbolClass; var symbols = this.symbolsForUrl(event.url); - if (typeof symbols === "string") { + if(typeof symbols === "string") { symbols = [symbols]; } - for (var i = 0; i < symbols.length; i++) { + for(var i = 0; i < symbols.length; i++) { var symbol = document.createElement("span"); symbol.className = "fa fa-fw fa-" + symbols[i]; - if (i > 0) { + if(i > 0){ symbol.style.paddingLeft = "5px"; } symbolWrapper.appendChild(symbol); } eventWrapper.appendChild(symbolWrapper); - } else if (this.config.timeFormat === "dateheaders") { + } else if(this.config.timeFormat === "dateheaders"){ var blankCell = document.createElement("td"); blankCell.innerHTML = "   "; eventWrapper.appendChild(blankCell); @@ -231,6 +236,7 @@ Module.register("calendar", { repeatingCountTitle = ""; if (this.config.displayRepeatingCountTitle && event.firstYear !== undefined) { + repeatingCountTitle = this.countTitleForUrl(event.url); if (repeatingCountTitle !== "") { @@ -251,15 +257,17 @@ Module.register("calendar", { titleWrapper.className = "title " + titleClass; } - var timeWrapper; + if(this.config.timeFormat === "dateheaders"){ - if (this.config.timeFormat === "dateheaders") { if (event.fullDayEvent) { titleWrapper.colSpan = "2"; titleWrapper.align = "left"; + } else { - timeWrapper = document.createElement("td"); - timeWrapper.className = "time light " + this.timeClassForUrl(event.url); + + var timeClass = this.timeClassForUrl(event.url); + var timeWrapper = document.createElement("td"); + timeWrapper.className = "time light " + timeClass; timeWrapper.align = "left"; timeWrapper.style.paddingLeft = "2px"; timeWrapper.innerHTML = moment(event.startDate, "x").format("LT"); @@ -269,7 +277,7 @@ Module.register("calendar", { eventWrapper.appendChild(titleWrapper); } else { - timeWrapper = document.createElement("td"); + var timeWrapper = document.createElement("td"); eventWrapper.appendChild(titleWrapper); //console.log(event.today); @@ -294,14 +302,14 @@ Module.register("calendar", { } } else { /* Check to see if the user displays absolute or relative dates with their events - * Also check to see if an event is happening within an 'urgency' time frameElement - * For example, if the user set an .urgency of 7 days, those events that fall within that - * time frame will be displayed with 'in xxx' time format or moment.fromNow() - * - * Note: this needs to be put in its own function, as the whole thing repeats again verbatim - */ + * Also check to see if an event is happening within an 'urgency' time frameElement + * For example, if the user set an .urgency of 7 days, those events that fall within that + * time frame will be displayed with 'in xxx' time format or moment.fromNow() + * + * Note: this needs to be put in its own function, as the whole thing repeats again verbatim + */ if (this.config.timeFormat === "absolute") { - if (this.config.urgency > 1 && event.startDate - now < this.config.urgency * oneDay) { + if ((this.config.urgency > 1) && (event.startDate - now < (this.config.urgency * oneDay))) { // This event falls within the config.urgency period that the user has set timeWrapper.innerHTML = this.capFirst(moment(event.startDate, "x").from(moment().format("YYYYMMDD"))); } else { @@ -311,9 +319,9 @@ Module.register("calendar", { timeWrapper.innerHTML = this.capFirst(moment(event.startDate, "x").from(moment().format("YYYYMMDD"))); } } - if (this.config.showEnd) { - timeWrapper.innerHTML += "-"; - timeWrapper.innerHTML += this.capFirst(moment(event.endDate, "x").format(this.config.fullDayEventDateFormat)); + if(this.config.showEnd){ + timeWrapper.innerHTML += "-" ; + timeWrapper.innerHTML += this.capFirst(moment(event.endDate , "x").format(this.config.fullDayEventDateFormat)); } } else { if (event.startDate >= new Date()) { @@ -323,7 +331,7 @@ Module.register("calendar", { // If event is within 6 hour, display 'in xxx' time format or moment.fromNow() timeWrapper.innerHTML = this.capFirst(moment(event.startDate, "x").fromNow()); } else { - if (this.config.timeFormat === "absolute" && !this.config.nextDaysRelative) { + if(this.config.timeFormat === "absolute" && !this.config.nextDaysRelative) { timeWrapper.innerHTML = this.capFirst(moment(event.startDate, "x").format(this.config.dateFormat)); } else { // Otherwise just say 'Today/Tomorrow at such-n-such time' @@ -332,14 +340,14 @@ Module.register("calendar", { } } else { /* Check to see if the user displays absolute or relative dates with their events - * Also check to see if an event is happening within an 'urgency' time frameElement - * For example, if the user set an .urgency of 7 days, those events that fall within that - * time frame will be displayed with 'in xxx' time format or moment.fromNow() - * - * Note: this needs to be put in its own function, as the whole thing repeats again verbatim - */ + * Also check to see if an event is happening within an 'urgency' time frameElement + * For example, if the user set an .urgency of 7 days, those events that fall within that + * time frame will be displayed with 'in xxx' time format or moment.fromNow() + * + * Note: this needs to be put in its own function, as the whole thing repeats again verbatim + */ if (this.config.timeFormat === "absolute") { - if (this.config.urgency > 1 && event.startDate - now < this.config.urgency * oneDay) { + if ((this.config.urgency > 1) && (event.startDate - now < (this.config.urgency * oneDay))) { // This event falls within the config.urgency period that the user has set timeWrapper.innerHTML = this.capFirst(moment(event.startDate, "x").fromNow()); } else { @@ -360,11 +368,13 @@ Module.register("calendar", { if (this.config.showEnd) { timeWrapper.innerHTML += "-"; timeWrapper.innerHTML += this.capFirst(moment(event.endDate, "x").format(this.config.dateEndFormat)); + } } //timeWrapper.innerHTML += ' - '+ moment(event.startDate,'x').format('lll'); //console.log(event); - timeWrapper.className = "time light " + this.timeClassForUrl(event.url); + var timeClass = this.timeClassForUrl(event.url); + timeWrapper.className = "time light " + timeClass; eventWrapper.appendChild(timeWrapper); } @@ -373,7 +383,7 @@ Module.register("calendar", { // Create fade effect. if (e >= startFade) { currentFadeStep = e - startFade; - eventWrapper.style.opacity = 1 - (1 / fadeSteps) * currentFadeStep; + eventWrapper.style.opacity = 1 - (1 / fadeSteps * currentFadeStep); } if (this.config.showLocation) { @@ -396,7 +406,7 @@ Module.register("calendar", { if (e >= startFade) { currentFadeStep = e - startFade; - locationRow.style.opacity = 1 - (1 / fadeSteps) * currentFadeStep; + locationRow.style.opacity = 1 - (1 / fadeSteps * currentFadeStep); } } } @@ -413,17 +423,20 @@ Module.register("calendar", { * @param {number} timeFormat Specifies either 12 or 24 hour time format * @returns {moment.LocaleSpecification} */ - getLocaleSpecification: function (timeFormat) { + getLocaleSpecification: function(timeFormat) { switch (timeFormat) { - case 12: { - return { longDateFormat: { LT: "h:mm A" } }; - } - case 24: { - return { longDateFormat: { LT: "HH:mm" } }; - } - default: { - return { longDateFormat: { LT: moment.localeData().longDateFormat("LT") } }; - } + case 12: { + return { longDateFormat: {LT: "h:mm A"} }; + break; + } + case 24: { + return { longDateFormat: {LT: "HH:mm"} }; + break; + } + default: { + return { longDateFormat: {LT: moment.localeData().longDateFormat("LT")} }; + break; + } } }, @@ -459,37 +472,37 @@ Module.register("calendar", { var calendar = this.calendarData[c]; for (var e in calendar) { var event = JSON.parse(JSON.stringify(calendar[e])); // clone object - if (event.endDate < now) { + if(event.endDate < now) { continue; } - if (this.config.hidePrivate) { - if (event.class === "PRIVATE") { - // do not add the current event, skip it - continue; + if(this.config.hidePrivate) { + if(event.class === "PRIVATE") { + // do not add the current event, skip it + continue; } } - if (this.config.hideOngoing) { - if (event.startDate < now) { + if(this.config.hideOngoing) { + if(event.startDate < now) { continue; } } - if (this.listContainsEvent(events, event)) { + if(this.listContainsEvent(events,event)){ continue; } event.url = c; - event.today = event.startDate >= today && event.startDate < today + 24 * 60 * 60 * 1000; + event.today = event.startDate >= today && event.startDate < (today + 24 * 60 * 60 * 1000); /* if sliceMultiDayEvents is set to true, multiday events (events exceeding at least one midnight) are sliced into days, - * otherwise, esp. in dateheaders mode it is not clear how long these events are. - */ - var maxCount = Math.ceil((event.endDate - 1 - moment(event.startDate, "x").endOf("day").format("x")) / (1000 * 60 * 60 * 24)) + 1; + * otherwise, esp. in dateheaders mode it is not clear how long these events are. + */ + var maxCount = Math.ceil(((event.endDate - 1) - moment(event.startDate, "x").endOf("day").format("x"))/(1000*60*60*24)) + 1; if (this.config.sliceMultiDayEvents && maxCount > 1) { var splitEvents = []; var midnight = moment(event.startDate, "x").clone().startOf("day").add(1, "day").format("x"); var count = 1; while (event.endDate > midnight) { var thisEvent = JSON.parse(JSON.stringify(event)); // clone object - thisEvent.today = thisEvent.startDate >= today && thisEvent.startDate < today + 24 * 60 * 60 * 1000; + thisEvent.today = thisEvent.startDate >= today && thisEvent.startDate < (today + 24 * 60 * 60 * 1000); thisEvent.endDate = midnight; thisEvent.title += " (" + count + "/" + maxCount + ")"; splitEvents.push(thisEvent); @@ -499,11 +512,11 @@ Module.register("calendar", { midnight = moment(midnight, "x").add(1, "day").format("x"); // next day } // Last day - event.title += " (" + count + "/" + maxCount + ")"; + event.title += " ("+count+"/"+maxCount+")"; splitEvents.push(event); for (event of splitEvents) { - if (event.endDate > now && event.endDate <= future) { + if ((event.endDate > now) && (event.endDate <= future)) { events.push(event); } } @@ -519,9 +532,9 @@ Module.register("calendar", { return events.slice(0, this.config.maximumEntries); }, - listContainsEvent: function (eventList, event) { - for (var evt of eventList) { - if (evt.title === event.title && parseInt(evt.startDate) === parseInt(event.startDate)) { + listContainsEvent: function(eventList, event){ + for(var evt of eventList){ + if(evt.title === event.title && parseInt(evt.startDate) === parseInt(event.startDate)){ return true; } } @@ -544,7 +557,8 @@ Module.register("calendar", { titleClass: calendarConfig.titleClass, timeClass: calendarConfig.timeClass, auth: auth, - broadcastPastEvents: calendarConfig.broadcastPastEvents || this.config.broadcastPastEvents + broadcastPastEvents: calendarConfig.broadcastPastEvents || this.config.broadcastPastEvents, + id: this.identifier, }); }, @@ -671,9 +685,8 @@ Module.register("calendar", { for (var i = 0; i < words.length; i++) { var word = words[i]; - if (currentLine.length + word.length < (typeof maxLength === "number" ? maxLength : 25) - 1) { - // max - 1 to account for a space - currentLine += word + " "; + if (currentLine.length + word.length < (typeof maxLength === "number" ? maxLength : 25) - 1) { // max - 1 to account for a space + currentLine += (word + " "); } else { line++; if (line > maxTitleLines - 1) { @@ -684,9 +697,9 @@ Module.register("calendar", { } if (currentLine.length > 0) { - temp += currentLine + "
" + word + " "; + temp += (currentLine + "
" + word + " "); } else { - temp += word + "
"; + temp += (word + "
"); } currentLine = ""; } @@ -725,8 +738,8 @@ Module.register("calendar", { var regParts = needle.match(/^\/(.+)\/([gim]*)$/); if (regParts) { - // the parsed pattern is a regexp. - needle = new RegExp(regParts[1], regParts[2]); + // the parsed pattern is a regexp. + needle = new RegExp(regParts[1], regParts[2]); } title = title.replace(needle, replacement); @@ -754,10 +767,11 @@ Module.register("calendar", { } } - eventList.sort(function (a, b) { + eventList.sort(function(a,b) { return a.startDate - b.startDate; }); this.sendNotification("CALENDAR_EVENTS", eventList); + } }); From aeb287fa1deb1f857b1ffa3bac76b95fddb8862a Mon Sep 17 00:00:00 2001 From: DarthBrento Date: Mon, 1 Jun 2020 13:12:54 +0200 Subject: [PATCH 4/6] Attach identifier to socket notifications to allow multiple instances --- modules/default/calendar/calendar.js | 4 ++++ modules/default/calendar/node_helper.js | 14 ++++++++------ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/modules/default/calendar/calendar.js b/modules/default/calendar/calendar.js index f80992699e..1db1a59449 100755 --- a/modules/default/calendar/calendar.js +++ b/modules/default/calendar/calendar.js @@ -122,6 +122,9 @@ Module.register("calendar", { // Override socket notification handler. socketNotificationReceived: function (notification, payload) { + if (this.identifier != payload.id) + {return;} + if (notification === "CALENDAR_EVENTS") { if (this.hasCalendarURL(payload.url)) { this.calendarData[payload.url] = payload.events; @@ -535,6 +538,7 @@ Module.register("calendar", { */ addCalendar: function (url, auth, calendarConfig) { this.sendSocketNotification("ADD_CALENDAR", { + id: this.identifier, url: url, excludedEvents: calendarConfig.excludedEvents || this.config.excludedEvents, maximumEntries: calendarConfig.maximumEntries || this.config.maximumEntries, diff --git a/modules/default/calendar/node_helper.js b/modules/default/calendar/node_helper.js index 95bb7dca06..6af4b72a1f 100644 --- a/modules/default/calendar/node_helper.js +++ b/modules/default/calendar/node_helper.js @@ -23,7 +23,7 @@ module.exports = NodeHelper.create({ socketNotificationReceived: function (notification, payload) { if (notification === "ADD_CALENDAR") { //console.log('ADD_CALENDAR: '); - this.createFetcher(payload.url, payload.fetchInterval, payload.excludedEvents, payload.maximumEntries, payload.maximumNumberOfDays, payload.auth, payload.broadcastPastEvents); + this.createFetcher(payload.url, payload.fetchInterval, payload.excludedEvents, payload.maximumEntries, payload.maximumNumberOfDays, payload.auth, payload.broadcastPastEvents, payload.id); } }, @@ -35,16 +35,16 @@ module.exports = NodeHelper.create({ * attribute reloadInterval number - Reload interval in milliseconds. */ - createFetcher: function (url, fetchInterval, excludedEvents, maximumEntries, maximumNumberOfDays, auth, broadcastPastEvents) { + createFetcher: function (url, fetchInterval, excludedEvents, maximumEntries, maximumNumberOfDays, auth, broadcastPastEvents, identifier) { var self = this; if (!validUrl.isUri(url)) { - self.sendSocketNotification("INCORRECT_URL", { url: url }); + self.sendSocketNotification("INCORRECT_URL", { id: identifier, url: url }); return; } var fetcher; - if (typeof self.fetchers[url] === "undefined") { + if (typeof self.fetchers[identifier + url] === "undefined") { console.log("Create new calendar fetcher for url: " + url + " - Interval: " + fetchInterval); fetcher = new CalendarFetcher(url, fetchInterval, excludedEvents, maximumEntries, maximumNumberOfDays, auth, broadcastPastEvents); @@ -53,6 +53,7 @@ module.exports = NodeHelper.create({ //console.log(fetcher.events()); self.sendSocketNotification("CALENDAR_EVENTS", { + id: identifier, url: fetcher.url(), events: fetcher.events() }); @@ -61,15 +62,16 @@ module.exports = NodeHelper.create({ fetcher.onError(function (fetcher, error) { console.error("Calendar Error. Could not fetch calendar: ", fetcher.url(), error); self.sendSocketNotification("FETCH_ERROR", { + id: identifier, url: fetcher.url(), error: error }); }); - self.fetchers[url] = fetcher; + self.fetchers[identifier + url] = fetcher; } else { //console.log('Use existing news fetcher for url: ' + url); - fetcher = self.fetchers[url]; + fetcher = self.fetchers[identifier + url]; fetcher.broadcastEvents(); } From 4fe974e7a81a91bab9c832463a5dece7af43120f Mon Sep 17 00:00:00 2001 From: DarthBrento Date: Mon, 1 Jun 2020 13:31:46 +0200 Subject: [PATCH 5/6] Check identifier for type, too --- modules/default/calendar/calendar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/default/calendar/calendar.js b/modules/default/calendar/calendar.js index 1db1a59449..5b81431b1b 100755 --- a/modules/default/calendar/calendar.js +++ b/modules/default/calendar/calendar.js @@ -122,7 +122,7 @@ Module.register("calendar", { // Override socket notification handler. socketNotificationReceived: function (notification, payload) { - if (this.identifier != payload.id) + if (this.identifier !== payload.id) {return;} if (notification === "CALENDAR_EVENTS") { From 8fa2256fb08f2ccad73f8e8a8ed2b88353a49085 Mon Sep 17 00:00:00 2001 From: DarthBrento Date: Mon, 1 Jun 2020 17:19:41 +0200 Subject: [PATCH 6/6] linted --- modules/default/calendar/calendar.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/modules/default/calendar/calendar.js b/modules/default/calendar/calendar.js index 5b81431b1b..4d4b57f7ca 100755 --- a/modules/default/calendar/calendar.js +++ b/modules/default/calendar/calendar.js @@ -122,8 +122,9 @@ Module.register("calendar", { // Override socket notification handler. socketNotificationReceived: function (notification, payload) { - if (this.identifier !== payload.id) - {return;} + if (this.identifier !== payload.id) { + return; + } if (notification === "CALENDAR_EVENTS") { if (this.hasCalendarURL(payload.url)) {