Working audio bubble.

Also, fixes #2.
This commit is contained in:
Black Hat 2018-08-17 15:58:08 +08:00
parent 055ef7e8c3
commit 6e79bf6495
6 changed files with 52 additions and 27 deletions

View File

@ -1,4 +1,4 @@
QT += quick widgets
QT += quick widgets multimedia
CONFIG += c++14
CONFIG += object_parallel_to_source
CONFIG += qtquickcompiler

View File

@ -1,19 +1,54 @@
import QtQuick 2.9
import QtQuick.Controls 2.2
import QtMultimedia 5.8
import QtQuick.Controls.Material 2.2
import QtMultimedia 5.9
import Qt.labs.platform 1.0
AvatarContainer {
Button {
id: downloadButton
readonly property var downloadAndOpen: downloadable.downloadAndOpen
readonly property var saveFileAs: downloadable.saveFileAs
text: content.body
highlighted: !sentByMe
flat: true
property bool playOnFinished: false
onClicked: downloadable.downloadAndOpen()
id: messageRow
Audio {
audioRole: Audio.VoiceCommunicationRole
Audio {
id: audioPlayer
source: progressInfo.localPath
}
DownloadableContent {
id: downloadable
width: downloadDelegate.width
height: downloadDelegate.height
TextDelegate {
id: downloadDelegate
maximumWidth: messageListView.width
highlighted: !sentByMe
timeLabelVisible: false
authorLabelVisible: messageRow.avatarVisible
displayText: content.info.duration / 1000 + '"'
MouseArea {
anchors.fill: parent
propagateComposedEvents: true
onClicked: {
if (downloadable.downloaded)
audioPlayer.play()
else
{
playOnFinished = true
currentRoom.downloadFile(eventId, StandardPaths.writableLocation(StandardPaths.CacheLocation) + "/" + eventId.replace(":", "_") + ".tmp")
}
}
}
}
onDownloadedChanged: downloaded && playOnFinished ? audioPlayer.play() : {}
}
}

View File

@ -6,6 +6,8 @@ AvatarContainer {
readonly property var downloadAndOpen: downloadable.downloadAndOpen
readonly property var saveFileAs: downloadable.saveFileAs
id: messageRow
DownloadableContent {
id: downloadable

View File

@ -42,8 +42,9 @@ Item {
return "MessageBubble.qml"
case "image":
return "ImageBubble.qml"
case "video":
case "audio":
return "AudioBubble.qml"
case "video":
case "file":
return "FileBubble.qml"
}

View File

@ -103,22 +103,7 @@ Item {
}
sorters: [
ExpressionSorter {
expression: {
var leftCategory = modelLeft.category
var rightCategory = modelRight.category
if (leftCategory === 1) return true
if (rightCategory === 1) return false
if (leftCategory === 2) return true
if (rightCategory === 2) return false
if (leftCategory === 5) return false
if (rightCategory === 5) return true
if (leftCategory === 4) return false
if (rightCategory === 4) return true
return true
}
},
RoleSorter { roleName: "category" },
StringSorter { roleName: "name" }
]
}

View File

@ -519,6 +519,8 @@ QVariant MessageEventModel::data(const QModelIndex& idx, int role) const {
return "notice";
case MessageEventType::Image:
return "image";
case MessageEventType::Audio:
return "audio";
default:
return e->hasFileContent() ? "file" : "message";
}