From d8ed0ffab5a499ecb7c26f8b6ac82d2d961c89ee Mon Sep 17 00:00:00 2001 From: Christoph Wurst Date: Tue, 2 Jan 2024 16:36:47 +0100 Subject: [PATCH] fix(attachments): Convert FileList to array Firefox does not have FileList.forEach Signed-off-by: Christoph Wurst --- .../Editor/Attachments/AttachmentsList.vue | 31 +++++++++++-------- src/services/attachmentService.js | 3 +- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/components/Editor/Attachments/AttachmentsList.vue b/src/components/Editor/Attachments/AttachmentsList.vue index 2220c74c11..97e6344b15 100644 --- a/src/components/Editor/Attachments/AttachmentsList.vue +++ b/src/components/Editor/Attachments/AttachmentsList.vue @@ -77,6 +77,7 @@ import Plus from 'vue-material-design-icons/Plus.vue' import { generateUrl } from '@nextcloud/router' import { getFilePickerBuilder, showError } from '@nextcloud/dialogs' +import logger from '../../../utils/logger.js' import { uploadLocalAttachment, getFileInfo, @@ -172,20 +173,24 @@ export default { await createFolder(this.attachmentsFolder, this.currentUser.userId) this.folderCreated = true } - const attachments = await uploadLocalAttachment(this.attachmentsFolder, e, this.currentUser.dav, this.attachments) - // TODO do not share file, move to PHP - attachments.map(async attachment => { - const data = await getFileInfo(`${this.attachmentsFolder}/${attachment.path}`, this.currentUser.dav) - const davRes = await parseXML(data) - const davRespObj = davRes?.multistatus?.response[0]?.propstat?.prop - davRespObj.fileName = attachment.path - davRespObj.url = generateUrl(`/f/${davRespObj.fileid}`) - davRespObj.value = davRespObj.url - this.addAttachmentWithProperty(this.calendarObjectInstance, davRespObj) - }) - - e.target.value = '' + try { + const attachments = await uploadLocalAttachment(this.attachmentsFolder, Array.from(e.target.files), this.currentUser.dav, this.attachments) + // TODO do not share file, move to PHP + attachments.map(async attachment => { + const data = await getFileInfo(`${this.attachmentsFolder}/${attachment.path}`, this.currentUser.dav) + const davRes = await parseXML(data) + const davRespObj = davRes?.multistatus?.response[0]?.propstat?.prop + davRespObj.fileName = attachment.path + davRespObj.url = generateUrl(`/f/${davRespObj.fileid}`) + davRespObj.value = davRespObj.url + this.addAttachmentWithProperty(this.calendarObjectInstance, davRespObj) + }) + e.target.value = '' + } catch (error) { + logger.error('Could not upload attachment(s)', { error }) + showError(t('calendar', 'Could not upload attachment(s)')) + } }, getIcon(mime) { return OC.MimeType.getIconUrl(mime) diff --git a/src/services/attachmentService.js b/src/services/attachmentService.js index 8868cc678a..d53525d8e5 100644 --- a/src/services/attachmentService.js +++ b/src/services/attachmentService.js @@ -97,8 +97,7 @@ const createFolder = async function(folderName, userId) { }) } -const uploadLocalAttachment = async function(folder, event, dav, componentAttachments) { - const files = event.target.files +const uploadLocalAttachment = async function(folder, files, dav, componentAttachments) { const attachments = [] const promises = []