diff --git a/TODO.md b/TODO.md index 1dbd60c9..e5746232 100644 --- a/TODO.md +++ b/TODO.md @@ -1,11 +1,9 @@ - Media - - Downloading - - Bottom/top bar - Verify things work with chat.privacytools.io (subdomain weirdness) - - Show real progression for mxc thumbnail loadings, uploads and downloads - - Confirmation box after picking file to upload - - Handle upload errors, file too big, etc - Allow multiple file selection + - Confirmation box after picking file to upload + - Handle upload errors: non existent path, path is a dir, file too big, etc + - Show real progression for mxc thumbnail loadings, uploads and downloads - Support m.file thumbnails - Generate video thumbnails @@ -16,6 +14,7 @@ - Video: missing buttons and small size problems - Audio: online playback is buggy, must download+play file - EventLink + - Downloading (right click on media > save as...) - RoomMessageNotice diff --git a/src/qml/Dialogs/HFileDialogOpener.qml b/src/qml/Dialogs/HFileDialogOpener.qml index 74d22adb..e5d3e914 100644 --- a/src/qml/Dialogs/HFileDialogOpener.qml +++ b/src/qml/Dialogs/HFileDialogOpener.qml @@ -6,7 +6,8 @@ Item { anchors.fill: fill ? parent : undefined - signal filePicked() + signal filePicked(string file) + signal filesPicked(var files) signal cancelled() @@ -15,6 +16,8 @@ Item { property alias dialog: fileDialog property string selectedFile: "" property string file: "" + property var selectedFiles: [] + property var files: [] property string selectSubject: dialog.fileMode === FileDialog.SaveFile ? qsTr("file") : qsTr("open") @@ -59,17 +62,28 @@ Item { modality: Qt.NonModal onVisibleChanged: if (visible) { - opener.selectedFile = Qt.binding(() => Qt.resolvedUrl(currentFile)) - opener.file = Qt.binding(() => Qt.resolvedUrl(file)) + opener.selectedFile = Qt.binding(() => Qt.resolvedUrl(currentFile)) + opener.file = Qt.binding(() => Qt.resolvedUrl(file)) + opener.files = Qt.binding(() => Qt.resolvedUrl(files)) + opener.selectedFiles = + Qt.binding(() => Qt.resolvedUrl(currentFiles)) } + onAccepted: { - opener.selectedFile = currentFile - opener.file = file + opener.selectedFile = currentFile + opener.selectedFiles = currentFiles + opener.file = file + opener.files = files + opener.filePicked(file) + opener.filesPicked(files) } + onRejected: { - selectedFile = "" - file = "" + selectedFile = "" + file = "" + selectedFiles = "" + files = "" cancelled() } } diff --git a/src/qml/Dialogs/SendFilePicker.qml b/src/qml/Dialogs/SendFilePicker.qml index 1eef936b..19039061 100644 --- a/src/qml/Dialogs/SendFilePicker.qml +++ b/src/qml/Dialogs/SendFilePicker.qml @@ -1,20 +1,24 @@ import QtQuick 2.12 +import Qt.labs.platform 1.1 import "../utils.js" as Utils HFileDialogOpener { fill: false dialog.title: qsTr("Select a file to send") + dialog.fileMode: FileDialog.OpenFiles - onFilePicked: { - let path = Qt.resolvedUrl(file).replace(/^file:/, "") + onFilesPicked: { + for (let file of files) { + let path = Qt.resolvedUrl(file).replace(/^file:/, "") - Utils.sendFile(userId, roomId, path, () => { - if (destroyWhenDone) destroy() - }, - (type, args, error, traceback) => { - console.error("python:\n" + traceback) - if (destroyWhenDone) destroy() - }) + Utils.sendFile(userId, roomId, path, () => { + if (destroyWhenDone) destroy() + }, + (type, args, error, traceback) => { + console.error("python:\n" + traceback) + if (destroyWhenDone) destroy() + }) + } } onCancelled: if (destroyWhenDone) destroy()