summary refs log tree commit diff
path: root/resources/qml/ActiveCallBar.qml
blob: 8d837c29f7de2554399224e55c3bcfa1a62eded3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import QtQuick 2.9
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.2

import im.nheko 1.0

Rectangle {
	id: activeCallBar
	visible: timelineManager.callState != WebRTCState.DISCONNECTED
	color: "#2ECC71"
	implicitHeight: rowLayout.height + 8

	RowLayout {
		id: rowLayout
		anchors.left: parent.left
		anchors.right: parent.right
		anchors.verticalCenter: parent.verticalCenter
		anchors.leftMargin: 8

		Avatar {
			width: avatarSize
			height: avatarSize

			url: timelineManager.callPartyAvatarUrl.replace("mxc://", "image://MxcImage/")
			displayName: timelineManager.callPartyName
		}

		Label {
			font.pointSize: fontMetrics.font.pointSize * 1.1
			text: "  " + timelineManager.callPartyName + " "
		}

		Image {
			Layout.preferredWidth: 24
			Layout.preferredHeight: 24
			source: "qrc:/icons/icons/ui/place-call.png"
		}

		Label {
			id: callStateLabel
			font.pointSize: fontMetrics.font.pointSize * 1.1
		}

		Connections {
			target: timelineManager
			function onCallStateChanged(state) {
				switch (state) {
					case WebRTCState.INITIATING:
						callStateLabel.text = qsTr("Initiating...")
						break;
					case WebRTCState.OFFERSENT:
						callStateLabel.text = qsTr("Calling...")
						break;
					case WebRTCState.CONNECTING:
						callStateLabel.text = qsTr("Connecting...")
						break;
					case WebRTCState.CONNECTED:
						callStateLabel.text = "00:00"
						var d = new Date()
						callTimer.startTime = Math.floor(d.getTime() / 1000)
						break;
					case WebRTCState.DISCONNECTED:
						callStateLabel.text = ""
				}
			}
		}

		Timer {
			id: callTimer
			property int startTime
			interval: 1000
			running: timelineManager.callState == WebRTCState.CONNECTED
			repeat: true
			onTriggered: {
				var d = new Date()
				let seconds = Math.floor(d.getTime() / 1000 - startTime)
				let s = Math.floor(seconds % 60)
				let m = Math.floor(seconds / 60) % 60
				let h = Math.floor(seconds / 3600)
				callStateLabel.text = (h ? (pad(h) + ":") : "") + pad(m) + ":" + pad(s)
			}

			function pad(n) {
				return (n < 10) ? ("0" + n) : n
			}
		}

		Item {
			Layout.fillWidth: true
		}

		ImageButton {
			width: 24
			height: 24
			buttonTextColor: "#000000"
			image: timelineManager.isMicMuted ?
				":/icons/icons/ui/microphone-unmute.png" :
				":/icons/icons/ui/microphone-mute.png"

			hoverEnabled: true
			ToolTip.visible: hovered
			ToolTip.text: timelineManager.isMicMuted ? qsTr("Unmute Mic") : qsTr("Mute Mic")

			onClicked: timelineManager.toggleMicMute()
		}

		Item {
			implicitWidth: 16
		}
	}
}