This is an automated email from the ASF dual-hosted git repository.

solomax pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openmeetings.git


The following commit(s) were added to refs/heads/master by this push:
     new ec83d0e  [OPENMEETINGS-2195] room enter with mic-only should work 
better
ec83d0e is described below

commit ec83d0efd339ad17707c4020d39d5490d261445a
Author: Maxim Solodovnik <[email protected]>
AuthorDate: Sat Apr 4 19:04:09 2020 +0700

    [OPENMEETINGS-2195] room enter with mic-only should work better
---
 .../openmeetings/core/remote/StreamProcessor.java  |  8 --------
 .../apache/openmeetings/web/room/raw-video-util.js | 12 +++++++++--
 .../org/apache/openmeetings/web/room/raw-video.js  | 24 ++++++++++++++++++----
 .../openmeetings/web/room/sidebar/RoomSidebar.java |  9 +++++++-
 4 files changed, 38 insertions(+), 15 deletions(-)

diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/StreamProcessor.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/StreamProcessor.java
index 2fcd157..40ab564 100644
--- 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/StreamProcessor.java
+++ 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/StreamProcessor.java
@@ -211,14 +211,6 @@ public class StreamProcessor implements IStreamProcessor {
        public void toggleActivity(Client c, Activity a) {
                log.info("PARTICIPANT {}: trying to toggle activity {}", c, a);
 
-               if (!activityAllowed(c, a, c.getRoom())) {
-                       if (a == Activity.AUDIO || a == Activity.AUDIO_VIDEO) {
-                               c.allow(Room.Right.AUDIO);
-                       }
-                       if (!c.getRoom().isAudioOnly() && (a == Activity.VIDEO 
|| a == Activity.AUDIO_VIDEO)) {
-                               c.allow(Room.Right.VIDEO);
-                       }
-               }
                if (activityAllowed(c, a, c.getRoom())) {
                        boolean wasBroadcasting = isBroadcasting(c);
                        if (a == Activity.AUDIO && !c.isMicEnabled()) {
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-util.js
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-util.js
index 12b8939..f500fa9 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-util.js
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-util.js
@@ -189,7 +189,11 @@ var VideoUtil = (function() {
        function _cleanStream(stream) {
                if (!!stream) {
                        stream.getTracks().forEach(function(track) {
-                               track.stop();
+                               try {
+                                       track.stop();
+                               } catch(e) {
+                                       //no-op
+                               }
                        });
                }
        }
@@ -206,7 +210,11 @@ var VideoUtil = (function() {
                        } catch(e) {
                                OmUtil.log('Failed to clean peer' + e);
                        }
-                       peer.dispose();
+                       try {
+                               peer.dispose();
+                       } catch(e) {
+                               //no-op
+                       }
                        peer = null;
                }
        }
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video.js 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video.js
index 8d6b6a6..0a04646 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video.js
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video.js
@@ -153,6 +153,9 @@ var Video = (function() {
                        VideoUtil.addIceServers(options, msg)
                        , function (error) {
                                if (error) {
+                                       if (true === this.cleaned) {
+                                               return;
+                                       }
                                        return OmUtil.error(error);
                                }
                                if (data.analyser) {
@@ -161,6 +164,9 @@ var Video = (function() {
                                }
                                this.generateOffer(function(error, offerSdp) {
                                        if (error) {
+                                               if (true === this.cleaned) {
+                                                       return;
+                                               }
                                                return OmUtil.error('Sender sdp 
offer error ' + error);
                                        }
                                        OmUtil.log('Invoking Sender SDP offer 
callback function');
@@ -196,11 +202,17 @@ var Video = (function() {
                data.rtcPeer = new kurentoUtils.WebRtcPeer.WebRtcPeerRecvonly(
                        options
                        , function(error) {
-                               if (!this.cleaned && error) {
+                               if (error) {
+                                       if (true === this.cleaned) {
+                                               return;
+                                       }
                                        return OmUtil.error(error);
                                }
                                this.generateOffer(function(error, offerSdp) {
-                                       if (!this.cleaned && error) {
+                                       if (error) {
+                                               if (true === this.cleaned) {
+                                                       return;
+                                               }
                                                return OmUtil.error('Receiver 
sdp offer error ' + error);
                                        }
                                        OmUtil.log('Invoking Receiver SDP offer 
callback function');
@@ -311,7 +323,9 @@ var Video = (function() {
        }
        function _init(msg) {
                sd = msg.stream;
-               vol = Volume();
+               if (!vol) {
+                       vol = Volume();
+               }
                iceServers = msg.iceServers;
                sd.activities = sd.activities.sort();
                size = {width: sd.width, height: sd.height};
@@ -374,7 +388,9 @@ var Video = (function() {
                }
                const same = prevA.length === sd.activities.length && 
prevA.every(function(value, index) { return value === sd.activities[index]})
                if (sd.self && !same) {
-                       _refresh();
+                       _cleanup();
+                       v.remove();
+                       _init({stream: sd, iceServers: iceServers});
                }
        }
        function __createVideo(data) {
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
index 6fce8f2..f328010 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
@@ -18,6 +18,7 @@
  */
 package org.apache.openmeetings.web.room.sidebar;
 
+import static 
org.apache.openmeetings.core.remote.KurentoHandler.activityAllowed;
 import static org.apache.openmeetings.web.app.Application.kickUser;
 import static 
org.apache.openmeetings.web.util.CallbackFunctionHelper.getNamedFunction;
 import static org.apache.wicket.ajax.attributes.CallbackParameter.explicit;
@@ -87,7 +88,13 @@ public class RoomSidebar extends Panel {
                                if (!avInited) {
                                        avInited = true;
                                        if (Room.Type.CONFERENCE == 
room.getRoom().getType()) {
-                                               
streamProcessor.toggleActivity(c, room.getRoom().isAudioOnly()
+                                               if (!activityAllowed(c, 
Client.Activity.AUDIO, c.getRoom())) {
+                                                       
c.allow(Room.Right.AUDIO);
+                                               }
+                                               if (!c.getRoom().isAudioOnly() 
&& !activityAllowed(c, Client.Activity.VIDEO, c.getRoom())) {
+                                                       
c.allow(Room.Right.VIDEO);
+                                               }
+                                               
streamProcessor.toggleActivity(c, c.getRoom().isAudioOnly()
                                                                ? 
Client.Activity.AUDIO
                                                                : 
Client.Activity.AUDIO_VIDEO);
                                        }

Reply via email to