Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/spreed.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/Controller/SignalingController.php14
-rw-r--r--lib/Signaling/BackendNotifier.php8
-rw-r--r--lib/Signaling/Listener.php8
3 files changed, 24 insertions, 6 deletions
diff --git a/lib/Controller/SignalingController.php b/lib/Controller/SignalingController.php
index 166e010f3..82f5a7681 100644
--- a/lib/Controller/SignalingController.php
+++ b/lib/Controller/SignalingController.php
@@ -645,9 +645,17 @@ class SignalingController extends OCSController {
}
}
- $permissions = ['publish-media', 'publish-screen'];
- if ($participant instanceof Participant && $participant->hasModeratorPermissions(false)) {
- $permissions[] = 'control';
+ $permissions = [];
+ if ($participant instanceof Participant) {
+ if ($participant->getAttendee()->getPublishingPermissions() & (Attendee::PUBLISHING_PERMISSIONS_AUDIO | Attendee::PUBLISHING_PERMISSIONS_VIDEO)) {
+ $permissions[] = 'publish-media';
+ }
+ if ($participant->getAttendee()->getPublishingPermissions() & Attendee::PUBLISHING_PERMISSIONS_SCREENSHARING) {
+ $permissions[] = 'publish-screen';
+ }
+ if ($participant->hasModeratorPermissions(false)) {
+ $permissions[] = 'control';
+ }
}
$event = new SignalingEvent($room, $participant, $action);
diff --git a/lib/Signaling/BackendNotifier.php b/lib/Signaling/BackendNotifier.php
index 50f906c87..73b5d4c31 100644
--- a/lib/Signaling/BackendNotifier.php
+++ b/lib/Signaling/BackendNotifier.php
@@ -277,7 +277,13 @@ class BackendNotifier {
$users[] = $data;
if (\in_array($session->getSessionId(), $sessionIds, true)) {
- $data['permissions'] = ['publish-media', 'publish-screen'];
+ $data['permissions'] = [];
+ if ($attendee->getPublishingPermissions() & (Attendee::PUBLISHING_PERMISSIONS_AUDIO | Attendee::PUBLISHING_PERMISSIONS_VIDEO)) {
+ $data['permissions'][] = 'publish-media';
+ }
+ if ($attendee->getPublishingPermissions() & Attendee::PUBLISHING_PERMISSIONS_SCREENSHARING) {
+ $data['permissions'][] = 'publish-screen';
+ }
if ($attendee->getParticipantType() === Participant::OWNER ||
$attendee->getParticipantType() === Participant::MODERATOR) {
$data['permissions'][] = 'control';
diff --git a/lib/Signaling/Listener.php b/lib/Signaling/Listener.php
index 9ebec18bd..e6213e5d0 100644
--- a/lib/Signaling/Listener.php
+++ b/lib/Signaling/Listener.php
@@ -130,7 +130,8 @@ class Listener {
// "participantsModified" once the clients no longer expect a
// "roomModified" message for participant type changes.
$dispatcher->addListener(Room::EVENT_AFTER_PARTICIPANT_TYPE_SET, $listener);
- $dispatcher->addListener(Room::EVENT_AFTER_PARTICIPANT_TYPE_SET, static function (ModifyParticipantEvent $event) {
+
+ $listener = static function (ModifyParticipantEvent $event) {
if (self::isUsingInternalSignaling()) {
return;
}
@@ -151,7 +152,10 @@ class Listener {
}
$notifier->participantsModified($event->getRoom(), $sessionIds);
- });
+ };
+ $dispatcher->addListener(Room::EVENT_AFTER_PARTICIPANT_TYPE_SET, $listener);
+ $dispatcher->addListener(Room::EVENT_AFTER_PARTICIPANT_PUBLISHING_PERMISSIONS_SET, $listener);
+
$dispatcher->addListener(Room::EVENT_BEFORE_ROOM_DELETE, static function (RoomEvent $event) {
if (self::isUsingInternalSignaling()) {
return;