[OPENMEETINGS-551] fallback handling and volume slider are added

Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/a600e321
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/a600e321
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/a600e321

Branch: refs/heads/master
Commit: a600e321f9dd4ccc8a1efe3cd7f2bb8ccf0877f0
Parents: a4d2a56
Author: Maxim Solodovnik <[email protected]>
Authored: Fri Apr 21 01:27:01 2017 +0000
Committer: Maxim Solodovnik <[email protected]>
Committed: Fri Apr 21 01:27:01 2017 +0000

----------------------------------------------------------------------
 .../openmeetings/db/entity/basic/Client.java    | 11 ++++--
 .../flex/org/apache/openmeetings/OmVideo.as     | 37 ++++++++++++--------
 .../apache/openmeetings/web/room/RoomPanel.html | 12 +++++++
 .../apache/openmeetings/web/room/RoomPanel.java | 29 ++++++++++-----
 .../org/apache/openmeetings/web/room/room.js    | 24 +++++++++++++
 .../web/room/sidebar/RoomSidebar.java           |  2 +-
 openmeetings-web/src/main/webapp/css/room.css   | 14 +++++++-
 7 files changed, 102 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/a600e321/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/Client.java
----------------------------------------------------------------------
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 0f8fc82..19e9787 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
@@ -342,7 +342,7 @@ public class Client implements IClient {
                return true;
        }
 
-       public JSONObject toJson() {
+       public JSONObject toJson(boolean self) {
                JSONObject u = new JSONObject();
                if (user != null) {
                        JSONObject a = new JSONObject();
@@ -356,7 +356,7 @@ public class Client implements IClient {
                                a.put("country", 
user.getAddress().getCountry());
                        }
                }
-               return new JSONObject()
+               JSONObject json = new JSONObject()
                                .put("user", u)
                                .put("uid", uid)
                                .put("rights", new JSONArray(rights))
@@ -364,7 +364,12 @@ public class Client implements IClient {
                                .put("pod", pod)
                                .put("broadcastId", broadcastId)
                                .put("width", width)
-                               .put("height", height);
+                               .put("height", height)
+                               .put("self", self);
+               if (self) {
+                       json.put("cam", cam).put("mic", mic);
+               }
+               return json;
        }
 
        @Override

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/a600e321/openmeetings-flash/src/main/flex/org/apache/openmeetings/OmVideo.as
----------------------------------------------------------------------
diff --git 
a/openmeetings-flash/src/main/flex/org/apache/openmeetings/OmVideo.as 
b/openmeetings-flash/src/main/flex/org/apache/openmeetings/OmVideo.as
index 5538f46..c32e8a2 100644
--- a/openmeetings-flash/src/main/flex/org/apache/openmeetings/OmVideo.as
+++ b/openmeetings-flash/src/main/flex/org/apache/openmeetings/OmVideo.as
@@ -45,6 +45,7 @@ public class OmVideo {
        public var height:int;
        private var mode:String;
        private var params:Object;
+       private var url:String;
        private var fallback:Boolean;
 
        public function OmVideo(ui:UIComponent, params:Object) {
@@ -97,9 +98,6 @@ public class OmVideo {
        private function createStream():void {
                debug("createStream: ");
                ns = new NetStream(nc);
-               //see: 
http://livedocs.adobe.com/flash/9.0_de/ActionScriptLangRefV3/flash/net/NetStream.html
-               //according to the docs the construct to catch event has to be 
implemented like this.
-               //var t = this;
                ns.client = {
                        onMetaData: function(metadata:Object):void {
                                debug("onMetaData: ", metadata);
@@ -137,7 +135,6 @@ public class OmVideo {
 
                if (cam != null) {
                        ns.attachCamera(cam);
-                       //invokes Method in baseVideoView which shows the cam
                        attachCamera(cam);
 
                        var videoStreamSettings:VideoStreamSettings = null;
@@ -166,17 +163,33 @@ public class OmVideo {
                }
        }
 
+       private function _connect(url:String):void {
+               nc.connect(url, {
+                       uid: params.uid
+                       , sid: params.sid
+                       , nativeSsl: 'best' == params.proxyType
+               });
+       }
+
        private function connect(callback:Function):void {
                if (nc == null || !nc.connected) {
-                       var url:String = params.url;  //TODO fallback
+                       url = params.url;
                        debug("NetConnection is not connected", url);
                        nc = new NetConnection();
                        nc.addEventListener(NetStatusEvent.NET_STATUS, function 
onConnectionStatus(e:NetStatusEvent):void {
                                debug("ConnectionStatus: " + e.info.code);
-                               if (e.info.code == 
"NetConnection.Connect.Success") {
-                                       callback();
-                               } else {
-                                       //TODO
+                               switch (e.info.code) {
+                                       case 'NetConnection.Connect.Failed':
+                                               if (!fallback) {
+                                                       fallback = true;
+                                                       url = params.fallback;
+                                                       _connect(url);
+                                               }
+                                               break;
+                                       case 'NetConnection.Connect.Success':
+                                               callback();
+                                               break;
+                                       //TODO other cases
                                }
                        });
                        nc.addEventListener(AsyncErrorEvent.ASYNC_ERROR, 
function (event:AsyncErrorEvent):void {
@@ -197,11 +210,7 @@ public class OmVideo {
                                        debug("id: " + id); //TODO save 
connection id
                                }
                        };
-                       nc.connect(url, {
-                               uid: params.uid
-                               , sid: params.sid
-                               , nativeSsl: 'best' == params.proxyType
-                       });
+                       _connect(url);
                } else {
                        callback();
                }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/a600e321/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
index 87afb87..3f30083 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
@@ -46,6 +46,18 @@
                <div id="user-video">
                        <div class="video"></div>
                </div>
+               <div id="video-volume-btn">
+                       <a class="ui-dialog-titlebar-volume ui-corner-all 
ui-state-default" href="#" title="volume" role="button" data-toggle="dropdown">
+                               <span class="ui-icon 
ui-icon-triangle-2-n-s">volume</span>
+                       </a>
+                       <ul class="dropdown-menu video volume">
+                               <li>
+                                       <div class="slider">
+                                               <div class="ui-slider-handle 
handle"></div>
+                                       </div>
+                               </li>
+                       </ul>
+               </div>
        </div>
 </wicket:panel>
 </html>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/a600e321/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
----------------------------------------------------------------------
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 315acc0..0cf02f3 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
@@ -161,7 +161,7 @@ public class RoomPanel extends BasePanel {
                for (Client c: getRoomClients(getRoom().getId()) ){
                        boolean self = getClient().getUid().equals(c.getUid());
                        if (!self) {
-                               JSONObject json = c.toJson().put("sid", 
getSid()).put("self", self);
+                               JSONObject json = c.toJson(self).put("sid", 
getSid());
                                // TODO we should check if client is 
screenShare, see onEvent newStream case.
                                
target.appendJavaScript(String.format("VideoManager.play(%s);", json));
                        }
@@ -344,7 +344,7 @@ public class RoomPanel extends BasePanel {
                                                                log.error("Not 
existing user has stopped recording {} !!!!", uid);
                                                                return;
                                                        }
-                                                       
c.getActivities().remove(Client.Activity.record);
+                                                       
c.remove(Client.Activity.record);
                                                }
                                                break;
                                        case recordingStarted:
@@ -356,17 +356,30 @@ public class RoomPanel extends BasePanel {
                                                                log.error("Not 
existing user has started recording {} !!!!", recordingUser);
                                                                return;
                                                        }
-                                                       
c.getActivities().add(Client.Activity.record);
+                                                       
c.set(Client.Activity.record);
                                                }
                                                break;
                                        case sharingStoped:
-                                               //TODO check sharingUser == 
((TextRoomMessage)m).getText();
-                                               sharingUser = null;
-                                               menu.update(handler);
+                                               {
+                                                       sharingUser = null;
+                                                       Client c = 
getOnlineClient(((TextRoomMessage)m).getText());
+                                                       if (c == null) {
+                                                               log.error("Not 
existing user has started sharing {} !!!!", sharingUser);
+                                                               return;
+                                                       }
+                                                       
c.remove(Client.Activity.share);
+                                                       menu.update(handler);
+                                               }
                                                break;
                                        case sharingStarted:
                                                {
                                                        sharingUser = 
((TextRoomMessage)m).getText();
+                                                       Client c = 
getOnlineClient(sharingUser);
+                                                       if (c == null) {
+                                                               log.error("Not 
existing user has started sharing {} !!!!", sharingUser);
+                                                               return;
+                                                       }
+                                                       
c.set(Client.Activity.share);
                                                        menu.update(handler);
                                                }
                                                break;
@@ -374,7 +387,7 @@ public class RoomPanel extends BasePanel {
                                                {
                                                        Client c = 
getOnlineClient(((TextRoomMessage)m).getText());
                                                        
handler.appendJavaScript(String.format("VideoManager.update(%s);"
-                                                                       , 
c.toJson().put("sid", getSid()).put("self", 
getClient().getUid().equals(c.getUid()))));
+                                                                       , 
c.toJson(getClient().getUid().equals(c.getUid())).put("sid", getSid())));
                                                        sidebar.update(handler);
                                                        menu.update(handler);
                                                        wb.update(handler);
@@ -386,7 +399,7 @@ public class RoomPanel extends BasePanel {
                                                Client c = 
getOnlineClient(obj.getString("uid"));
                                                boolean self = 
getClient().getUid().equals(c.getUid());
                                                if (!self) {
-                                                       JSONObject json = 
c.toJson().put("sid", getSid()).put("self", self);
+                                                       JSONObject json = 
c.toJson(self).put("sid", getSid());
                                                        if 
(obj.optBoolean("screenShare", false)) {
                                                                
json.put("screenShare", true)
                                                                        
.put("uid", obj.getString("suid")) // unique screen-sharing ID

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/a600e321/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
index cd182c0..1b2d687 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
@@ -63,6 +63,30 @@ var Video = (function() {
                        , dblclick: "collapse"
                });
                t = v.parent().find('.ui-dialog-titlebar').attr('title', name);
+               
v.parent().find('.ui-dialog-titlebar-buttonpane').append($('#video-volume-btn').children().clone());
+               var volume = v.parent().find('.dropdown-menu.video.volume');
+               v.parent().find('.ui-dialog-titlebar-volume').click(function(e) 
{
+                       e.stopImmediatePropagation();
+                       volume.toggle();
+               }).dblclick(function(e) {
+                       e.stopImmediatePropagation();
+               });
+               var handle = v.parent().find('.slider .handle');
+               v.parent().find('.slider').slider({
+                       orientation: 'vertical'
+                       , range: 'min'
+                       , min: 0
+                       , max: 100
+                       , value: 60
+                       , slide: function(event, ui) {
+                       }
+                       , create: function() {
+                               handle.text($(this).slider("value"));
+                       }
+                       , slide: function(event, ui) {
+                               handle.text(ui.value);
+                       }
+               });
                vc = v.find('.video');
                vc.width(_w).height(_h);
                //broadcast

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/a600e321/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
----------------------------------------------------------------------
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 168bea9..17b6973 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
@@ -414,7 +414,7 @@ public class RoomSidebar extends Panel {
                        }
                        Pod pod = c.getPod();
                        
c.setPod(getRequest().getRequestParameters().getParameterValue(PARAM_POD).toOptionalInteger());
-                       if (pod != Pod.none && pod != c.getPod()) {
+                       if (pod != null && pod != Pod.none && pod != 
c.getPod()) {
                                //pod has changed, no need to toggle
                                c.set(a);
                        } else {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/a600e321/openmeetings-web/src/main/webapp/css/room.css
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/webapp/css/room.css 
b/openmeetings-web/src/main/webapp/css/room.css
index 04d3a2b..cf437c1 100644
--- a/openmeetings-web/src/main/webapp/css/room.css
+++ b/openmeetings-web/src/main/webapp/css/room.css
@@ -354,10 +354,22 @@
 }
 .ui-dialog.video, .ui-dialog.video .ui-dialog-titlebar, .ui-dialog.video 
.ui-dialog-content {
        padding: 0;
+}
+.ui-dialog.video .ui-dialog-content {
        overflow: hidden;
 }
 .ui-dialog.video .ui-dialog-titlebar {
-       padding-left:10px
+       padding-left: 10px
+}
+.dropdown-menu.video.volume, .dropdown-menu.video.volume li {
+       width: 20px;
+       min-width: 20px;
+       border-radius: 0;
+       border: 0;
+       box-shadow: initial;
+       left: 50px;
+       top: -50px;
+       background-color: transparent;
 }
 .ui-dialog.video .title {
        font-weight: bold;

Reply via email to