Skip to content

Instantly share code, notes, and snippets.

@lordlycastle
Last active June 22, 2020 10:03
Show Gist options
  • Save lordlycastle/70c907f575e38f9e8a717d124c42051a to your computer and use it in GitHub Desktop.
Save lordlycastle/70c907f575e38f9e8a717d124c42051a to your computer and use it in GitHub Desktop.
Google App Script that manipulates some events on user's G Calendar.
/*
01010111 01100001 01110100 01100101 01110010
01111001 01101111 01101111
01100100 01101111 01101001 01101110 00100111
01101000 01100101 01111001 01100001 00111111
00100001
*/
/*
Settings
*/
let defaultEventTitle = `Blocker: Lightning Talk`;
let searchTerm = `Lightning Talk`;
let removeAllAlertsSearchTerms = [
`Remote Lunch`,
`Review Preparation for presenters`
];
let declineEventSearchTerms = [
`Scrum-of-Scrums`
];
/*
---------------------------------------------------------------------------
Main
*/
// Globals
let defaultCalendar = CalendarApp.getDefaultCalendar();
let now = new Date();
function main() {
Logger.log(`Running on: ` + now);
processLightningTalkEvents();
processRemoveAllRemindersSearch();
processDeclineEventsSearch();
}
/*
-----------------------------------------------------------------------------
Processes
*/
function processLightningTalkEvents() {
let event = getLightningTalkEvent();
if (event) {
let title = event.getTitle();
if (title == defaultEventTitle) {
removeReminders(event);
} else {
addReminders(event);
}
}
}
function processRemoveAllRemindersSearch() {
// Remove reminders
removeAllAlertsSearchTerms.forEach((searchTerm, idx) => {
let eventsForDay = defaultCalendar.getEventsForDay(now, {search: searchTerm});
Logger.log(`Processing search term: ` + searchTerm + `. Got ` + eventsForDay.length + ` matches.`);
if (eventsForDay.length === 0) console.warn(`Did not find match for: ${searchTerm} on date: ${now}.`)
eventsForDay.forEach((event, idx) => removeReminders(event));
});
}
function processDeclineEventsSearch() {
declineEventSearchTerms.forEach((searchTerm, idx) => {
let eventsForDay = defaultCalendar.getEventsForDay(now, {search: searchTerm});
Logger.log(`Processing search term: ` + searchTerm + `. Got ` + eventsForDay.length + ` matches.`);
if (eventsForDay.length === 0) console.warn(`Did not find match for: ${searchTerm} on date: ${now}.`)
eventsForDay.forEach((event, idx) => declineEvent(event));
});
}
/*
---------------------------------------------------------------------------
Utility
*/
function getLightningTalkEvent() {
// Finds the event blocker lightning talk event.
let eventsForDay = defaultCalendar.getEventsForDay(now, {search: searchTerm});
if (eventsForDay.length == 0) {
console.warn(`Did not find any events matching search: ` + searchTerm
+ ` for date: ` + now);
} else if (eventsForDay.length == 1) {
Logger.log(`Found a single event matching search: ` + searchTerm + ` with title: ` + eventsForDay[0].getTitle());
return eventsForDay[0];
} else {
console.warn(`Found unexpected number of events matching search: ` + searchTerm
+ `. Count: ` + eventsForDay.length
+ eventsForDay.map((e, idx) => idx + ` -: ` + e.getTitle()).join('\n'));
}
}
function removeReminders(event) {
// Remove all reminder from given event.
Logger.log(`Removing all reminder from event: ` + event.getTitle() + `, ID: ` + event.getId());
event.removeAllReminders();
}
function addReminders(event) {
// Adds default reminders to the given event.
Logger.log(`Resetting reminder for event: ` + event.getTitle() + `, ID: ` + event.getId());
event.resetRemindersToDefault();
}
function declineEvent(event) {
// Declines the given event.
Logger.log(`Setting my status for event ${eventToStr(event)} to: ${CalendarApp.GuestStatus.NO}`);
event.setMyStatus(CalendarApp.GuestStatus.NO);
}
function eventToStr(event) {
return `event: ${event.getTitle()}, ID: ${event.getId()}`;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment