Last active
October 23, 2023 16:44
-
-
Save ericchansen/6987e49130c8b7b99c57fa9238e1d348 to your computer and use it in GitHub Desktop.
Import events from one calendar into another
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function sync() { | |
var id = "[email protected]"; | |
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