Added maybeUid to createEvent and createMeeting
This commit is contained in:
parent
4fb8e8285e
commit
b0ac65b0f6
3 changed files with 28 additions and 11 deletions
|
@ -512,10 +512,11 @@ const listCalendars = (withCredentials) =>
|
||||||
const createEvent = async (
|
const createEvent = async (
|
||||||
credential: Credential,
|
credential: Credential,
|
||||||
calEvent: CalendarEvent,
|
calEvent: CalendarEvent,
|
||||||
noMail = false
|
noMail = false,
|
||||||
|
maybeUid: string = null
|
||||||
): Promise<EventResult> => {
|
): Promise<EventResult> => {
|
||||||
const parser: CalEventParser = new CalEventParser(calEvent);
|
const parser: CalEventParser = new CalEventParser(calEvent);
|
||||||
const uid: string = parser.getUid();
|
const uid: string = maybeUid ?? parser.getUid();
|
||||||
const richEvent: CalendarEvent = parser.asRichEvent();
|
const richEvent: CalendarEvent = parser.asRichEvent();
|
||||||
|
|
||||||
let success = true;
|
let success = true;
|
||||||
|
|
|
@ -54,19 +54,21 @@ export default class EventManager {
|
||||||
* Takes a CalendarEvent and creates all necessary integration entries for it.
|
* Takes a CalendarEvent and creates all necessary integration entries for it.
|
||||||
* When a video integration is chosen as the event's location, a video integration
|
* When a video integration is chosen as the event's location, a video integration
|
||||||
* event will be scheduled for it as well.
|
* event will be scheduled for it as well.
|
||||||
|
* An optional uid can be set to override the auto-generated uid.
|
||||||
*
|
*
|
||||||
* @param event
|
* @param event
|
||||||
|
* @param maybeUid
|
||||||
*/
|
*/
|
||||||
public async create(event: CalendarEvent): Promise<CreateUpdateResult> {
|
public async create(event: CalendarEvent, maybeUid: string = null): Promise<CreateUpdateResult> {
|
||||||
event = EventManager.processLocation(event);
|
event = EventManager.processLocation(event);
|
||||||
const isVideo = EventManager.isIntegration(event.location);
|
const isVideo = EventManager.isIntegration(event.location);
|
||||||
|
|
||||||
// First, create all calendar events. If this is a video event, don't send a mail right here.
|
// First, create all calendar events. If this is a video event, don't send a mail right here.
|
||||||
const results: Array<EventResult> = await this.createAllCalendarEvents(event, isVideo);
|
const results: Array<EventResult> = await this.createAllCalendarEvents(event, isVideo, maybeUid);
|
||||||
|
|
||||||
// If and only if event type is a video meeting, create a video meeting as well.
|
// If and only if event type is a video meeting, create a video meeting as well.
|
||||||
if (isVideo) {
|
if (isVideo) {
|
||||||
results.push(await this.createVideoEvent(event));
|
results.push(await this.createVideoEvent(event, maybeUid));
|
||||||
}
|
}
|
||||||
|
|
||||||
const referencesToCreate: Array<PartialReference> = results.map((result) => {
|
const referencesToCreate: Array<PartialReference> = results.map((result) => {
|
||||||
|
@ -151,13 +153,20 @@ export default class EventManager {
|
||||||
* a video meeting because then the mail containing the video credentials will be
|
* a video meeting because then the mail containing the video credentials will be
|
||||||
* more important than the mails created for these bare calendar events.
|
* more important than the mails created for these bare calendar events.
|
||||||
*
|
*
|
||||||
|
* When the optional uid is set, it will be used instead of the auto generated uid.
|
||||||
|
*
|
||||||
* @param event
|
* @param event
|
||||||
* @param noMail
|
* @param noMail
|
||||||
|
* @param maybeUid
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
private createAllCalendarEvents(event: CalendarEvent, noMail: boolean): Promise<Array<EventResult>> {
|
private createAllCalendarEvents(
|
||||||
|
event: CalendarEvent,
|
||||||
|
noMail: boolean,
|
||||||
|
maybeUid: string = null
|
||||||
|
): Promise<Array<EventResult>> {
|
||||||
return async.mapLimit(this.calendarCredentials, 5, async (credential: Credential) => {
|
return async.mapLimit(this.calendarCredentials, 5, async (credential: Credential) => {
|
||||||
return createEvent(credential, event, noMail);
|
return createEvent(credential, event, noMail, maybeUid);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -175,14 +184,17 @@ export default class EventManager {
|
||||||
/**
|
/**
|
||||||
* Creates a video event entry for the selected integration location.
|
* Creates a video event entry for the selected integration location.
|
||||||
*
|
*
|
||||||
|
* When optional uid is set, it will be used instead of the auto generated uid.
|
||||||
|
*
|
||||||
* @param event
|
* @param event
|
||||||
|
* @param maybeUid
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
private createVideoEvent(event: CalendarEvent): Promise<EventResult> {
|
private createVideoEvent(event: CalendarEvent, maybeUid: string = null): Promise<EventResult> {
|
||||||
const credential = this.getVideoCredential(event);
|
const credential = this.getVideoCredential(event);
|
||||||
|
|
||||||
if (credential) {
|
if (credential) {
|
||||||
return createMeeting(credential, event);
|
return createMeeting(credential, event, maybeUid);
|
||||||
} else {
|
} else {
|
||||||
return Promise.reject("No suitable credentials given for the requested integration name.");
|
return Promise.reject("No suitable credentials given for the requested integration name.");
|
||||||
}
|
}
|
||||||
|
|
|
@ -201,8 +201,12 @@ const getBusyVideoTimes = (withCredentials) =>
|
||||||
results.reduce((acc, availability) => acc.concat(availability), [])
|
results.reduce((acc, availability) => acc.concat(availability), [])
|
||||||
);
|
);
|
||||||
|
|
||||||
const createMeeting = async (credential, calEvent: CalendarEvent): Promise<EventResult> => {
|
const createMeeting = async (
|
||||||
const uid: string = translator.fromUUID(uuidv5(JSON.stringify(calEvent), uuidv5.URL));
|
credential,
|
||||||
|
calEvent: CalendarEvent,
|
||||||
|
maybeUid: string = null
|
||||||
|
): Promise<EventResult> => {
|
||||||
|
const uid: string = maybeUid ?? translator.fromUUID(uuidv5(JSON.stringify(calEvent), uuidv5.URL));
|
||||||
|
|
||||||
if (!credential) {
|
if (!credential) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
|
|
Loading…
Reference in a new issue