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
Branches
No related tags found
No related merge requests found
...@@ -80,7 +80,9 @@ public: ...@@ -80,7 +80,9 @@ public:
* @param isAudioOnly, set to false by default * @param isAudioOnly, set to false by default
* @return the call uid created. Empty string is returned if call couldn't be created. * @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. * Request a media change in a ongoing call.
...@@ -286,6 +288,25 @@ public: ...@@ -286,6 +288,25 @@ public:
*/ */
void setModerator(const QString& confId, const QString& peerId, const bool& state); 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 * Mute/unmute participant
* @param confId The conference to change * @param confId The conference to change
......
...@@ -358,7 +358,11 @@ NewCallModel::createCall(const QString& uri, bool isAudioOnly, VectorMapStringSt ...@@ -358,7 +358,11 @@ NewCallModel::createCall(const QString& uri, bool isAudioOnly, VectorMapStringSt
} }
void 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 audio: audio_0
// Main video: video_0 // Main video: video_0
...@@ -434,7 +438,8 @@ NewCallModel::requestMediaChange(const QString& callId, const QString& mediaLabe ...@@ -434,7 +438,8 @@ NewCallModel::requestMediaChange(const QString& callId, const QString& mediaLabe
item[MediaAttributeKey::ENABLED] = "true"; item[MediaAttributeKey::ENABLED] = "true";
item[MediaAttributeKey::MUTED] = mute ? "true" : "false"; item[MediaAttributeKey::MUTED] = mute ? "true" : "false";
item[MediaAttributeKey::SOURCE_TYPE] = srctype; item[MediaAttributeKey::SOURCE_TYPE] = srctype;
item[MediaAttributeKey::SOURCE] = resource.isEmpty() ? item[MediaAttributeKey::SOURCE] : resource; item[MediaAttributeKey::SOURCE] = resource.isEmpty() ? item[MediaAttributeKey::SOURCE]
: resource;
break; break;
} }
...@@ -446,8 +451,7 @@ NewCallModel::requestMediaChange(const QString& callId, const QString& mediaLabe ...@@ -446,8 +451,7 @@ NewCallModel::requestMediaChange(const QString& callId, const QString& mediaLabe
MapStringString mediaAttribute = {{MediaAttributeKey::MEDIA_TYPE, MapStringString mediaAttribute = {{MediaAttributeKey::MEDIA_TYPE,
MediaAttributeValue::VIDEO}, MediaAttributeValue::VIDEO},
{MediaAttributeKey::ENABLED, "true"}, {MediaAttributeKey::ENABLED, "true"},
{MediaAttributeKey::MUTED, {MediaAttributeKey::MUTED, mute ? "true" : "false"},
mute ? "true" : "false"},
{MediaAttributeKey::SOURCE_TYPE, srctype}, {MediaAttributeKey::SOURCE_TYPE, srctype},
{MediaAttributeKey::SOURCE, resource}, {MediaAttributeKey::SOURCE, resource},
{MediaAttributeKey::LABEL, mediaLabel}}; {MediaAttributeKey::LABEL, mediaLabel}};
...@@ -981,6 +985,43 @@ NewCallModel::setModerator(const QString& confId, const QString& peerId, const b ...@@ -981,6 +985,43 @@ NewCallModel::setModerator(const QString& confId, const QString& peerId, const b
CallManager::instance().setModerator(confId, peerId, state); 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 void
NewCallModel::muteParticipant(const QString& confId, const QString& peerId, const bool& state) NewCallModel::muteParticipant(const QString& confId, const QString& peerId, const bool& state)
{ {
......
...@@ -450,6 +450,14 @@ public Q_SLOTS: // METHODS ...@@ -450,6 +450,14 @@ public Q_SLOTS: // METHODS
DRing::setModerator(confId.toStdString(), peerId.toStdString(), state); 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) void muteParticipant(const QString& confId, const QString& peerId, const bool& state)
{ {
DRing::muteParticipant(confId.toStdString(), peerId.toStdString(), 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