diff --git a/modules/default/calendar/README.md b/modules/default/calendar/README.md index 2c3ad142..cfe4e2b8 100644 --- a/modules/default/calendar/README.md +++ b/modules/default/calendar/README.md @@ -40,6 +40,12 @@ The following properties can be configured:
Default value: 10 + + maximumNumberOfDays + The maximum number of days in the future.
+
Default value: 365 + + displaySymbol Display a symbol in front of an entry.
diff --git a/modules/default/calendar/calendar.js b/modules/default/calendar/calendar.js index f7b837b0..84045944 100644 --- a/modules/default/calendar/calendar.js +++ b/modules/default/calendar/calendar.js @@ -12,6 +12,7 @@ Module.register('calendar',{ // Define module defaults defaults: { maximumEntries: 10, // Total Maximum Entries + maximumNumberOfDays: 365, displaySymbol: true, defaultSymbol: 'calendar', // Fontawsome Symbol see http://fontawesome.io/cheatsheet/ maxTitleLength: 25, @@ -180,6 +181,7 @@ Module.register('calendar',{ this.sendSocketNotification('ADD_CALENDAR', { url: url, maximumEntries: this.config.maximumEntries, + maximumNumberOfDays: this.config.maximumNumberOfDays, fetchInterval: this.config.fetchInterval }); }, diff --git a/modules/default/calendar/node_helper.js b/modules/default/calendar/node_helper.js index 09e212b0..678a6498 100644 --- a/modules/default/calendar/node_helper.js +++ b/modules/default/calendar/node_helper.js @@ -10,7 +10,7 @@ var ical = require('ical'); var moment = require('moment'); var validUrl = require('valid-url'); -var CalendarFetcher = function(url, reloadInterval, maximumEntries) { +var CalendarFetcher = function(url, reloadInterval, maximumEntries, maximumNumberOfDays) { var self = this; var reloadTimer = null; @@ -42,6 +42,7 @@ var CalendarFetcher = function(url, reloadInterval, maximumEntries) { for (var e in data) { var event = data[e]; + var today = moment().startOf('day'); if (event.type === 'VEVENT') { var startDate = (event.start.length === 8) ? moment(event.start, 'YYYYMMDD') : moment(new Date(event.start)); @@ -54,6 +55,7 @@ var CalendarFetcher = function(url, reloadInterval, maximumEntries) { // This causes the times of the recurring event to be incorrect. // By adjusting the timeset property, this issue is solved. var now = new Date(); + if (rule.timeset[0].hour == now.getHours(), rule.timeset[0].minute == now.getMinutes(), rule.timeset[0].second == now.getSeconds()) { @@ -63,10 +65,7 @@ var CalendarFetcher = function(url, reloadInterval, maximumEntries) { rule.timeset[0].second = startDate.format('s'); } - var oneYear = new Date(); - oneYear.setFullYear(oneYear.getFullYear() + 1); - - var dates = rule.between(new Date(), oneYear, true, limitFunction); + var dates = rule.between(new Date(), today.add(maximumNumberOfDays, 'days') , true, limitFunction); //console.log(dates); for (var d in dates) { startDate = moment(new Date(dates[d])); @@ -78,8 +77,8 @@ var CalendarFetcher = function(url, reloadInterval, maximumEntries) { } else { // Single event. - var today = moment().startOf('day'); - if (startDate > today) { + + if (startDate > today && startDate <= today.add(maximumNumberOfDays, 'days')) { newEvents.push({ title: event.summary, startDate: startDate.format('x') @@ -187,7 +186,7 @@ module.exports = NodeHelper.create({ socketNotificationReceived: function(notification, payload) { if (notification === 'ADD_CALENDAR') { //console.log('ADD_CALENDAR: '); - this.createFetcher(payload.url, payload.fetchInterval, payload.maximumEntries); + this.createFetcher(payload.url, payload.fetchInterval, payload.maximumEntries, payload.maximumNumberOfDays); } }, @@ -199,7 +198,7 @@ module.exports = NodeHelper.create({ * attribute reloadInterval number - Reload interval in milliseconds. */ - createFetcher: function(url, fetchInterval, maximumEntries) { + createFetcher: function(url, fetchInterval, maximumEntries, maximumNumberOfDays) { var self = this; if (!validUrl.isUri(url)){ @@ -210,7 +209,7 @@ module.exports = NodeHelper.create({ var fetcher; if (typeof self.fetchers[url] === 'undefined') { console.log('Create new calendar fetcher for url: ' + url + ' - Interval: ' + fetchInterval); - fetcher = new CalendarFetcher(url, fetchInterval, maximumEntries); + fetcher = new CalendarFetcher(url, fetchInterval, maximumEntries, maximumNumberOfDays); fetcher.onReceive(function(fetcher) { //console.log('Broadcast events.');