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;