From 88a9827de25c3ea74285237f7c0704d289fc8f94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20Tollk=C3=BChn?= Date: Wed, 7 Oct 2026 22:06:44 +0200 Subject: [PATCH] implement button to create event in nextcloud --- assets/launch.js | 89 ++++++++++++++++++++++++++++++++++++++++++++++++ launch.html | 7 ++++ 2 files changed, 96 insertions(+) diff --git a/assets/launch.js b/assets/launch.js index 21d282e..6628049 100644 --- a/assets/launch.js +++ b/assets/launch.js @@ -357,9 +357,12 @@ const meetingStartInput = document.getElementById("meetingStart"); const meetingEndInput = document.getElementById("meetingEnd"); const meetingOrganizerInput = document.getElementById("meetingOrganizer"); const createMeetingButton = document.getElementById("createMeetingButton"); +const createNextcloudButton = document.getElementById('createNextcloudButton'); const createAdhocButton = document.getElementById("createAdhocButton"); const cancelCreateButton = document.getElementById("cancelCreateButton"); const icsSuccess = document.getElementById("icsSuccess"); +const nextcloudStatus = document.getElementById('nextcloudStatus'); +const nextcloudError = document.getElementById('nextcloudError'); const downloadIcsLink = document.getElementById("downloadIcsLink"); const adhocResult = document.getElementById("adhocResult"); const adhocLink = document.getElementById("adhocLink"); @@ -1000,6 +1003,85 @@ function showMeetingCreator() { meetingEndInput.value = formatLocal(end); } +function openNextcloudCalendarCreator() { + const meetingName = + meetingNameInput.value.trim(); + + const description = + meetingDescriptionInput.value.trim(); + + const startTime = + meetingStartInput.value; + + const endTime = + meetingEndInput.value; + + const organizer = + meetingOrganizerInput.value.trim(); + + if (!meetingName) { + alert('Please enter a meeting name.'); + meetingNameInput.focus(); + return; + } + + if (!startTime || !endTime) { + alert('Please enter start and end time.'); + return; + } + + const start = new Date(startTime); + const end = new Date(endTime); + + if (Number.isNaN(start.getTime()) || + Number.isNaN(end.getTime())) { + alert('Invalid start or end date.'); + return; + } + + if (end <= start) { + alert('End time must be after start time.'); + return; + } + + /* + * Use exactly the same room-generation logic as the + * existing ICS creation. + */ + const roomName = createRoomName(meetingName); + + const meetingUrl = + createLaunchUrl(roomName); + + const nextcloudBase = + 'https://cloud.bnvb-ingenieure.de'; + + const params = new URLSearchParams(); + + params.set('summary', meetingName); + + if (description) { + params.set('description', description); + } + + params.set('start', startTime); + params.set('end', endTime); + + if (organizer) { + params.set('organizer', organizer); + } + + params.set('location', meetingUrl); + params.set('url', meetingUrl); + + const nextcloudUrl = + nextcloudBase + + '/index.php/apps/jitsi_calendar/confirm?' + + params.toString(); + + window.location.href = nextcloudUrl; +} + function createMeeting() { const meetingName = meetingNameInput.value.trim(); const description = meetingDescriptionInput.value.trim(); @@ -1262,6 +1344,13 @@ createMeetingButton.addEventListener( createMeeting ); +if (createNextcloudButton) { + createNextcloudButton.addEventListener( + 'click', + openNextcloudCalendarCreator + ); +} + createAdhocButton.addEventListener( "click", createAdhocLink diff --git a/launch.html b/launch.html index eb9e465..b747325 100644 --- a/launch.html +++ b/launch.html @@ -289,6 +289,9 @@ + @@ -309,6 +312,10 @@ Meeting created! Download your calendar file and open it to import the meeting into your personal calendar. Download ICS File + + + +