Fix wrong file name with navigator.share

This commit is contained in:
schlagmichdoch 2024-08-17 21:24:52 +02:00
parent 1d5f2e8023
commit 490bad5734
2 changed files with 15 additions and 11 deletions

View file

@ -723,7 +723,7 @@ class Peer {
for (let i = 0; i < files.length; i++) { for (let i = 0; i < files.length; i++) {
header.push({ header.push({
displayName: files[i].name, name: files[i].name,
mime: files[i].type, mime: files[i].type,
size: files[i].size size: files[i].size
}); });
@ -806,7 +806,7 @@ class Peer {
this._sendMessage({ this._sendMessage({
type: 'transfer-header', type: 'transfer-header',
size: file.size, size: file.size,
displayName: file.name, name: file.name,
mime: file.type mime: file.type
}); });
} }
@ -970,7 +970,7 @@ class Peer {
? new FileDigesterViaWorker( ? new FileDigesterViaWorker(
{ {
size: header.size, size: header.size,
name: header.displayName, name: header.name,
mime: header.mime mime: header.mime
}, },
file => this._fileReceived(file), file => this._fileReceived(file),
@ -979,7 +979,7 @@ class Peer {
: new FileDigesterViaBuffer( : new FileDigesterViaBuffer(
{ {
size: header.size, size: header.size,
name: header.displayName, name: header.name,
mime: header.mime mime: header.mime
}, },
file => this._fileReceived(file), file => this._fileReceived(file),
@ -1054,7 +1054,7 @@ class Peer {
const sameSize = header.size === acceptedHeader.size; const sameSize = header.size === acceptedHeader.size;
const sameType = header.mime === acceptedHeader.mime; const sameType = header.mime === acceptedHeader.mime;
const sameName = header.displayName === acceptedHeader.displayName; const sameName = header.name === acceptedHeader.name;
return sameSize && sameType && sameName; 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`); Logger.log(`File received.\n\nSize: ${size} MB\tDuration: ${duration} s\tSpeed: ${speed} MB/s`);
// include for compatibility with 'Snapdrop & PairDrop for Android' app // 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); this._filesReceived.push(file);
@ -2090,7 +2090,6 @@ class FileDigesterViaBuffer extends FileDigester {
lastModified: new Date().getTime() lastModified: new Date().getTime()
} }
); );
file.displayName = this._name
this._fileCompleteCallback(file); this._fileCompleteCallback(file);
} }
@ -2129,7 +2128,7 @@ class FileDigesterViaWorker extends FileDigester {
.then(file => { .then(file => {
// Save id and displayName to file to be able to truncate file later // Save id and displayName to file to be able to truncate file later
file.id = file.name; file.id = file.name;
file.displayName = this._name; file.originalName = this._name;
this._fileCompleteCallback(file); this._fileCompleteCallback(file);
}) })

View file

@ -1060,7 +1060,7 @@ class ReceiveDialog extends Dialog {
: Localization.getTranslation("dialogs.file-other-description-file-plural", null, {count: files.length - 1}); : 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 fileNameSplit = fileName.split('.');
const fileExtension = '.' + fileNameSplit[fileNameSplit.length - 1]; const fileExtension = '.' + fileNameSplit[fileNameSplit.length - 1];
const fileStem = fileName.substring(0, fileName.length - fileExtension.length); const fileStem = fileName.substring(0, fileName.length - fileExtension.length);
@ -1236,8 +1236,13 @@ class ReceiveFileDialog extends ReceiveDialog {
} }
async _setShareButton() { 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 = _ => { this.$shareBtn.onclick = _ => {
navigator.share({files: this._data.files}) navigator.share({files: filesWithOriginalNames})
.catch(async err => { .catch(async err => {
Logger.error(err); Logger.error(err);
@ -1355,7 +1360,7 @@ class ReceiveFileDialog extends ReceiveDialog {
_downloadFiles(files) { _downloadFiles(files) {
let tmpBtn = document.createElement("a"); let tmpBtn = document.createElement("a");
for (let i = 0; i < files.length; i++) { 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.href = URL.createObjectURL(files[i]);
tmpBtn.click(); tmpBtn.click();
} }