Skip to content

Commit df6462a

Browse files
committed
Fix.
1 parent a119b56 commit df6462a

File tree

1 file changed

+52
-40
lines changed

1 file changed

+52
-40
lines changed

google/calendar.js

Lines changed: 52 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -61,42 +61,49 @@ module.exports = function(RED) {
6161
var request = {
6262
url: 'https://www.googleapis.com/calendar/v3/calendars/'+cal.id+'/events',
6363
};
64-
if (typeof msg.payload === 'object') {
65-
request.qs = msg.payload;
66-
} else {
67-
request.qs = {
68-
maxResults: 1,
69-
orderBy: 'startTime',
70-
singleEvents: true,
71-
};
72-
if (msg.after instanceof Date) {
73-
request.qs.timeMin = msg.after.toISOString();
74-
} else if (typeof msg.after === 'string') {
75-
request.qs.timeMin = msg.timeMin;
76-
} else {
77-
request.qs.timeMin = (new Date()).toISOString();
78-
}
79-
if (msg.payload) {
80-
request.qs.q = RED.util.ensureString(msg.payload);
81-
}
64+
var now = new Date();
65+
request.qs = {
66+
maxResults: 10,
67+
orderBy: 'startTime',
68+
singleEvents: true,
69+
timeMin: now.toISOString()
70+
};
71+
if (msg.payload) {
72+
request.qs.q = RED.util.ensureString(msg.payload);
8273
}
8374
node.google.request(request, function(err, data) {
8475
if (err) {
8576
node.error("Error: " + err.toString());
8677
node.status({fill:"red",shape:"ring",text:"failed"});
8778
} else if (data.error) {
88-
node.error("Error: " + data.error.message);
79+
node.error("Error " + data.error.code + ": " +
80+
JSON.stringify(data.error.message));
8981
node.status({fill:"red",shape:"ring",text:"failed"});
9082
} else {
91-
var ev = data.items[0];
83+
var payload = msg.payload = {};
84+
var ev;
85+
/* 0 - 10 events ending after now ordered by startTime
86+
* so we find the first that starts after now to
87+
* give us the "next" event
88+
*/
89+
for (var i = 0; i<data.items.length; i++) {
90+
ev = data.items[i];
91+
var start = getEventDate(ev);
92+
if (start && start.getTime() > now.getTime()) {
93+
payload.start = start;
94+
break;
95+
}
96+
ev = undefined;
97+
}
9298
if (!ev) {
9399
delete msg.data;
94100
node.send(msg);
95101
node.status({fill:"red",shape:"ring",text:"no event"});
96102
return;
97103
}
98-
var payload = msg.payload = {};
99-
payload.title = msg.title = ev.summary;
104+
if (ev.summary) {
105+
payload.title = msg.title = ev.summary;
106+
}
100107
if (ev.description) {
101108
payload.description = msg.description = ev.description;
102109
} else {
@@ -116,27 +123,19 @@ module.exports = function(RED) {
116123
} else {
117124
delete msg.location;
118125
}
119-
if (ev.start.dateTime) {
120-
payload.start = new Date(ev.start.dateTime);
121-
delete payload.allDayEvent;
122-
} else if (ev.start.date) {
123-
payload.start = new Date(ev.start.date);
126+
if (ev.start && ev.start.date) {
124127
payload.allDayEvent = true;
125-
} else {
126-
delete payload.start;
127-
delete payload.allDayEvent;
128128
}
129-
if (ev.end.dateTime) {
130-
payload.end = new Date(ev.end.dateTime);
131-
} else if (ev.end.date) {
132-
payload.end = new Date(ev.end.date);
133-
} else {
134-
delete payload.end;
129+
var end = getEventDate(ev, 'end');
130+
if (end) {
131+
payload.end = end;
132+
}
133+
if (ev.creator) {
134+
payload.creator = {
135+
name: ev.creator.displayName,
136+
email: ev.creator.email,
137+
};
135138
}
136-
payload.creator = {
137-
name: ev.creator.displayName,
138-
email: ev.creator.email,
139-
};
140139
if (ev.attendees) {
141140
payload.attendees = [];
142141
ev.attendees.forEach(function (a) {
@@ -156,6 +155,19 @@ module.exports = function(RED) {
156155
}
157156
RED.nodes.registerType("google calendar", GoogleCalendarQueryNode);
158157

158+
function getEventDate(ev, type) {
159+
if (typeof type === 'undefined') {
160+
type = 'start';
161+
}
162+
if (ev[type] && ev[type].dateTime) {
163+
return new Date(ev[type].dateTime);
164+
} else if (ev.start && ev.start.date) {
165+
return new Date(ev[type].date);
166+
} else {
167+
return null;
168+
}
169+
}
170+
159171
GoogleCalendarQueryNode.prototype.calendarByName = function(name) {
160172
for (var cal in this.calendars) {
161173
if (this.calendars.hasOwnProperty(cal)) {

0 commit comments

Comments
 (0)