summaryrefslogtreecommitdiffstats
path: root/resources
diff options
context:
space:
mode:
authorNicolas Werner <nicolas.werner@hotmail.de>2019-10-06 00:27:18 +0200
committerNicolas Werner <nicolas.werner@hotmail.de>2019-11-23 20:06:15 +0100
commit8a511a7862b9b6389a079afb61c9cf36c9585827 (patch)
tree02bde6e3f665f9e9c21c736daad3ea7ed4030648 /resources
parentea98d7b2aed5d5085d0ce1833568ec93ff813b0f (diff)
Add progress bar to audio messages
Diffstat (limited to 'resources')
-rw-r--r--resources/qml/delegates/AudioMessage.qml178
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
}
}
}