implement date filters

This commit is contained in:
basti76
2018-09-15 20:51:11 +02:00
parent dd3d78a231
commit eff710f47b
2 changed files with 24 additions and 7 deletions

View File

@ -46,8 +46,8 @@
nname: {value: ''},
server: {type: 'nextcloud-credentials', required: true},
calendar: {value: '', required: false},
future: { type: 'bool', value: true, required: true},
futureWeeks: { type: 'num', default: 4 }
pastWeeks: { type: 'num', value: 0, required: true},
futureWeeks: { type: 'num', default: 4, required: true }
},
inputs: 1,
outputs: 1,
@ -73,11 +73,11 @@
<input type="text" id="node-input-calendar">
</div>
<div class="form-row">
<label for="node-input-future"><i class="fa fa-check-square"></i> Only future events?</label>
<input type="checkbox" id="node-input-future">
<label for="node-input-pastWeeks"><i class="fa fa-check-square"></i> Past weeks to sync</label>
<span class="ui-spinner ui-widget ui-widget-content ui-corner-all"><input type="number" id="node-input-pastWeeks"></span>
</div>
<div class="form-row">
<label for="node-input-futureWeeks"><i class="fa fa-random"></i> Weeks to sync</label>
<label for="node-input-futureWeeks"><i class="fa fa-random"></i> Upcoming weeks to sync</label>
<span class="ui-spinner ui-widget ui-widget-content ui-corner-all"><input type="number" id="node-input-futureWeeks"></span>
</div>
</script>

View File

@ -20,11 +20,28 @@ module.exports = function (RED) {
RED.nodes.createNode(this, n)
this.server = RED.nodes.getNode(n.server)
this.calendar = n.calendar
this.future = n.future || true
this.pastWeeks = n.pastWeeks || 0
this.futureWeeks = n.futureWeeks || 4
const node = this
node.on('input', (msg) => {
let startDate = moment().startOf('day').subtract(this.pastWeeks, 'weeks').format('YYYYMMDD[T]HHmmss[Z]')
let endDate = moment().startOf('day').add(this.futureWeeks, 'weeks').format('YYYYMMDD[T]HHmmss[Z]')
const filters = [{
type: 'comp-filter',
attrs: { name: 'VCALENDAR' },
children: [{
type: 'comp-filter',
attrs: { name: 'VEVENT' },
children: [{
type: 'time-range',
attrs: {
start: startDate,
end: endDate
}
}]
}]
}]
// dav.debug.enabled = true;
const xhr = new dav.transport.Basic(
new dav.Credentials({
@ -47,7 +64,7 @@ module.exports = function (RED) {
// Wenn Kalender gesetzt ist, dann nur diesen abrufen
let c = msg.calendar || node.calendar
if (!c || !c.length || (c && c.length && c === calendar.displayName)) {
dav.listCalendarObjects(calendar, { xhr: xhr })
dav.listCalendarObjects(calendar, { xhr: xhr, filters: filters })
.then(function (calendarEntries) {
let icsList = { 'payload': { 'name': calendar.displayName, 'data': [] } }
calendarEntries.forEach(function (calendarEntry) {