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 2019/03/09 14:13:23 UTC

[openmeetings] branch master updated: [OPENMEETINGS-2031] 'mute others' icon is added

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 80b3cb6  [OPENMEETINGS-2031] 'mute others' icon is added
80b3cb6 is described below

commit 80b3cb663e6073bd9e45be1cd2eab3139227c217
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Sat Mar 9 21:13:05 2019 +0700

    [OPENMEETINGS-2031] 'mute others' icon is added
---
 .../apache/openmeetings/core/remote/AbstractStream.java   |  6 +++++-
 .../java/org/apache/openmeetings/core/remote/KStream.java |  8 +++++---
 .../org/apache/openmeetings/core/remote/KTestStream.java  |  2 +-
 .../org/apache/openmeetings/db/entity/basic/Client.java   |  6 +++---
 .../java/org/apache/openmeetings/web/room/RoomPanel.html  |  1 +
 .../java/org/apache/openmeetings/web/room/raw-room.js     | 12 +++++++++++-
 .../java/org/apache/openmeetings/web/room/raw-video.js    | 15 ++++++++++++---
 openmeetings-web/src/main/webapp/css/raw-room.css         | 15 ++++++++++++++-
 8 files changed, 52 insertions(+), 13 deletions(-)

diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/AbstractStream.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/AbstractStream.java
index 462711b..1224288 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/AbstractStream.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/AbstractStream.java
@@ -41,7 +41,11 @@ public abstract class AbstractStream {
 		return uid;
 	}
 
