Fix share mode by converting FileList to Array

This commit is contained in:
schlagmichdoch 2025-02-13 12:52:33 +01:00
parent ec520248b8
commit 351e7d42c9
3 changed files with 17 additions and 11 deletions

View file

@ -1082,7 +1082,7 @@ class PeersManager {
} }
async _onFilesSelected(message) { async _onFilesSelected(message) {
let files = await mime.addMissingMimeTypesToFiles(message.files); let files = mime.addMissingMimeTypesToFiles(message.files);
await this.peers[message.to].requestFileTransfer(files); await this.peers[message.to].requestFileTransfer(files);
} }

View file

@ -179,10 +179,13 @@ class PeersUI {
this._onDragEnd(); 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; let files = e.dataTransfer.files;
const text = e.dataTransfer.getData("text"); let text = e.dataTransfer.getData("text");
// convert FileList to Array
files = [...files];
if (files.length > 0) { if (files.length > 0) {
Events.fire('activate-share-mode', { Events.fire('activate-share-mode', {
@ -215,8 +218,11 @@ class PeersUI {
if (this.shareMode.active || Dialog.anyDialogShown()) return; if (this.shareMode.active || Dialog.anyDialogShown()) return;
e.preventDefault() e.preventDefault()
const files = e.clipboardData.files; let files = e.clipboardData.files;
const text = e.clipboardData.getData("Text"); let text = e.clipboardData.getData("Text");
// convert FileList to Array
files = [...files];
if (files.length > 0) { if (files.length > 0) {
Events.fire('activate-share-mode', {files: files}); Events.fire('activate-share-mode', {files: files});

View file

@ -396,20 +396,20 @@ const mime = (() => {
} }
return { return {
async guessMimeByFilename(filename) { guessMimeByFilename(filename) {
const split = filename.split('.'); const split = filename.split('.');
if (split.length === 1) { if (split.length === 1) {
// Filename does not include suffix // Filename does not include suffix
return ""; return false;
} }
const suffix = split[split.length - 1].toLowerCase(); 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 // if filetype is empty guess via suffix otherwise leave unchanged
for (let i = 0; i < files.length; i++) { for (let i = 0; i < files.length; i++) {
if (!files[i].type) { 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; return files;