-
Notifications
You must be signed in to change notification settings - Fork 10
/
Code.js
63 lines (56 loc) · 2.36 KB
/
Code.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
// README
// Instruction: https://github.com/soetani/gas-sync-google-calendar
// 1. How many days do you want to sync your calendars?
var DAYS_TO_SYNC = 30;
// 2. Calendar ID mapping: [Calendar ID (Source), Calendar ID (Guest)]
var CALENDAR_IDS = [
['source_01@example.com', 'guest_01@example.net'],
['source_02@example.com', 'guest_02@example.net']
];
// 3. What is Slack webhook URL? You'll be notified when the sync is failed
var SLACK_WEBHOOK_URL = 'https://hooks.slack.com/services/foobar';
function main(){
var dateFrom = new Date();
var dateTo = new Date(dateFrom.getTime() + (DAYS_TO_SYNC * 24 * 60 * 60* 1000));
CALENDAR_IDS.forEach(function(ids){
var sourceId = ids[0];
var guestId = ids[1];
Logger.log('Source: ' + sourceId + ' / Guest: ' + guestId);
var events = CalendarApp.getCalendarById(sourceId).getEvents(dateFrom, dateTo);
events.forEach(function(event){
var guest = event.getGuestByEmail(guestId);
guest ? syncStatus(event, guest) : invite(event, guestId);
});
});
}
function syncStatus(event, guest){
var sourceStatus = event.getMyStatus();
var guestStatus = guest.getGuestStatus();
if(guestStatus != CalendarApp.GuestStatus.YES && guestStatus != CalendarApp.GuestStatus.NO) return;
if((sourceStatus == CalendarApp.GuestStatus.YES || sourceStatus == CalendarApp.GuestStatus.NO) && sourceStatus != guestStatus){
// Notify when source status is opposite from guest's status
notify('Failed to sync the status of the event: ' + event.getTitle() + ' (' + event.getStartTime() + ')');
}
else if(sourceStatus != guestStatus && sourceStatus != CalendarApp.GuestStatus.OWNER){
// Update status when my status is invited/maybe AND guest's status is yes/no
event.setMyStatus(guestStatus);
Logger.log('Status updated:' + event.getTitle() + ' (' + event.getStartTime() + ')');
}
}
function invite(event, guestId){
try {
event.addGuest(guestId);
Logger.log('Invited: ' + event.getTitle() + ' (' + event.getStartTime() + ')');
} catch (e) {
Logger.log('*** Failed to invite guest user >> Event Title: ' + event.getTitle() + ' | Error message:' + e.message);
}
}
function notify(message){
var data = {'text': message};
var options = {
'method': 'post',
'contentType': 'application/json',
'payload': JSON.stringify(data)
};
UrlFetchApp.fetch(SLACK_WEBHOOK_URL, options);
}