mirror of
https://github.com/suitenumerique/meet.git
synced 2026-08-28 11:16:58 +00:00
🩹(addon) skip link generation when one already exists in the event
Detect whether a meeting link is already present in the calendar event item or its body, and prevent generating a new link if one is found. Detection is based on the presence of the app URL in the text. This is imperfect but covers the most naive scenarios.
This commit is contained in:
committed by
aleb_the_flash
parent
52bad6faaf
commit
321cb99f82
@@ -1,4 +1,5 @@
|
|||||||
/* global Office */
|
/* global Office */
|
||||||
|
const { APP_NAME } = require("../common/index");
|
||||||
const { createRoom, initSession } = require("../common/api");
|
const { createRoom, initSession } = require("../common/api");
|
||||||
const { startPolling } = require("../common/polling");
|
const { startPolling } = require("../common/polling");
|
||||||
const { saveSession, loadSession } = require("../common/session");
|
const { saveSession, loadSession } = require("../common/session");
|
||||||
@@ -6,6 +7,7 @@ const { openTransitDialog } = require("../common/transitDialog");
|
|||||||
const { buildMeetingMessage } = require("../common/messageBuilder");
|
const { buildMeetingMessage } = require("../common/messageBuilder");
|
||||||
const { applyAppName } = require("../common/helpers");
|
const { applyAppName } = require("../common/helpers");
|
||||||
const { initI18n, t } = require("../common/i18n");
|
const { initI18n, t } = require("../common/i18n");
|
||||||
|
const { isMeetingAlreadyAdded } = require("../common/meetingDetector");
|
||||||
|
|
||||||
Office.onReady(async function (info) {
|
Office.onReady(async function (info) {
|
||||||
|
|
||||||
@@ -26,6 +28,24 @@ function notify(message) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function insertMeetingLink(event, session) {
|
function insertMeetingLink(event, session) {
|
||||||
|
const item = Office.context.mailbox.item;
|
||||||
|
|
||||||
|
isMeetingAlreadyAdded(item)
|
||||||
|
.then((alreadyAdded) => {
|
||||||
|
if (alreadyAdded) {
|
||||||
|
notify(t("meeting.already_added", { app_name: APP_NAME }));
|
||||||
|
event.completed();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
return _doInsertMeetingLink(event, session);
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
notify(t("meeting.error.details", { message: err.message }));
|
||||||
|
event.completed();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function _doInsertMeetingLink(event, session) {
|
||||||
createRoom(session)
|
createRoom(session)
|
||||||
.then((data) => {
|
.then((data) => {
|
||||||
const isWeb = Office.context.diagnostics.platform === "OfficeOnline";
|
const isWeb = Office.context.diagnostics.platform === "OfficeOnline";
|
||||||
@@ -36,7 +56,7 @@ function insertMeetingLink(event, session) {
|
|||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
item.body.setSelectedDataAsync(text, { coercionType }, (setResult) => {
|
item.body.setSelectedDataAsync(text, { coercionType }, (setResult) => {
|
||||||
if (setResult.status !== Office.AsyncResultStatus.Succeeded) {
|
if (setResult.status !== Office.AsyncResultStatus.Succeeded) {
|
||||||
notify(t('meeting.error.details', { message: setResult.error.message }));
|
notify(t("meeting.error.details", { message: setResult.error.message }));
|
||||||
resolve();
|
resolve();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,45 @@
|
|||||||
|
const { BASE_URL } = require("./index");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a promise that resolves to true if a meeting link is already present
|
||||||
|
*/
|
||||||
|
function isMeetingAlreadyAdded(item) {
|
||||||
|
return Promise.all([_checkBody(item), _checkLocation(item)]).then(
|
||||||
|
([inBody, inLocation]) => inBody || inLocation
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function _checkBody(item) {
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
item.body.getAsync(Office.CoercionType.Text, (result) => {
|
||||||
|
if (result.status !== Office.AsyncResultStatus.Succeeded) {
|
||||||
|
resolve(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
resolve(_containsMeetingUrl(result.value));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function _checkLocation(item) {
|
||||||
|
// Location only exists on appointments
|
||||||
|
if (item.itemType !== Office.MailboxEnums.ItemType.Appointment) {
|
||||||
|
return Promise.resolve(false);
|
||||||
|
}
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
item.location.getAsync((result) => {
|
||||||
|
if (result.status !== Office.AsyncResultStatus.Succeeded) {
|
||||||
|
resolve(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
resolve(_containsMeetingUrl(result.value));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function _containsMeetingUrl(text) {
|
||||||
|
if (!text) return false;
|
||||||
|
return text.includes(BASE_URL);
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = { isMeetingAlreadyAdded };
|
||||||
@@ -16,6 +16,7 @@
|
|||||||
"disconnect": "Abmelden"
|
"disconnect": "Abmelden"
|
||||||
},
|
},
|
||||||
"meeting": {
|
"meeting": {
|
||||||
|
"already_added": "Es wurde bereits ein {{app_name}}-Meeting hinzugefügt.",
|
||||||
"link_inserted": "Besprechungslink erfolgreich eingefügt",
|
"link_inserted": "Besprechungslink erfolgreich eingefügt",
|
||||||
"generating": "Wird erstellt...",
|
"generating": "Wird erstellt...",
|
||||||
"add_meeting": "{{app_name}}-Besprechung hinzufügen",
|
"add_meeting": "{{app_name}}-Besprechung hinzufügen",
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
"disconnect": "Sign out"
|
"disconnect": "Sign out"
|
||||||
},
|
},
|
||||||
"meeting": {
|
"meeting": {
|
||||||
|
"already_added": "A {{app_name}} meeting has already been added.",
|
||||||
"link_inserted": "Meeting link inserted successfully",
|
"link_inserted": "Meeting link inserted successfully",
|
||||||
"generating": "Generating...",
|
"generating": "Generating...",
|
||||||
"add_meeting": "Add a {{app_name}} meeting",
|
"add_meeting": "Add a {{app_name}} meeting",
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
"disconnect": "Se déconnecter"
|
"disconnect": "Se déconnecter"
|
||||||
},
|
},
|
||||||
"meeting": {
|
"meeting": {
|
||||||
|
"already_added": "Une réunion {{app_name}} a déjà été ajoutée.",
|
||||||
"link_inserted": "Lien de réunion inséré avec succès",
|
"link_inserted": "Lien de réunion inséré avec succès",
|
||||||
"generating": "Génération...",
|
"generating": "Génération...",
|
||||||
"add_meeting": "Ajouter une réunion {{app_name}}",
|
"add_meeting": "Ajouter une réunion {{app_name}}",
|
||||||
|
|||||||
Reference in New Issue
Block a user