mirror of
https://gitlab.linphone.org/BC/public/linphone-desktop.git
synced 2026-01-22 22:28:08 +00:00
Fix setting wrong duration on vocal messages. Vocal message optimization by openning the file only for playing. Read its informations from content without opening it.
133 lines
3.7 KiB
QML
133 lines
3.7 KiB
QML
import QtQuick 2.7
|
|
import QtQuick.Layouts 1.3
|
|
|
|
import Clipboard 1.0
|
|
import Common 1.0
|
|
import Linphone 1.0
|
|
|
|
import Common.Styles 1.0
|
|
import Linphone.Styles 1.0
|
|
import TextToSpeech 1.0
|
|
import Utils 1.0
|
|
import Units 1.0
|
|
import UtilsCpp 1.0
|
|
import LinphoneEnums 1.0
|
|
|
|
import ColorsList 1.0
|
|
|
|
import 'Message.js' as Logic
|
|
|
|
// =============================================================================
|
|
|
|
|
|
|
|
Loader{
|
|
id: mainItem
|
|
property ContentModel contentModel
|
|
property int maxWidth : parent.width
|
|
property int fitWidth: active ? Math.max(maxWidth - ChatAudioMessageStyle.emptySpace, ChatAudioMessageStyle.minWidth) : 0
|
|
property int fitHeight: active ? 60 : 0
|
|
|
|
property font customFont : SettingsModel.textMessageFont
|
|
property bool isOutgoing : contentModel && contentModel.chatMessageModel && (contentModel.chatMessageModel.isOutgoing || contentModel.chatMessageModel.state == LinphoneEnums.ChatMessageStateIdle);
|
|
property bool isActive: active
|
|
|
|
active: contentModel && contentModel.isVoiceRecording()
|
|
|
|
sourceComponent: Item{
|
|
id: loadedItem
|
|
property bool isPlaying : vocalPlayer.item && vocalPlayer.item.playbackState === SoundPlayer.PlayingState
|
|
onIsPlayingChanged: isPlaying ? mediaProgressBar.resume() : mediaProgressBar.stop()
|
|
|
|
width: maxWidth < 0 || maxWidth > fitWidth ? fitWidth : maxWidth
|
|
height: mainItem.fitHeight
|
|
|
|
clip: false
|
|
Loader {
|
|
id: vocalPlayer
|
|
|
|
active: false
|
|
function play(){
|
|
if(!vocalPlayer.active)
|
|
vocalPlayer.active = true
|
|
else {
|
|
if(loadedItem.isPlaying){// Pause the play
|
|
vocalPlayer.item.pause()
|
|
}else{// Play the audio
|
|
vocalPlayer.item.play()
|
|
}
|
|
}
|
|
}
|
|
sourceComponent: SoundPlayer {
|
|
source: mainItem.contentModel && mainItem.contentModel.filePath
|
|
onStopped:{
|
|
mediaProgressBar.value = 101
|
|
}
|
|
Component.onCompleted: {
|
|
play()// This will open the file and allow seeking
|
|
pause()
|
|
mediaProgressBar.value = 0
|
|
mediaProgressBar.refresh()
|
|
}
|
|
}
|
|
onStatusChanged: if (loader.status == Loader.Ready) play()
|
|
}
|
|
RowLayout{
|
|
id: lineLayout
|
|
anchors.fill: parent
|
|
spacing: 5
|
|
ActionButton{
|
|
id: playButton
|
|
Layout.preferredHeight: iconSize
|
|
Layout.preferredWidth: iconSize
|
|
Layout.rightMargin: 5
|
|
Layout.leftMargin: 15
|
|
Layout.alignment: Qt.AlignVCenter
|
|
isCustom: true
|
|
backgroundRadius: width
|
|
colorSet: (loadedItem.isPlaying ? ChatAudioMessageStyle.pauseAction
|
|
: ChatAudioMessageStyle.playAction)
|
|
onClicked:{
|
|
vocalPlayer.play()
|
|
}
|
|
}
|
|
Item{
|
|
Layout.fillHeight: true
|
|
Layout.fillWidth: true
|
|
Layout.alignment: Qt.AlignVCenter
|
|
Layout.rightMargin: 10
|
|
Layout.topMargin: 10
|
|
Layout.bottomMargin: 10
|
|
MediaProgressBar{
|
|
id: mediaProgressBar
|
|
anchors.fill: parent
|
|
progressDuration: vocalPlayer.item ? vocalPlayer.item.duration : contentModel.getFileDuration()
|
|
progressPosition: 0
|
|
value: 0
|
|
stopAtEnd: true
|
|
resetAtEnd: false
|
|
backgroundColor: ChatAudioMessageStyle.backgroundColor
|
|
colorSet: ChatAudioMessageStyle.progressionWave
|
|
durationTextColor: mainItem.isOutgoing ? ChatStyle.entry.message.outgoing.text.color : ChatStyle.entry.message.incoming.text.color
|
|
function refresh(){
|
|
if( vocalPlayer.item){
|
|
progressPosition = vocalPlayer.item.getPosition()
|
|
value = 100 * ( progressPosition / vocalPlayer.item.duration)
|
|
}
|
|
}
|
|
onEndReached:{
|
|
if(vocalPlayer.item)
|
|
vocalPlayer.item.stop()
|
|
}
|
|
onRefreshPositionRequested: refresh()
|
|
onSeekRequested: if( vocalPlayer.item){
|
|
vocalPlayer.item.seek(ms)
|
|
progressPosition = vocalPlayer.item.getPosition()
|
|
value = 100 * (progressPosition / vocalPlayer.item.duration)
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|