-	public abstract void release(IStreamProcessor processor);
+	public void release(IStreamProcessor processor) {
+		release(processor, true);
+	}
+
+	public abstract void release(IStreamProcessor processor, boolean remove);
 
 	public WebRtcEndpoint createWebRtcEndpoint(MediaPipeline pipeline) {
 		return new WebRtcEndpoint.Builder(pipeline).build();
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KStream.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KStream.java
index ed18d9e..aa3466f 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KStream.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KStream.java
@@ -75,7 +75,7 @@ public class KStream extends AbstractStream {
 
 	public KStream startBroadcast(final StreamProcessor processor, final StreamDesc sd, final String sdpOffer) {
 		if (outgoingMedia != null) {
-			release(processor);
+			release(processor, false);
 		}
 		final boolean hasAudio = sd.hasActivity(Activity.AUDIO);
 		final boolean hasVideo = sd.hasActivity(Activity.VIDEO);
@@ -285,14 +285,16 @@ public class KStream extends AbstractStream {
 	}
 
 	@Override
-	public void release(IStreamProcessor processor) {
+	public void release(IStreamProcessor processor, boolean remove) {
 		if (outgoingMedia != null) {
 			releaseListeners();
 			outgoingMedia.release();
 			outgoingMedia = null;
 		}
 		releaseRecorder();
-		processor.release(this);
+		if (remove) {
+			processor.release(this);
+		}
 	}
 
 	private void releaseRecorder() {
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KTestStream.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KTestStream.java
index b3395fd..b167220 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KTestStream.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KTestStream.java
@@ -216,7 +216,7 @@ public class KTestStream extends AbstractStream {
 	}
 
 	@Override
-	public void release(IStreamProcessor processor) {
+	public void release(IStreamProcessor processor, boolean remove) {
 		if (webRtcEndpoint != null) {
 			webRtcEndpoint.release();
 			webRtcEndpoint = null;
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 129f836..97b7427 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
@@ -374,18 +374,18 @@ public class Client implements IDataProviderEntity, IWsClient {
 	public void merge(Client c) {
 		user = c.user;
 		room = c.room;
-		Set<Right> rr = new HashSet<>(c.rights);
 		synchronized (rights) {
+			Set<Right> rr = new HashSet<>(c.rights);
 			rights.clear();
 			rights.addAll(rr);
 		}
-		Set<Activity> aa = new HashSet<>(c.activities);
 		synchronized (activities) {
+			Set<Activity> aa = new HashSet<>(c.activities);
 			activities.clear();
 			activities.addAll(aa);
 		}
-		Map<String, StreamDesc> ss = new HashMap<>(c.streams);
 		synchronized (streams) {
+			Map<String, StreamDesc> ss = new HashMap<>(c.streams);
 			streams.clear();
 			for (Entry<String, StreamDesc> e : ss.entrySet()) {
 				streams.put(e.getKey(), new StreamDesc(e.getValue()));
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 62a8efd..15f281a 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
@@ -44,6 +44,7 @@
 		<div id="user-video">
 			<div class="video">
 				<div class="level-meter" wicket:message="title:767"></div>
+				<div class="mute-others" wicket:message="title:video.muteothers"></div>
 			</div>
 			<div class="footer ui-state-highlight">
 				<div class="on"><wicket:message key="video.mic.on"/></div>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-room.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-room.js
index dc087ba..264f5ae 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-room.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-room.js
@@ -225,11 +225,20 @@ var Room = (function() {
 			]
 		});
 	}
+	function _hasRight(_rights) {
+		const rights = Array.isArray(_rights) ? _rights : [];
+		for (let i = 0; i < rights.length; ++i) {
+			if (options.rights.includes(rights[i])) {
+				return true;
+			}
+		}
+		return false;
+	}
 	function _setQuickPollRights() {
 		const close = $('#quick-vote .close');
 		if (close.length === 1) {
 			close.off();
-			if (options.rights.includes('superModerator') || options.rights.includes('moderator') || options.rights.includes('presenter')) {
+			if (_hasRight(['superModerator', 'moderator', 'presenter'])) {
 				close.show().click(function() {
 					const _qconf = $('#quick-confirmation');
 					_qconf.dialog({
@@ -307,6 +316,7 @@ var Room = (function() {
 	self.unload = _unload;
 	self.showClipboard = _showClipboard;
 	self.quickPoll = _quickPoll;
+	self.hasRight = _hasRight;
 	return self;
 })();
 function startPrivateChat(el) {
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 0e070d5..79897fe 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
@@ -3,7 +3,7 @@ var Video = (function() {
 	const self = {};
 	let sd, v, vc, t, f, size, vol, slider, handle, video, rtcPeer
 		, lastVolume = 50, muted = false, aCtx, aSrc, aDest, gainNode
-		, lm, level, userSpeaks = false;
+		, lm, level, userSpeaks = false, muteOthers;
 
 	function _getExtra() {
 		return t.height() + 2 + (f.is(':visible') ? f.height() : 0);
@@ -92,7 +92,7 @@ var Video = (function() {
 						vol.show();
 						lm = vc.find('.level-meter')
 							.kendoProgressBar({ value: 0, showStatus: false, orientation: 'vertical' });
-						lm.height(vc.height() - 10);
+						lm.height(vc.height() - 10).show();
 						aCtx = new AudioContext();
 						gainNode = aCtx.createGain();
 						aSrc = aCtx.createMediaStreamSource(stream);
@@ -379,6 +379,7 @@ var Video = (function() {
 		v.on('remove', _cleanup);
 		vc = v.find('.video');
 		vc.width(_w).height(_h);
+		muteOthers = vc.find('.mute-others');
 
 		_refresh(msg);
 
@@ -429,7 +430,14 @@ var Video = (function() {
 			}
 		}
 	}
-	function _setRights(_r) {
+	function _setRights() {
+		if (Room.hasRight(['superModerator', 'moderator', 'muteOthers']) && VideoUtil.hasAudio(sd)) {
+			muteOthers.addClass('enabled').click(function() {
+				VideoManager.clickMuteOthers(sd.uid);
+			});
+		} else {
+			muteOthers.removeClass('enabled').off();
+		}
 	}
 	function _cleanup() {
 		OmUtil.log('Disposing participant ' + sd.uid);
@@ -463,6 +471,7 @@ var Video = (function() {
 		if (!!lm && lm.length > 0) {
 			_micActivity(0);
 			lm.hide();
+			muteOthers.removeClass('enabled').off();
 		}
 		if (!!level) {
 			level.dispose();
diff --git a/openmeetings-web/src/main/webapp/css/raw-room.css b/openmeetings-web/src/main/webapp/css/raw-room.css
index be3fadf..7337177 100644
--- a/openmeetings-web/src/main/webapp/css/raw-room.css
+++ b/openmeetings-web/src/main/webapp/css/raw-room.css
@@ -205,7 +205,7 @@
 .right.camera.ui-icon.granted {
 	background-image: url(images/webcam_delete.png);
 }
-.mute-others.ui-icon {
+.mute-others {
 	background-image: url(images/microphone_muteothers.png);
 }
 .restart.ui-icon {
@@ -579,6 +579,19 @@ ul.settings-menu {
 #sharer input {
 	width: 75px;
 }
+.video .mute-others {
+	position: absolute;
+	top: calc(50% - 32px);
+	left: calc(50% - 32px);
+	width: 64px;
+	height: 64px;
+	background-size: 64px;
+	z-index: 2;
+	display: none;
+}
+.video:hover .mute-others.enabled {
+	display: block;
+}
 @media screen and (max-width: 1280px) {
 	.room.sidebar {
 		width: 155px;