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

solomax pushed a commit to branch OPENMEETINGS-1649-kurento
in repository https://gitbox.apache.org/repos/asf/openmeetings.git


The following commit(s) were added to refs/heads/OPENMEETINGS-1649-kurento by 
this push:
     new 14db49f  [OPENMEETINGS-1649] settings dialog is partially converted
14db49f is described below

commit 14db49f0aebdfc8ae58d023ac4998c192bf48017
Author: Maxim Solodovnik <[email protected]>
AuthorDate: Thu Mar 8 23:08:11 2018 +0700

    [OPENMEETINGS-1649] settings dialog is partially converted
---
 openmeetings-web/pom.xml                           |   7 +-
 .../openmeetings/web/room/VideoSettings.html       |   2 +-
 .../org/apache/openmeetings/web/room/settings.js   | 164 +++++++++++++++------
 openmeetings-web/src/test/jetty/jetty-ssl.xml      |   4 +-
 openmeetings-web/src/test/jetty/jetty.xml          |   2 +-
 openmeetings-web/src/test/resources/keystore       | Bin 0 -> 1821 bytes
 6 files changed, 128 insertions(+), 51 deletions(-)

diff --git a/openmeetings-web/pom.xml b/openmeetings-web/pom.xml
index ad26952..6d9b99b 100644
--- a/openmeetings-web/pom.xml
+++ b/openmeetings-web/pom.xml
@@ -481,12 +481,15 @@
                                                                
<name>current_openmeetings_log_dir</name>
                                                                
<value>${project.build.directory}</value>
                                                        </systemProperty>
+                                                       <systemProperty>
+                                                               
<name>maven.project.build.directory.test-classes</name>
+                                                               
<value>${project.basedir}/src/test/resources</value>
+                                                       </systemProperty>
                                                </systemProperties>
                                                <webApp>
                                                        
<contextPath>/openmeetings</contextPath>
                                                </webApp>
-                                               <!-- 
jettyXml>${project.basedir}/src/test/jetty/jetty.xml,${project.basedir}/src/test/jetty/jetty-ssl.xml,${project.basedir}/src/test/jetty/jetty-http.xml,${project.basedir}/src/test/jetty/jetty-https.xml</jettyXml-->
-                                               
<jettyXml>${project.basedir}/src/test/jetty/jetty.xml,${project.basedir}/src/test/jetty/jetty-http.xml</jettyXml>
+                                               
<jettyXml>${project.basedir}/src/test/jetty/jetty.xml,${project.basedir}/src/test/jetty/jetty-ssl.xml,${project.basedir}/src/test/jetty/jetty-http.xml,${project.basedir}/src/test/jetty/jetty-https.xml</jettyXml>
                                        </configuration>
                                </plugin>
                        </plugins>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/VideoSettings.html
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/VideoSettings.html
index 0cd22a3..b6df63d 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/VideoSettings.html
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/VideoSettings.html
@@ -71,7 +71,7 @@
                                </div>
                        </div>
                        <div class="vid-block">
-                               <div class="video-conainer"></div>
+                               <div class="video-conainer"><video 
autoplay="autoplay"></video></div>
                                <div class="level-meter" 
wicket:message="title:767"></div>
                                <div class="sett-row right">
                                        <div><button 
