/** * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ import { getClient } from '../dav/client.js' import logger from './logger.js' import { parseXML } from 'webdav' import { slotsToVavailability, vavailabilityToSlots, } from '@nextcloud/calendar-availability-vue' /** * */ export function getEmptySlots() { return { MO: [], TU: [], WE: [], TH: [], FR: [], SA: [], SU: [], } } /** * */ export async function findScheduleInboxAvailability() { const client = getClient('calendars') const response = await client.customRequest('inbox', { method: 'PROPFIND', data: ` `, }) const xml = await parseXML(await response.text()) if (!xml) { return undefined } const availability = xml?.multistatus?.response[0]?.propstat?.prop['calendar-availability'] if (!availability) { return undefined } return vavailabilityToSlots(availability) } /** * @param {any} slots - * @param {any} timezoneId - */ export async function saveScheduleInboxAvailability(slots, timezoneId) { const all = [...Object.keys(slots).flatMap(dayId => slots[dayId].map(slot => ({ ...slot, day: dayId, })))] const vavailability = slotsToVavailability(all, timezoneId) logger.debug('New availability ical created', { vavailability, }) const client = getClient('calendars') await client.customRequest('inbox', { method: 'PROPPATCH', data: ` ${vavailability} `, }) }