From 490bad57346a1441135a9f7fa7a333f424ac0353 Mon Sep 17 00:00:00 2001 From: schlagmichdoch Date: Sat, 17 Aug 2024 21:24:52 +0200 Subject: [PATCH] Fix wrong file name with navigator.share --- public/scripts/network.js | 15 +++++++-------- public/scripts/ui.js | 11 ++++++++--- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/public/scripts/network.js b/public/scripts/network.js index 63daa31..45fb6e5 100644 --- a/public/scripts/network.js +++ b/public/scripts/network.js @@ -723,7 +723,7 @@ class Peer { for (let i = 0; i < files.length; i++) { header.push({ - displayName: files[i].name, + name: files[i].name, mime: files[i].type, size: files[i].size }); @@ -806,7 +806,7 @@ class Peer { this._sendMessage({ type: 'transfer-header', size: file.size, - displayName: file.name, + name: file.name, mime: file.type }); } @@ -970,7 +970,7 @@ class Peer { ? new FileDigesterViaWorker( { size: header.size, - name: header.displayName, + name: header.name, mime: header.mime }, file => this._fileReceived(file), @@ -979,7 +979,7 @@ class Peer { : new FileDigesterViaBuffer( { size: header.size, - name: header.displayName, + name: header.name, mime: header.mime }, file => this._fileReceived(file), @@ -1054,7 +1054,7 @@ class Peer { const sameSize = header.size === acceptedHeader.size; const sameType = header.mime === acceptedHeader.mime; - const sameName = header.displayName === acceptedHeader.displayName; + const sameName = header.name === acceptedHeader.name; return sameSize && sameType && sameName; } @@ -1074,7 +1074,7 @@ class Peer { Logger.log(`File received.\n\nSize: ${size} MB\tDuration: ${duration} s\tSpeed: ${speed} MB/s`); // include for compatibility with 'Snapdrop & PairDrop for Android' app - Events.fire('file-received', {name: file.displayName, size: file.size}); + Events.fire('file-received', {name: file.originalName, size: file.size}); this._filesReceived.push(file); @@ -2090,7 +2090,6 @@ class FileDigesterViaBuffer extends FileDigester { lastModified: new Date().getTime() } ); - file.displayName = this._name this._fileCompleteCallback(file); } @@ -2129,7 +2128,7 @@ class FileDigesterViaWorker extends FileDigester { .then(file => { // Save id and displayName to file to be able to truncate file later file.id = file.name; - file.displayName = this._name; + file.originalName = this._name; this._fileCompleteCallback(file); }) diff --git a/public/scripts/ui.js b/public/scripts/ui.js index 7bb5bdc..8bc12d8 100644 --- a/public/scripts/ui.js +++ b/public/scripts/ui.js @@ -1060,7 +1060,7 @@ class ReceiveDialog extends Dialog { : Localization.getTranslation("dialogs.file-other-description-file-plural", null, {count: files.length - 1}); } - const fileName = files[0].displayName; + const fileName = files[0].originalName ?? files[0].name; const fileNameSplit = fileName.split('.'); const fileExtension = '.' + fileNameSplit[fileNameSplit.length - 1]; const fileStem = fileName.substring(0, fileName.length - fileExtension.length); @@ -1236,8 +1236,13 @@ class ReceiveFileDialog extends ReceiveDialog { } async _setShareButton() { + // Add original file names + let filesWithOriginalNames = [] + for (const file of this._data.files) { + filesWithOriginalNames.push(new File([file], file.originalName, {type: file.type})) + } this.$shareBtn.onclick = _ => { - navigator.share({files: this._data.files}) + navigator.share({files: filesWithOriginalNames}) .catch(async err => { Logger.error(err); @@ -1355,7 +1360,7 @@ class ReceiveFileDialog extends ReceiveDialog { _downloadFiles(files) { let tmpBtn = document.createElement("a"); for (let i = 0; i < files.length; i++) { - tmpBtn.download = files[i].displayName; + tmpBtn.download = files[i].originalName; tmpBtn.href = URL.createObjectURL(files[i]); tmpBtn.click(); }