class="play"><wicket:message key="764"/></button></div>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/settings.js 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/settings.js
index dabf32c..b2d6a52 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/settings.js
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/settings.js
@@ -1,7 +1,7 @@
 /* Licensed under the Apache License, Version 2.0 (the "License") 
http://www.apache.org/licenses/LICENSE-2.0 */
 var VideoSettings = (function() {
-       let vs, lm, swf, s, cam, mic, res, o
-               , vidScroll, recBtn, playBtn, recAllowed = false;
+       let vs, lm, s, cam, mic, res, o
+               , vidScroll, vid, recBtn, playBtn, recAllowed = false;
        function _load() {
                s = Settings.load();
                if (!s.video) {
@@ -18,6 +18,20 @@ var VideoSettings = (function() {
                        VideoManager.refresh(o.uid, s.video);
                }
        }
+       function _clear() {
+               if (vid.length === 1) {
+                       const ms = vid[0].srcObject;
+                       if (ms !== null && 'function' === 
typeof(ms.getAudioTracks)) {
+                               ms.getAudioTracks().forEach(function(track) {
+                                       track.stop();
+                               });
+                               ms.getVideoTracks().forEach(function(track) {
+                                       track.stop();
+                               });
+                               vid[0].srcObject = null;
+                       }
+               }
+       }
        function _init(options) {
                o = JSON.parse(JSON.stringify(options));
                vs = $('#video-settings');
@@ -26,12 +40,13 @@ var VideoSettings = (function() {
                mic = vs.find('select.mic');
                res = vs.find('select.cam-resolution');
                vidScroll = vs.find('.vid-block .video-conainer');
+               vid = vidScroll.find('video');
                recBtn = vs.find('.rec-start').click(function() {
                        recBtn.prop('disabled', true).button('refresh'); //TODO 
disable drop-downs
-                       swf.startRec();
+                       //FIXME TODO swf.startRec();
                });
                playBtn = vs.find('.play').click(function() {
-                       swf.play();
+                       //FIXME TODO swf.play();
                });
                vs.dialog({
                        classes: {
@@ -47,12 +62,14 @@ var VideoSettings = (function() {
                                        }
                                        , click: function() {
                                                _save(true);
+                                               _clear();
                                                vs.dialog("close");
                                        }
                                }
                                , {
                                        text: vs.data('btn-cancel')
                                        , click: function() {
+                                               _clear();
                                                vs.dialog("close");
                                        }
                                }
@@ -64,7 +81,6 @@ var VideoSettings = (function() {
                o.mode = 'settings';
                o.rights = (o.rights || []).join();
                delete o.keycode;
-               //FIXME TODO swf = initSwf(vidScroll, 'main.swf', 
'video-settings-swf', o)[0];
                vs.find('input, button').prop('disabled', true);
                vs.find('button').button();
                const rr = vs.find('.cam-resolution').parents('.sett-row');
@@ -80,14 +96,50 @@ var VideoSettings = (function() {
                recBtn.prop('disabled', !recAllowed && (s.video.cam > -1 || 
s.video.mic > -1)).button('refresh');
        }
        function _readValues() {
+               const v = cam.find('option:selected')
+                       , m = mic.find('option:selected')
+                       , o = res.find('option:selected').data();
                s.video.cam = 1 * cam.val();
                s.video.mic = 1 * mic.val();
-               const o = res.find('option:selected').data();
                s.video.width = o.width;
                s.video.height = o.height;
-               $(swf).attr('width', Math.max(300, 
s.video.width)).attr('height', Math.max(200, s.video.height));
+               vid.width(o.width).height(o.height);
                vidScroll.scrollLeft(Math.max(0, s.video.width / 2 - 150))
                        .scrollTop(Math.max(0, s.video.height / 2 - 110));
+               _clear();
+               let enabled = false;
+               const constraints = {};
+               //TODO add check if constraint is supported
+               if (s.video.cam > -1) {
+                       constraints.video = {
+                               width: o.width
+                               , height: o.height
+                               , deviceId: { exact: v.data('device-id')  }
+                               , frameRate: { max: 30 }
+                       };
+                       enabled = true;
+               } else {
+                       constraints.video = false;
+               }
+               //TODO enable audio for recordings only
+               if (s.video.mic > -1) {
+                       constraints.audio = {
+                               sampleSize: 22
+                               , echoCancellation: true
+                       };
+                       enabled = true;
+               } else {
+                       constraints.audio = false;
+               }
+               if (enabled) {
+                       navigator.mediaDevices.getUserMedia(constraints)
+                               .then(function(stream) {
+                                       vid[0].srcObject = stream;
+                               })
+                               .catch(function(err) {
+                                       _error(err.name + ": " + err.message);
+                               });
+               }
                _updateRec();
        }
 
@@ -102,53 +154,75 @@ var VideoSettings = (function() {
        function _micActivity(level) {
                lm.progressbar("value", Math.max(0, level));
        }
-       function _initSwf() {
-               const obj = swf.getDevices();
-               cam.find('option[value!="-1"]').remove();
-               for (let i = 0; i < obj.cams.length; ++i) {
-                       const o = $('<option></option>').attr('value', 
i).text(obj.cams[i]);
-                       if (i === s.video.cam) {
-                               o.prop('selected', true);
-                       }
-                       cam.append(o);
+       function _error(msg) {
+               //FIXME TODO status field
+               console.error(msg);
+       }
+       function _initDevices() {
+               if (!navigator.mediaDevices || 
!navigator.mediaDevices.enumerateDevices) {
+                       _error("enumerateDevices() not supported.");
+                       return;
                }
-               cam.prop('disabled', false).change(function() {
-                       _readValues();
-                       swf.camChanged(s.video.cam);
-               });
+               cam.find('option[value!="-1"]').remove();
                mic.find('option[value!="-1"]').remove();
-               for (let i = 0; i < obj.mics.length; ++i) {
-                       const o = $('<option></option>').attr('value', 
i).text(obj.mics[i]);
-                       if (i === s.video.mic) {
-                               o.prop('selected', true);
-                       }
-                       mic.append(o);
-               }
-               mic.prop('disabled', false).change(function() {
-                       _readValues();
-                       swf.micChanged(s.video.mic);
-               });
-               res.change(function() {
-                       _readValues();
-                       swf.resChanged(s.video.width, s.video.height);
-               });
-               res.find('option').each(function() {
-                       const o = $(this).data();
-                       if (o.width === s.video.width && o.height === 
s.video.height) {
-                               $(this).prop('selected', true);
-                               return false;
-                       }
-               });
-               _readValues();
-               swf.init(s.video.cam, s.video.mic, s.video.width, 
s.video.height);
+               navigator.mediaDevices.getUserMedia({video:true, audio:true})
+                       .then(function(stream) {
+                               return navigator.mediaDevices.enumerateDevices()
+                                       .then(function(devices) {
+                                               return devices;
+                                       })
+                                       .catch(function(err) { throw err; });
+                       })
+                       .then(function(devices) {
+                               let cCount = 0, mCount = 0;
+                               devices.forEach(function(device) {
+                                       if ('audioinput' === device.kind) {
+                                               const o = 
$('<option></option>').attr('value', mCount).text(device.label)
+                                                       .data('device-id', 
device.deviceId);
+                                               if (mCount === s.video.cam) {
+                                                       o.prop('selected', 
true);
+                                               }
+                                               mic.append(o);
+                                               mCount++;
+                                       } else if ('videoinput' === 
device.kind) {
+                                               const o = 
$('<option></option>').attr('value', cCount).text(device.label)
+                                                       .data('device-id', 
device.deviceId);
+                                               if (cCount === s.video.cam) {
+                                                       o.prop('selected', 
true);
+                                               }
+                                               cam.append(o);
+                                               cCount++;
+                                       }
+                               });
+                               cam.prop('disabled', false).change(function() {
+                                       _readValues();
+                               });
+                               mic.prop('disabled', false).change(function() {
+                                       _readValues();
+                               });
+                               res.change(function() {
+                                       _readValues();
+                               });
+                               res.find('option').each(function() {
+                                       const o = $(this).data();
+                                       if (o.width === s.video.width && 
o.height === s.video.height) {
+                                               $(this).prop('selected', true);
+                                               return false;
+                                       }
+                               });
+                               _readValues();
+                       })
+                       .catch(function(err) {
+                               _error(err.name + ": " + err.message);
+                       });
        }
        function _open() {
                recAllowed = false;
                vs.dialog('open');
+               _initDevices();
        }
        return {
                init: _init
-               , initSwf: _initSwf
                , open: _open
                , allowRec: _allowRec
                , allowPlay: _allowPlay
diff --git a/openmeetings-web/src/test/jetty/jetty-ssl.xml 
b/openmeetings-web/src/test/jetty/jetty-ssl.xml
index dad4b38..a739639 100644
--- a/openmeetings-web/src/test/jetty/jetty-ssl.xml
+++ b/openmeetings-web/src/test/jetty/jetty-ssl.xml
@@ -23,8 +23,8 @@
 <!-- ============================================================= -->
 <Configure id="sslContextFactory" 
class="org.eclipse.jetty.util.ssl.SslContextFactory">
   <Set name="KeyStorePath"><Property 
name="maven.project.build.directory.test-classes" default="." />/<Property 
name="jetty.keystore" default="keystore"/></Set>
-  <Set name="KeyStorePassword"><Property name="jetty.keystore.password" 
default="wicket"/></Set>
-  <Set name="KeyManagerPassword"><Property name="jetty.keymanager.password" 
default="wicket"/></Set>
+  <Set name="KeyStorePassword"><Property name="jetty.keystore.password" 
default="openmeetings"/></Set>
+  <Set name="KeyManagerPassword"><Property name="jetty.keymanager.password" 
default="openmeetings"/></Set>
   <Set name="EndpointIdentificationAlgorithm"></Set>
   <Set name="ExcludeCipherSuites">
     <Array type="String">
diff --git a/openmeetings-web/src/test/jetty/jetty.xml 
b/openmeetings-web/src/test/jetty/jetty.xml
index edaeb72..8ddca51 100644
--- a/openmeetings-web/src/test/jetty/jetty.xml
+++ b/openmeetings-web/src/test/jetty/jetty.xml
@@ -23,7 +23,7 @@
        <New id="httpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
                <Set name="secureScheme">https</Set>
                <Set name="securePort">
-                       <Property name="jetty.secure.port" default="8443" />
+                       <Property name="jetty.secure.port" default="5443" />
                </Set>
                <Set name="outputBufferSize">32768</Set>
                <Set name="requestHeaderSize">8192</Set>
diff --git a/openmeetings-web/src/test/resources/keystore 
b/openmeetings-web/src/test/resources/keystore
new file mode 100644
index 0000000..8cc07dc
Binary files /dev/null and b/openmeetings-web/src/test/resources/keystore differ

-- 
To stop receiving notification emails like this one, please contact
[email protected].

Reply via email to