You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2018/07/19 14:54:34 UTC

[openmeetings] branch 4.0.x updated: [OPENMEETINGS-1142] secure mode and device list retrieval are removed

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

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


The following commit(s) were added to refs/heads/4.0.x by this push:
     new 6690b77  [OPENMEETINGS-1142] secure mode and device list retrieval are removed
6690b77 is described below

commit 6690b776f9c6ad7545659a9b008e4ba67c9e62e1
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Thu Jul 19 21:54:25 2018 +0700

    [OPENMEETINGS-1142] secure mode and device list retrieval are removed
---
 openmeetings-flash/src/main/flex/main.mxml         |   6 --
 .../main/flex/org/apache/openmeetings/OmVideo.as   |  40 +++++---
 .../org/apache/openmeetings/web/common/main.js     |  28 ++++++
 .../org/apache/openmeetings/web/room/settings.js   | 109 ++++++++++++++-------
 .../java/org/apache/openmeetings/web/room/video.js |   2 +
 openmeetings-web/src/main/webapp/css/room.css      |   4 +
 6 files changed, 135 insertions(+), 54 deletions(-)

diff --git a/openmeetings-flash/src/main/flex/main.mxml b/openmeetings-flash/src/main/flex/main.mxml
index 53c6432..135161e 100644
--- a/openmeetings-flash/src/main/flex/main.mxml
+++ b/openmeetings-flash/src/main/flex/main.mxml
@@ -138,12 +138,6 @@
 			ExternalInterface.addCallback("vidResize", vidResize);
 			switch (params.mode) {
 				case 'settings': {
-					ExternalInterface.addCallback("getDevices", function ():Object {
-						return {
-							cams: Camera.names
-							, mics: Microphone.names
-						};
-					});
 					ExternalInterface.addCallback("camChanged", function (val:int):void {
 						selectedCam = val;
 						camChanged(null);
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 dd04138..52c02c0 100644
--- a/openmeetings-flash/src/main/flex/org/apache/openmeetings/OmVideo.as
+++ b/openmeetings-flash/src/main/flex/org/apache/openmeetings/OmVideo.as
@@ -57,6 +57,7 @@ public class OmVideo {
 	private var volume:int = 50;
 	private var lastVolume:int = 50;
 	private var cursorCbk:Function = null;
+	private var vidRect:Object = {x: 0, y: 0, width: 0, height: 0};
 
 	public function OmVideo(ui:UIComponent, params:Object, cursorCbk:Function = null) {
 		this.ui = ui;
@@ -67,8 +68,10 @@ public class OmVideo {
 	private function getVideo():Video {
 		if (vid === null) {
 			vid = new Video();
-			vid.width = width;
-			vid.height = height;
+			vid.width = vidRect.width || width;
+			vid.height = vidRect.height || height;
+			vid.x = vidRect.x || 0;
+			vid.y = vidRect.y || 0;
 			ui.addChild(vid);
 		}
 		return vid;
@@ -78,33 +81,43 @@ public class OmVideo {
 		return mic;
 	}
 
-	public function resize(_width:int, _height:int):void {
-		debug("resize:: " + _width + "x" + _height);
-		this.width = ui.width = _width;
-		this.height = ui.height = _height;
+	private function setBg():void {
 		var g:Graphics = ui.graphics;
 		if (!!cam && !cam.muted) {
 			g.beginFill(0x000000, 1);
-			g.drawRect(0, 0, _width, _height);
+			g.drawRect(0, 0, this.width, this.height);
 			g.endFill();
 		} else {
 			g.clear();
 		}
 	}
 
+	public function resize(_width:int, _height:int):void {
+		debug("resize:: " + _width + "x" + _height);
+		this.width = ui.width = _width;
+		this.height = ui.height = _height;
+		setBg();
+	}
+
 	public function vidResize(_width:int, _height:int):void {
 		debug("vidResize:: " + _width + "x" + _height);
-		vid.width = _width;
-		vid.height = _height;
+		vidRect.width = _width;
+		vidRect.height = _height;
 		if (_width < this.width) {
-			vid.x = (this.width - _width) / 2;
+			vidRect.x = (this.width - _width) / 2;
 		} else {
-			vid.x = 0;
+			vidRect.x = 0;
 		}
 		if (_height < this.height) {
-			vid.y = (this.height - _height) / 2;
+			vidRect.y = (this.height - _height) / 2;
 		} else {
-			vid.y = 0;
+			vidRect.y = 0;
+		}
+		if (!!vid) {
+			vid.width = vidRect.width;
+			vid.height = vidRect.height;
+			vid.x = vidRect.x;
+			vid.y = vidRect.y;
 		}
 	}
 
@@ -235,6 +248,7 @@ public class OmVideo {
 			debug("::camera settings ", cam.keyFrameInterval, cam.width, cam.height, cam.fps);
 			videoStreamSettings.setMode(cam.width, cam.height, cam.fps);
 			ns.videoStreamSettings = videoStreamSettings;
+			setBg();
 		}
 		ns.attachAudio(mic);
 		_setVolume(volume);
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/main.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/main.js
index 1745c0c..e910382 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/main.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/main.js
@@ -23,6 +23,7 @@ var Settings = (function() {
 	};
 })();
 var OmUtil = (function() {
+	let options, errs;
 	const self = {};
 	function _confirmDlg(_id, okHandler) {
 		const confirm = $('#' + _id);
@@ -49,13 +50,40 @@ var OmUtil = (function() {
 	function _tmpl(tmplId, newId) {
 		return $(tmplId).clone().attr('id', newId || '');
 	}
+	function _error(msg) {
+		if (typeof(msg) === 'object') {
+			msg = msg.name + ": " + msg.message;
+		}
+		if (!!errs && errs.length > 0) {
+			errs.data("kendoNotification").show(msg, "error");
+		}
+		return console.error(msg);
+	}
+	function _debugEnabled() {
+		return !!options && !!options.debug;
+	}
+	function _info() {
+		if (_debugEnabled()) {
+			console.info.apply(this, arguments);
+		}
+	}
+	function _log() {
+		if (_debugEnabled()) {
+			console.log.apply(this, arguments);
+		}
+	}
 
 	self.confirmDlg = _confirmDlg;
 	self.tmpl = _tmpl;
+	self.debugEnabled = _debugEnabled;
+	self.enableDebug = function() { if (!!options) { options.debug = true; } };
 	self.sendMessage = function(m) {
 		const msg = JSON.stringify(m || {});
 		Wicket.WebSocket.send(msg);
 	};
+	self.error = _error;
+	self.info = _info;
+	self.log = _log;
 	return self;
 })();
 Wicket.BrowserInfo.collectExtraInfo = function(info) {
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 621cb6c..4d39f05 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
@@ -18,6 +18,17 @@ var VideoSettings = (function() {
 			VideoManager.refresh(o.uid, s.video);
 		}
 	}
+	function _clear(_ms) {
+		const ms = _ms;
+		if (ms !== null && 'function' === typeof(ms.getAudioTracks)) {
+			ms.getAudioTracks().forEach(function(track) {
+				track.stop();
+			});
+			ms.getVideoTracks().forEach(function(track) {
+				track.stop();
+			});
+		}
+	}
 	function _init(options) {
 		o = JSON.parse(JSON.stringify(options));
 		vs = $('#video-settings');
@@ -102,43 +113,71 @@ 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 _initDevices() {
+		if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {
+			OmUtil.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;
-			}
-		});
+		navigator.mediaDevices.getUserMedia({video:true, audio:true})
+			.then(function(stream) {
+				const devices = navigator.mediaDevices.enumerateDevices()
+					.then(function(devices) {
+						return devices;
+					})
+					.catch(function(err) { throw err; });
+				_clear(stream);
+				return devices;
+			})
+			.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).off().change(function() {
+					_readValues();
+					swf.camChanged(s.video.cam);
+				});
+				mic.prop('disabled', false).off().change(function() {
+					_readValues();
+					swf.micChanged(s.video.mic);
+				});
+				res.off().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();
+			})
+			.catch(function(err) {
+				OmUtil.error(err);
+			});
+	}
+	function _initSwf() {
+		_initDevices();
 		_readValues();
 		swf.init(s.video.cam, s.video.mic
 			, o.interview ? 320 : s.video.width, o.interview ? 260 : s.video.height);
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/video.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/video.js
index a359503..34fdcfe 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/video.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/video.js
@@ -36,6 +36,7 @@ var Video = (function() {
 	}
 	function _swfLoaded() {
 		if (Room.getOptions().interview) {
+			v.parent().parent().removeClass('secure');
 			_resizePod();
 		} else {
 			const h = _resizeDlg(size.width, size.height);
@@ -45,6 +46,7 @@ var Video = (function() {
 	function _securityMode() {
 		if (Room.getOptions().interview) {
 			_resizeDlgArea(Math.max(300, swf.attr('width')), Math.max(200, swf.attr('height')));
+			v.parent().parent().addClass('secure');
 		} else {
 			v.dialog('option', 'position', {my: 'center', at: 'center', of: VideoUtil.container()});
 		}
diff --git a/openmeetings-web/src/main/webapp/css/room.css b/openmeetings-web/src/main/webapp/css/room.css
index f61c6a0..cbca4bb 100644
--- a/openmeetings-web/src/main/webapp/css/room.css
+++ b/openmeetings-web/src/main/webapp/css/room.css
@@ -527,6 +527,10 @@
 .pod-area .pod-big.ui-hightlight {
 	box-shadow: 3px 3px 4px blue;
 }
+.pod-area .pod.secure, .pod-area .pod.secure .ui-dialog.video.user-video.secure {
+	min-width: 300px;
+	min-height: 200px;
+}
 .width250 {
 	min-width: 250px;
 	max-width: 250px;