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 d547350  [OPENMEETINGS-2320] av settings are immediately in effect
d547350 is described below

commit d5473507d7c27fb3d3009958b28b8e0b3c7832f1
Author: Maxim Solodovnik <solomax...@gmail.com>
AuthorDate: Fri Jun 12 11:23:19 2020 +0700

    [OPENMEETINGS-2320] av settings are immediately in effect
---
 .../openmeetings/db/entity/basic/Client.java       |  6 +++
 .../apache/openmeetings/web/room/RoomPanel.java    | 25 ++++++++++++
 .../apache/openmeetings/web/room/raw-settings.js   | 17 ++++----
 .../openmeetings/web/room/raw-video-manager.js     |  2 +
 .../org/apache/openmeetings/web/room/raw-video.js  | 15 ++++++-
 .../openmeetings/web/room/sidebar/RoomSidebar.java | 47 ----------------------
 6 files changed, 54 insertions(+), 58 deletions(-)

diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/Client.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/Client.java
index 46166aa..cdf463b 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/Client.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/Client.java
@@ -31,6 +31,7 @@ import java.util.Map.Entry;
 import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Stream;
 
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.IDataProviderEntity;
@@ -245,6 +246,11 @@ public class Client implements IDataProviderEntity, 
IWsClient {
                                .findFirst();
        }
 
+       public Stream<StreamDesc> getCamStreams() {
+               return streams.values().stream()
+                               .filter(sd -> StreamType.WEBCAM == 
sd.getType());
+       }
+
        public Client restoreActivities(StreamDesc sd) {
                synchronized (activities) {
                        Set<Activity> aa = new HashSet<>(sd.sactivities);
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
index fba8f99..3245256 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
@@ -19,6 +19,7 @@
 package org.apache.openmeetings.web.room;
 
 import static java.time.Duration.ZERO;
+import static 
org.apache.openmeetings.core.remote.KurentoHandler.activityAllowed;
 import static 
org.apache.openmeetings.core.util.ChatWebSocketHelper.ID_USER_PREFIX;
 import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_PDF;
 import static org.apache.openmeetings.web.app.WebSession.getDateFormat;
@@ -69,6 +70,7 @@ import org.apache.openmeetings.web.room.wb.AbstractWbPanel;
 import org.apache.openmeetings.web.room.wb.InterviewWbPanel;
 import org.apache.openmeetings.web.room.wb.WbAction;
 import org.apache.openmeetings.web.room.wb.WbPanel;
+import org.apache.openmeetings.web.util.ExtendedClientProperties;
 import org.apache.openmeetings.web.util.TouchPunchResourceReference;
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.Component;
@@ -231,6 +233,7 @@ public class RoomPanel extends BasePanel {
                }
        };
        Component eventDetail = new 
WebMarkupContainer(EVENT_DETAILS_ID).setVisible(false);
+       private boolean avInited = false;
 
        @SpringBean
        private ClientManager cm;
@@ -767,6 +770,28 @@ public class RoomPanel extends BasePanel {
                                wb.processWbAction(a, o.optJSONObject("data"), 
handler);
                        } else if ("room".equals(type)) {
                                sidebar.roomAction(handler, o);
+                       } else if ("av".equals(type)) {
+                               ExtendedClientProperties cp = 
WebSession.get().getExtendedProperties();
+                               Client c = 
cp.setSettings(o.optJSONObject("settings")).update(getClient());
+                               if (!avInited) {
+                                       avInited = true;
+                                       if (Room.Type.CONFERENCE == 
r.getType()) {
+                                               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);
+                                       }
+                               }
+                               c.getCamStreams().forEach(sd -> {
+                                       sd.setWidth(c.getWidth());
+                                       sd.setHeight(c.getHeight());
+                               });
+                               broadcast(c);
                        }
                }
        }
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-settings.js
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-settings.js
index 1619564..4ad895d 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-settings.js
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-settings.js
@@ -127,14 +127,13 @@ var VideoSettings = (function() {
                }
                return s;
        }
-       function _save(refr) {
-               const _s = Settings.save(s);
-               if (typeof(avSettings) === 'function') {
-                       avSettings(_s);
-               }
-               if (refr && typeof(VideoManager) === 'object' && o.uid) {
-                       VideoManager.refresh(o.uid);
-               }
+       function _save() {
+               Settings.save(s);
+               OmUtil.sendMessage({
+                       type: 'av'
+                       , area: 'room'
+                       , settings: s
+               });
        }
        function _clear(_ms) {
                const ms = _ms || (vid && vid.length === 1 ? vid[0].srcObject : 
null);
@@ -198,7 +197,7 @@ var VideoSettings = (function() {
                                }, MsgBase);
                        });
                vs.find('.btn-save').off().click(function() {
-                       _save(true);
+                       _save();
                        _close();
                        vs.modal("hide");
                });
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-manager.js
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-manager.js
index bb4edde..2e49eed 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-manager.js
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-manager.js
@@ -150,6 +150,8 @@ var VideoManager = (function() {
                c.streams.forEach(function(sd) {
                        streamMap[sd.uid] = sd.uid;
                        sd.self = c.self;
+                       sd.cam = c.cam;
+                       sd.mic = c.mic;
                        if (VideoUtil.isSharing(sd) || 
VideoUtil.isRecording(sd)) {
                                return;
                        }
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 aa2984e..129928d 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
@@ -370,17 +370,28 @@ var Video = (function() {
                return v;
        }
        function _update(_c) {
-               const prevA = sd.activities;
+               const prevA = sd.activities
+                       , prevW = sd.width
+                       , prevH = sd.height
+                       , prevCam = sd.cam
+                       , prevMic = sd.mic;
                sd.activities = _c.activities.sort();
                sd.level = _c.level;
                sd.user.firstName = _c.user.firstName;
                sd.user.lastName = _c.user.lastName;
                sd.user.displayName = _c.user.displayName;
+               sd.width = _c.width;
+               sd.height = _c.height;
+               sd.cam = _c.cam;
+               sd.mic = _c.mic;
                const name = sd.user.displayName;
                if (hasVideo) {
                        v.dialog('option', 'title', 
name).parent().find('.ui-dialog-titlebar').attr('title', name);
                }
-               const same = prevA.length === sd.activities.length && 
prevA.every(function(value, index) { return value === sd.activities[index]})
+               const same = prevA.length === sd.activities.length
+                       && prevA.every(function(value, index) { return value 
=== sd.activities[index]})
+                       && prevW === sd.width && prevH === sd.height
+                       && prevCam == sd.cam && prevMic === sd.mic;
                if (sd.self && !same) {
                        _cleanup();
                        v.remove();
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 76bb8f1..c07ce2e 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,21 +18,16 @@
  */
 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;
 
 import org.apache.openmeetings.core.remote.StreamProcessor;
 import org.apache.openmeetings.core.util.WebSocketHelper;
 import org.apache.openmeetings.db.entity.basic.Client;
-import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.room.Room.Right;
 import org.apache.openmeetings.db.entity.room.Room.RoomElement;
 import org.apache.openmeetings.db.util.ws.RoomMessage;
 import org.apache.openmeetings.db.util.ws.TextRoomMessage;
 import org.apache.openmeetings.web.app.ClientManager;
-import org.apache.openmeetings.web.app.WebSession;
 import org.apache.openmeetings.web.common.NameDialog;
 import org.apache.openmeetings.web.common.confirmation.ConfirmationDialog;
 import org.apache.openmeetings.web.room.RoomPanel;
@@ -40,17 +35,12 @@ import org.apache.openmeetings.web.room.RoomPanel.Action;
 import org.apache.openmeetings.web.room.VideoSettings;
 import org.apache.openmeetings.web.room.activities.ActivitiesPanel;
 import org.apache.openmeetings.web.room.activities.Activity;
-import org.apache.openmeetings.web.util.ExtendedClientProperties;
-import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
-import org.apache.wicket.markup.head.IHeaderResponse;
-import org.apache.wicket.markup.head.PriorityHeaderItem;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.spring.injection.annot.SpringBean;
-import org.apache.wicket.util.string.StringValue;
 import org.apache.wicket.util.string.Strings;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -71,39 +61,9 @@ public class RoomSidebar extends Panel {
        private final WebMarkupContainer fileTab = new 
WebMarkupContainer("file-tab");
        private ConfirmationDialog confirmKick;
        private boolean showFiles;
-       private boolean avInited = false;
        private Client kickedClient;
        private VideoSettings settings = new VideoSettings("settings");
        private ActivitiesPanel activities;
-       private final AbstractDefaultAjaxBehavior avSettings = new 
AbstractDefaultAjaxBehavior() {
-               private static final long serialVersionUID = 1L;
-
-               @Override
-               protected void respond(AjaxRequestTarget target) {
-                       StringValue s = 
getRequest().getRequestParameters().getParameterValue(PARAM_SETTINGS);
-                       Client c = room.getClient();
-                       if (!s.isEmpty() && c != null) {
-                               ExtendedClientProperties cp = 
WebSession.get().getExtendedProperties();
-                               cp.setSettings(new 
JSONObject(s.toString())).update(c);
-                               if (!avInited) {
-                                       avInited = true;
-                                       if (Room.Type.CONFERENCE == 
room.getRoom().getType()) {
-                                               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);
-                                       }
-                               }
-                               cm.update(c);
-                               room.broadcast(c);
-                       }
-               }
-       };
 
        @SpringBean
        private ClientManager cm;
@@ -131,7 +91,6 @@ public class RoomSidebar extends Panel {
                add(fileTab.setVisible(!room.isInterview()), 
roomFiles.setVisible(!room.isInterview()));
 
                add(addFolder, settings);
-               add(avSettings);
                add(confirmKick = new ConfirmationDialog("confirm-kick", new 
ResourceModel("603"), new ResourceModel("605")) {
                        private static final long serialVersionUID = 1L;
 
@@ -145,12 +104,6 @@ public class RoomSidebar extends Panel {
                add(activities = new ActivitiesPanel("activities", room));
        }
 
-       @Override
-       public void renderHead(IHeaderResponse response) {
-               super.renderHead(response);
-               response.render(new 
PriorityHeaderItem(getNamedFunction(FUNC_SETTINGS, avSettings, 
explicit(PARAM_SETTINGS))));
-       }
-
        private void updateShowFiles(IPartialPageRequestHandler handler) {
                if (room.isInterview()) {
                        return;

Reply via email to