1
1
const google = require ( 'googleapis' ) . google ; // eslint-disable-line prefer-destructuring
2
2
const moment = require ( 'moment-timezone' ) ;
3
3
4
+ /**
5
+ * @typedef {Object } Event
6
+ * @property {boolean } allDay
7
+ * @property {moment.Moment } start
8
+ * @property {string } name
9
+ */
10
+
11
+ /**
12
+ * @returns {Event }
13
+ */
14
+ function buildEvent ( event ) {
15
+ // All-day events don't have a start time, only a start day.
16
+ const allDay = ! event . start . dateTime ;
17
+
18
+ const start = allDay ? moment . utc ( event . start . date ) : moment . utc ( event . start . dateTime ) ;
19
+
20
+ return {
21
+ allDay,
22
+ start,
23
+ name : event . summary ,
24
+ } ;
25
+ }
26
+
4
27
class GoogleCal {
5
28
constructor ( configuration ) {
6
29
this . configuration = configuration ;
@@ -12,29 +35,23 @@ class GoogleCal {
12
35
}
13
36
14
37
findNextStreamDay ( ) {
15
- return this . getListOfUpcomingEvents ( this . configuration . GOOGLE_CALENDAR_ID ) . then ( ( events ) => {
16
- const now = moment . tz ( 'UTC' ) ;
17
- const nextEvent = events . find ( ( event ) => {
18
- if ( event . start . date !== undefined ) {
19
- return true ;
38
+ return this . getListOfUpcomingEvents ( this . configuration . GOOGLE_CALENDAR_ID ) . then (
39
+ ( googleEvents ) => {
40
+ const events = googleEvents . map ( buildEvent ) ;
41
+ if ( ! events . length ) {
42
+ return null ;
20
43
}
21
44
22
- return ! (
23
- moment . tz ( event . end . dateTime , 'YYYY-MM-DDTHH:mm:ss' , event . end . timeZone ) . isAfter ( now ) &&
24
- moment . tz ( event . start . dateTime , 'YYYY-MM-DDTHH:mm:ss' , event . start . timeZone ) . isBefore ( now )
25
- ) ;
26
- } ) ;
27
-
28
- if ( ! nextEvent ) {
29
- return null ;
30
- }
31
-
32
- return {
33
- start : nextEvent . start . dateTime ?? nextEvent . start . date ,
34
- name : nextEvent . summary ,
35
- allDay : ! nextEvent . start . dateTime , // All-day events don't have a start time, only a start day.
36
- } ;
37
- } ) ;
45
+ const nextEvent = events [ 0 ] ;
46
+ if ( nextEvent . allDay ) {
47
+ nextEvent . childEvent = events . find ( ( event ) => {
48
+ return ! event . allDay && event . start . isSame ( nextEvent . start , 'day' ) ;
49
+ } ) ;
50
+ }
51
+
52
+ return nextEvent ;
53
+ } ,
54
+ ) ;
38
55
}
39
56
40
57
link ( ) {
@@ -49,6 +66,7 @@ class GoogleCal {
49
66
singleEvents : true ,
50
67
timeMin : new Date ( ) . toISOString ( ) ,
51
68
maxResults : 5 ,
69
+ timeZone : 'UTC' ,
52
70
} )
53
71
. then ( ( response ) => response . data . items ) ;
54
72
}
0 commit comments