diff options
author | Nicolas Werner <nicolas.werner@hotmail.de> | 2019-10-06 00:27:18 +0200 |
---|---|---|
committer | Nicolas Werner <nicolas.werner@hotmail.de> | 2019-11-23 20:06:15 +0100 |
commit | 8a511a7862b9b6389a079afb61c9cf36c9585827 (patch) | |
tree | 02bde6e3f665f9e9c21c736daad3ea7ed4030648 /resources | |
parent | Add simple audio message widget (diff) | |
download | nheko-8a511a7862b9b6389a079afb61c9cf36c9585827.tar.xz |
Add progress bar to audio messages
Diffstat (limited to 'resources')
-rw-r--r-- | resources/qml/delegates/AudioMessage.qml | 178 |
1 files changed, 110 insertions, 68 deletions
diff --git a/resources/qml/delegates/AudioMessage.qml b/resources/qml/delegates/AudioMessage.qml index f36d22b9..f4fa8f54 100644 --- a/resources/qml/delegates/AudioMessage.qml +++ b/resources/qml/delegates/AudioMessage.qml @@ -1,96 +1,138 @@ import QtQuick 2.6 import QtQuick.Layouts 1.6 -import QtMultimedia 5.12 +import QtQuick.Controls 2.5 +import QtMultimedia 5.6 Rectangle { radius: 10 color: colors.dark - height: row.height + 24 + height: content.height + 24 width: parent.width - RowLayout { - id: row - - anchors.centerIn: parent + ColumnLayout { + id: content width: parent.width - 24 + anchors.centerIn: parent + + RowLayout { + Text { + id: positionText + text: "--:--:--" + color: colors.text + } + Slider { + Layout.fillWidth: true + id: progress + value: media.position + from: 0 + to: media.duration + + onMoved: media.seek(value) + //indeterminate: true + function updatePositionTexts() { + function formatTime(date) { + var hh = date.getUTCHours(); + var mm = date.getUTCMinutes(); + var ss = date.getSeconds(); + if (hh < 10) {hh = "0"+hh;} + if (mm < 10) {mm = "0"+mm;} + if (ss < 10) {ss = "0"+ss;} + return hh+":"+mm+":"+ss; + } + positionText.text = formatTime(new Date(media.position)) + durationText.text = formatTime(new Date(media.duration)) + } + onValueChanged: updatePositionTexts() + } + Text { + id: durationText + text: "--:--:--" + color: colors.text + } + } - spacing: 15 + RowLayout { + width: parent.width - Rectangle { - id: button - color: colors.light - radius: 22 - height: 44 - width: 44 - Image { - id: img - anchors.centerIn: parent + spacing: 15 - source: "qrc:/icons/icons/ui/arrow-pointing-down.png" - fillMode: Image.Pad + Rectangle { + id: button + color: colors.light + radius: 22 + height: 44 + width: 44 + Image { + id: img + anchors.centerIn: parent - } - MouseArea { - anchors.fill: parent - onClicked: { - switch (button.state) { - case "": timelineManager.cacheMedia(eventData.url, eventData.mimetype); break; - case "stopped": - audio.play(); console.log("play"); + source: "qrc:/icons/icons/ui/arrow-pointing-down.png" + fillMode: Image.Pad + + } + MouseArea { + anchors.fill: parent + onClicked: { + switch (button.state) { + case "": timelineManager.cacheMedia(eventData.url, eventData.mimetype); break; + case "stopped": + media.play(); console.log("play"); button.state = "playing" break - case "playing": - audio.pause(); console.log("pause"); + case "playing": + media.pause(); console.log("pause"); button.state = "stopped" break + } } + cursorShape: Qt.PointingHandCursor + } + MediaPlayer { + id: media + onError: console.log(errorString) + onStatusChanged: if(status == MediaPlayer.Loaded) progress.updatePositionTexts() } - cursorShape: Qt.PointingHandCursor - } - MediaPlayer { - id: audio - onError: console.log(errorString) - } - Connections { - target: timelineManager - onMediaCached: { - if (mxcUrl == eventData.url) { - audio.source = "file://" + cacheUrl - button.state = "stopped" - console.log("media loaded: " + mxcUrl + " at " + cacheUrl) + Connections { + target: timelineManager + onMediaCached: { + if (mxcUrl == eventData.url) { + media.source = "file://" + cacheUrl + button.state = "stopped" + console.log("media loaded: " + mxcUrl + " at " + cacheUrl) + } + console.log("media cached: " + mxcUrl + " at " + cacheUrl) } - console.log("media cached: " + mxcUrl + " at " + cacheUrl) } + + states: [ + State { + name: "stopped" + PropertyChanges { target: img; source: "qrc:/icons/icons/ui/play-sign.png" } + }, + State { + name: "playing" + PropertyChanges { target: img; source: "qrc:/icons/icons/ui/pause-symbol.png" } + } + ] } + ColumnLayout { + id: col - states: [ - State { - name: "stopped" - PropertyChanges { target: img; source: "qrc:/icons/icons/ui/play-sign.png" } - }, - State { - name: "playing" - PropertyChanges { target: img; source: "qrc:/icons/icons/ui/pause-symbol.png" } + Text { + Layout.fillWidth: true + text: eventData.body + textFormat: Text.PlainText + elide: Text.ElideRight + color: colors.text + } + Text { + Layout.fillWidth: true + text: eventData.filesize + textFormat: Text.PlainText + elide: Text.ElideRight + color: colors.text } - ] - } - ColumnLayout { - id: col - - Text { - Layout.fillWidth: true - text: eventData.body - textFormat: Text.PlainText - elide: Text.ElideRight - color: colors.text - } - Text { - Layout.fillWidth: true - text: eventData.filesize - textFormat: Text.PlainText - elide: Text.ElideRight - color: colors.text } } } |