Skip to content

Instantly share code, notes, and snippets.

@ericchansen
Last active October 23, 2023 16:44
Show Gist options
  • Save ericchansen/6987e49130c8b7b99c57fa9238e1d348 to your computer and use it in GitHub Desktop.
Save ericchansen/6987e49130c8b7b99c57fa9238e1d348 to your computer and use it in GitHub Desktop.
Import events from one calendar into another
function sync() {
var id = "ericchansen@gmail.com";
var today = new Date();
var endDate = new Date();
endDate.setDate(today.getDate() + 7);
var secondaryCal = CalendarApp.getCalendarById(id);
var secondaryEvents = secondaryCal.getEvents(today, endDate);
var primaryCal = CalendarApp.getDefaultCalendar();
var primaryEvents = primaryCal.getEvents(today, endDate);
var primaryEventTitle = "Personal Appointment";
var stat = 1;
var evi, existingEvent;
var primaryEventsFiltered = [];
var primaryEventsUpdated = [];
var primaryEventsCreated = [];
var primaryEventsDeleted = [];
Logger.log('Number of primaryEvents: ' + primaryEvents.length);
Logger.log('Number of secondaryEvents: ' + secondaryEvents.length);
for (pev in primaryEvents) {
var pEvent = primaryEvents[pev];
if (pEvent.getTitle() == primaryEventTitle) { primaryEventsFiltered.push(pEvent); }
}
for (sev in secondaryEvents) {
stat = 1;
evi = secondaryEvents[sev];
for (existingEvent in primaryEventsFiltered) {
var pEvent = primaryEventsFiltered[existingEvent];
var secondaryTitle = evi.getTitle();
var secondaryDesc = evi.getDescription();
if ((pEvent.getStartTime().getTime() == evi.getStartTime().getTime()) && (pEvent.getEndTime().getTime() == evi.getEndTime().getTime())) {
stat = 0;
pEvent.setTitle(primaryEventTitle);
pEvent.setDescription(secondaryTitle + '\n\n' + secondaryDesc);
// event.setDescription(evi.getTitle() + '\n\n' + evi.getDescription()); // Not sure what this was for.
pEvent.setVisibility(CalendarApp.Visibility.PRIVATE);
primaryEventsUpdated.push(pEvent.getId());
Logger.log('PRIMARY EVENT UPDATED'
+ '\nprimaryId: ' + pEvent.getId() + ' \nprimaryTitle: ' + pEvent.getTitle() + ' \nprimaryDescription: ' + pEvent.getDescription());
}
}
if (stat == 0) continue;
var eviStartTime = evi.getStartTime();
var eviDay = eviStartTime.getDay();
if (evi.isAllDayEvent()) {
continue;
}
// else if (eviDay==1 || eviDay==2 || eviDay==3 || eviDay==4 || eviDay==5) // Uncomment for only weekday (no weekends) sync.
else {
var newEvent = primaryCal.createEvent(primaryEventTitle, evi.getStartTime(), evi.getEndTime());
// var newEvent = primaryCal.createEvent(evi.getTitle(), evi.getStartTime(), evi.getEndTime(), {location: evi.getLocation(), description: evi.getDescription()}); // Uncomment for full event details.
// newEvent.setDescription(evi.getTitle() + '\n\n' + evi.getDescription()); // Uncomment to add a description.
newEvent.setVisibility(CalendarApp.Visibility.PRIVATE);
// newEvent.removeAllReminders(); // Uncomment if you don't want reminders for these imported events.
primaryEventsCreated.push(newEvent.getId());
Logger.log('PRIMARY EVENT CREATED'
+ '\nprimaryId: ' + newEvent.getId() + '\nprimaryTitle: ' + newEvent.getTitle() + '\nprimaryDescription: ' + newEvent.getDescription() + '\n');
}
}
for (pev in primaryEventsFiltered) {
var pevIsUpdatedIndex = primaryEventsUpdated.indexOf(primaryEventsFiltered[pev].getId());
if (pevIsUpdatedIndex == -1) {
var pevIdToDelete = primaryEventsFiltered[pev].getId();
Logger.log(pevIdToDelete + ' deleted');
primaryEventsDeleted.push(pevIdToDelete);
primaryEventsFiltered[pev].deleteEvent();
}
}
Logger.log('Primary events previously created: ' + primaryEventsFiltered.length);
Logger.log('Primary events updated: ' + primaryEventsUpdated.length);
Logger.log('Primary events deleted: ' + primaryEventsDeleted.length);
Logger.log('Primary events created: ' + primaryEventsCreated.length);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment