diff --git a/src/calladapter.cpp b/src/calladapter.cpp index 0ead73b69af89e3f97b44da0f56ea3df9f4f9496..962a5a78360e3af23ff46116c4ad569ccf1932e5 100644 --- a/src/calladapter.cpp +++ b/src/calladapter.cpp @@ -308,19 +308,24 @@ CallAdapter::connectCallModel(const QString& accountId) data["h"] = participant["h"].toInt(); data["uri"] = participant["uri"]; data["active"] = participant["active"] == "true"; + data["videoMuted"] = participant["videoMuted"] == "true"; + data["audioMuted"] = participant["audioMuted"] == "true"; auto bestName = participant["uri"]; data["isLocal"] = false; auto& accInfo = LRCInstance::accountModel().getAccountInfo(accountId_); if (bestName == accInfo.profileInfo.uri) { bestName = tr("me"); data["isLocal"] = true; + if (participant["videoMuted"] == "true") + data["avatar"] = accInfo.profileInfo.avatar; } else { try { auto& contact = LRCInstance::getCurrentAccountInfo() .contactModel->getContact(participant["uri"]); bestName = Utils::bestNameForContact(contact); - } catch (...) { - } + if (participant["videoMuted"] == "true") + data["avatar"] = contact.profileInfo.avatar; + } catch (...) {} } data["bestName"] = bestName; map.push_back(QVariant(data)); diff --git a/src/mainview/components/CallOverlay.qml b/src/mainview/components/CallOverlay.qml index 1f2ed4edea58c9b53fa4eaea90b3effcb17bafe1..7977c399ff8a1cfac362e542f4c6db53a849976b 100644 --- a/src/mainview/components/CallOverlay.qml +++ b/src/mainview/components/CallOverlay.qml @@ -97,11 +97,16 @@ Rectangle { console.log("Error when creating the hover") return } + hover.setParticipantName(infos[infoVariant].bestName) hover.active = infos[infoVariant].active; hover.isLocal = infos[infoVariant].isLocal; hover.setMenuVisible(isMaster) hover.uri = infos[infoVariant].uri + if (infos[infoVariant].videoMuted) + hover.setAvatar(infos[infoVariant].avatar) + else + hover.setAvatar("") hover.injectedContextMenu = participantContextMenu participantOverlays.push(hover) } diff --git a/src/mainview/components/ParticipantOverlay.qml b/src/mainview/components/ParticipantOverlay.qml index 2f17b0880f0fa6bbc8fb913d882862d3d7acb5de..264fc727024ea1ad795a62a8b3cdef56b311b07d 100644 --- a/src/mainview/components/ParticipantOverlay.qml +++ b/src/mainview/components/ParticipantOverlay.qml @@ -37,6 +37,16 @@ Rectangle { participantName.text = name } + function setAvatar(avatar) { + if (avatar === "") { + opacity = 0 + contactImage.source = "" + } else { + opacity = 1 + contactImage.source = "data:image/png;base64," + avatar + } + } + function setMenuVisible(isVisible) { optionsButton.visible = isVisible } @@ -53,6 +63,31 @@ Rectangle { propagateComposedEvents: true acceptedButtons: Qt.LeftButton + Image { + id: contactImage + + anchors.centerIn: parent + + height: Math.min(parent.width / 2, parent.height / 2) + width: Math.min(parent.width / 2, parent.height / 2) + + fillMode: Image.PreserveAspectFit + source: "" + asynchronous: true + + layer.enabled: true + layer.effect: OpacityMask { + maskSource: Rectangle{ + width: contactImage.width + height: contactImage.height + radius: { + var size = ((contactImage.width <= contactImage.height)? contactImage.width:contactImage.height) + return size /2 + } + } + } + } + RowLayout { id: bottomLabel @@ -130,11 +165,13 @@ Rectangle { } onEntered: { - root.state = "entered" + if (contactImage.status === Image.Null) + root.state = "entered" } onExited: { - root.state = "exited" + if (contactImage.status === Image.Null) + root.state = "exited" } }