From 351e7d42c9eece9ceaffcb64114546527725fa8a Mon Sep 17 00:00:00 2001 From: schlagmichdoch Date: Thu, 13 Feb 2025 12:52:33 +0100 Subject: [PATCH] Fix share mode by converting FileList to Array --- public/scripts/network.js | 2 +- public/scripts/ui.js | 16 +++++++++++----- public/scripts/util.js | 10 +++++----- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/public/scripts/network.js b/public/scripts/network.js index 9128442..c92befc 100644 --- a/public/scripts/network.js +++ b/public/scripts/network.js @@ -1082,7 +1082,7 @@ class PeersManager { } async _onFilesSelected(message) { - let files = await mime.addMissingMimeTypesToFiles(message.files); + let files = mime.addMissingMimeTypesToFiles(message.files); await this.peers[message.to].requestFileTransfer(files); } diff --git a/public/scripts/ui.js b/public/scripts/ui.js index e1887cb..c988db7 100644 --- a/public/scripts/ui.js +++ b/public/scripts/ui.js @@ -179,10 +179,13 @@ class PeersUI { this._onDragEnd(); - if ($$('x-peer') || !$$('x-peer').contains(e.target)) return; // dropped on peer + if ($$('x-peer') && $$('x-peer').contains(e.target)) return; // dropped on peer - const files = e.dataTransfer.files; - const text = e.dataTransfer.getData("text"); + let files = e.dataTransfer.files; + let text = e.dataTransfer.getData("text"); + + // convert FileList to Array + files = [...files]; if (files.length > 0) { Events.fire('activate-share-mode', { @@ -215,8 +218,11 @@ class PeersUI { if (this.shareMode.active || Dialog.anyDialogShown()) return; e.preventDefault() - const files = e.clipboardData.files; - const text = e.clipboardData.getData("Text"); + let files = e.clipboardData.files; + let text = e.clipboardData.getData("Text"); + + // convert FileList to Array + files = [...files]; if (files.length > 0) { Events.fire('activate-share-mode', {files: files}); diff --git a/public/scripts/util.js b/public/scripts/util.js index 7d6c54a..08a790f 100644 --- a/public/scripts/util.js +++ b/public/scripts/util.js @@ -396,20 +396,20 @@ const mime = (() => { } return { - async guessMimeByFilename(filename) { + guessMimeByFilename(filename) { const split = filename.split('.'); if (split.length === 1) { // Filename does not include suffix - return ""; + return false; } const suffix = split[split.length - 1].toLowerCase(); - return suffixToMimeMap[suffix] || ""; + return suffixToMimeMap[suffix]; }, - async addMissingMimeTypesToFiles(files) { + addMissingMimeTypesToFiles(files) { // if filetype is empty guess via suffix otherwise leave unchanged for (let i = 0; i < files.length; i++) { if (!files[i].type) { - files[i] = new File([files[i]], files[i].name, {type: await mime.guessMimeByFilename(files[i].name) || ""}); + files[i] = new File([files[i]], files[i].name, {type: mime.guessMimeByFilename(files[i].name) || ""}); } } return files;