Skip to content
Snippets Groups Projects
Commit e47fa583 authored by Aline Gondim Santos's avatar Aline Gondim Santos Committed by Sébastien Blin
Browse files

conference: add handsUp feature

GitLab: jami-project#855
Change-Id: I7b2b2b76310743b7b330bfa4c1f123306288b1fa
parent dc894daf
No related branches found
No related tags found
No related merge requests found
......@@ -80,7 +80,9 @@ public:
* @param isAudioOnly, set to false by default
* @return the call uid created. Empty string is returned if call couldn't be created.
*/
QString createCall(const QString& uri, bool isAudioOnly = false, VectorMapStringString mediaList = {});
QString createCall(const QString& uri,
bool isAudioOnly = false,
VectorMapStringString mediaList = {});
/**
* Request a media change in a ongoing call.
......@@ -286,6 +288,25 @@ public:
*/
void setModerator(const QString& confId, const QString& peerId, const bool& state);
/**
* Check if a participant has raised hand
* @param confId The conference to check
* @param uri Uri of the participant to check (if empty, check current account)
* @return if hand is raised
*/
bool isHandRaised(const QString& confId, const QString& uri = "") noexcept;
/**
* Set/unset a moderator
* @param confId The conference to change
* @param peerId Uri of the participant to change
* @param state State of the change (true set hand raised / false unset hand raised)
*/
void setHandRaised(const QString& accountId,
const QString& confId,
const QString& peerId,
bool state);
/**
* Mute/unmute participant
* @param confId The conference to change
......
......@@ -358,7 +358,11 @@ NewCallModel::createCall(const QString& uri, bool isAudioOnly, VectorMapStringSt
}
void
NewCallModel::requestMediaChange(const QString& callId, const QString& mediaLabel, const QString& uri, MediaRequestType type, bool mute)
NewCallModel::requestMediaChange(const QString& callId,
const QString& mediaLabel,
const QString& uri,
MediaRequestType type,
bool mute)
{
// Main audio: audio_0
// Main video: video_0
......@@ -434,7 +438,8 @@ NewCallModel::requestMediaChange(const QString& callId, const QString& mediaLabe
item[MediaAttributeKey::ENABLED] = "true";
item[MediaAttributeKey::MUTED] = mute ? "true" : "false";
item[MediaAttributeKey::SOURCE_TYPE] = srctype;
item[MediaAttributeKey::SOURCE] = resource.isEmpty() ? item[MediaAttributeKey::SOURCE] : resource;
item[MediaAttributeKey::SOURCE] = resource.isEmpty() ? item[MediaAttributeKey::SOURCE]
: resource;
break;
}
......@@ -446,8 +451,7 @@ NewCallModel::requestMediaChange(const QString& callId, const QString& mediaLabe
MapStringString mediaAttribute = {{MediaAttributeKey::MEDIA_TYPE,
MediaAttributeValue::VIDEO},
{MediaAttributeKey::ENABLED, "true"},
{MediaAttributeKey::MUTED,
mute ? "true" : "false"},
{MediaAttributeKey::MUTED, mute ? "true" : "false"},
{MediaAttributeKey::SOURCE_TYPE, srctype},
{MediaAttributeKey::SOURCE, resource},
{MediaAttributeKey::LABEL, mediaLabel}};
......@@ -981,6 +985,43 @@ NewCallModel::setModerator(const QString& confId, const QString& peerId, const b
CallManager::instance().setModerator(confId, peerId, state);
}
bool
NewCallModel::isHandRaised(const QString& confId, const QString& uri) noexcept
{
auto call = pimpl_->calls.find(confId);
if (call == pimpl_->calls.end() or not call->second)
return false;
auto ownerUri = owner.profileInfo.uri;
auto uriToCheck = uri;
if (uriToCheck.isEmpty()) {
uriToCheck = ownerUri;
}
auto handRaised = false;
for (const auto& participant : call->second->participantsInfos) {
auto itUri = participant.find("uri");
auto itHand = participant.find("handRaised");
if (itUri != participant.end() && itHand != participant.end() && *itUri == uriToCheck) {
handRaised = participant["handRaised"] == "true";
break;
}
}
return handRaised;
}
void
NewCallModel::setHandRaised(const QString& accountId,
const QString& confId,
const QString& peerId,
bool state)
{
auto ownerUri = owner.profileInfo.uri;
auto uriToCheck = peerId;
if (uriToCheck.isEmpty()) {
uriToCheck = ownerUri;
}
CallManager::instance().raiseParticipantHand(accountId, confId, uriToCheck, state);
}
void
NewCallModel::muteParticipant(const QString& confId, const QString& peerId, const bool& state)
{
......
......@@ -450,6 +450,14 @@ public Q_SLOTS: // METHODS
DRing::setModerator(confId.toStdString(), peerId.toStdString(), state);
}
void raiseParticipantHand(const QString& accountId,
const QString& confId,
const QString& peerId,
const bool& state)
{
DRing::raiseParticipantHand(accountId.toStdString(), confId.toStdString(), peerId.toStdString(), state);
}
void muteParticipant(const QString& confId, const QString& peerId, const bool& state)
{
DRing::muteParticipant(confId.toStdString(), peerId.toStdString(), state);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment