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 d1e3cd4 [OPENMEETINGS-1352] initial JS sharing dialog
d1e3cd4 is described below
commit d1e3cd4dbf539dd5f9f0df65858fc1cb0f7390aa
Author: Maxim Solodovnik <[email protected]>
AuthorDate: Thu Oct 25 23:26:45 2018 +0700
[OPENMEETINGS-1352] initial JS sharing dialog
---
.../org/apache/openmeetings/core/remote/KRoom.java | 7 +++--
.../openmeetings/core/remote/KurentoHandler.java | 26 +++++++++++++----
.../apache/openmeetings/web/room/RoomPanel.html | 33 ++++++++++++++++++++++
.../apache/openmeetings/web/room/RoomPanel.java | 4 +--
.../openmeetings/web/room/menu/ActionsSubMenu.java | 2 +-
.../openmeetings/web/room/menu/RoomMenuPanel.html | 2 +-
.../web/room/menu/StartSharingButton.java | 18 ++----------
.../org/apache/openmeetings/web/room/raw-room.js | 33 +++++++++++++++++++++-
.../org/apache/openmeetings/web/room/raw-video.js | 5 +++-
openmeetings-web/src/main/webapp/css/raw-room.css | 7 +++++
10 files changed, 107 insertions(+), 30 deletions(-)
diff --git
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KRoom.java
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KRoom.java
index 7164f62..9fd35d7 100644
---
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KRoom.java
+++
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KRoom.java
@@ -177,14 +177,17 @@ public class KRoom {
return sharingStarted.get();
}
- public void startSharing(KurentoHandler h, IClientManager cm, Client c)
{
+ public void startSharing(KurentoHandler h, IClientManager cm, Client c,
JSONObject msg) {
if (sharingStarted.compareAndSet(false, true)) {
StreamDesc sd = c.addStream(StreamType.SCREEN);
+
sd.setWidth(msg.getInt("width")).setHeight(msg.getInt("height"));
cm.update(c);
log.debug("User {}: has started broadcast",
sd.getUid());
h.sendClient(sd.getSid(), newKurentoMsg()
.put("id", "broadcast")
- .put("stream", sd.toJson())
+ .put("stream", sd.toJson()
+ .put("shareType",
msg.getString("shareType"))
+ .put("fps",
msg.getString("fps")))
.put("iceServers", h.getTurnServers()));
}
}
diff --git
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KurentoHandler.java
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KurentoHandler.java
index a0a94a3..6e0355d 100644
---
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KurentoHandler.java
+++
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KurentoHandler.java
@@ -52,6 +52,7 @@ import org.apache.openmeetings.db.entity.basic.IWsClient;
import org.apache.openmeetings.db.entity.record.Recording;
import org.apache.openmeetings.db.entity.room.Room;
import org.apache.openmeetings.db.entity.room.Room.Right;
+import org.apache.openmeetings.db.entity.room.Room.RoomElement;
import org.apache.openmeetings.db.manager.IClientManager;
import org.apache.openmeetings.db.util.ws.RoomMessage;
import org.apache.openmeetings.db.util.ws.TextRoomMessage;
@@ -275,6 +276,11 @@ public class KurentoHandler {
sender.addListener(this,
c.getSid(), c.getUid(), msg.getString("sdpOffer"));
}
break;
+ case "wannaShare":
+ if (screenShareAllowed(c)) {
+ startSharing(c, msg);
+ }
+ break;
}
}
}
@@ -299,7 +305,7 @@ public class KurentoHandler {
if (room.isSharing()) {
List<StreamDesc> streams =
cm.listByRoom(roomId).parallelStream()
.flatMap(c -> c.getStreams().stream())
- .filter(sd -> StreamType.SCREEN !=
sd.getType()).collect(Collectors.toList());
+ .filter(sd -> StreamType.SCREEN ==
sd.getType()).collect(Collectors.toList());
if (streams.isEmpty()) {
log.info("No more screen streams in the room,
stopping sharing");
room.stopSharing();
@@ -335,10 +341,12 @@ public class KurentoHandler {
boolean changed = false;
for (StreamDesc sd : c.getStreams()) {
KStream s = getByUid(sd.getUid());
- if (s != null) {
+ if (StreamType.WEBCAM == sd.getType()) {
+ if (s != null) {
+ s.stopBroadcast(this);
+ }
c.removeStream(sd.getUid());
changed = true;
- s.stopBroadcast(this);
}
}
if (changed) {
@@ -408,8 +416,16 @@ public class KurentoHandler {
return getRoom(roomId).getRecordingUser();
}
- public void startSharing(Client c) {
- getRoom(c.getRoomId()).startSharing(this, cm, c);
+ public boolean screenShareAllowed(Client c) {
+ Room r = c.getRoom();
+ return r != null && Room.Type.interview != r.getType()
+ && !r.isHidden(RoomElement.ScreenSharing)
+ && r.isAllowRecording() &&
c.hasRight(Right.share)
+ && !isSharing(r.getId());
+ }
+
+ private void startSharing(Client c, JSONObject msg) {
+ getRoom(c.getRoomId()).startSharing(this, cm, c, msg);
}
public boolean isSharing(Long roomId) {
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 188dec7..a153ecc 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
@@ -86,6 +86,39 @@
<span class="badge">0</span>
</div>
</div>
+ <div id="sharer" wicket:message="title:730">
+ <div>
+ <span class="label"><wicket:message
key="734"/></span>
+ <select name="type" class="type">
+ <option value="screen">Screen</option>
+ <option value="window">Window</option>
+ <option
value="application">Application</option>
+ </select>
+ </div>
+ <div>
+ <span class="label"><wicket:message
key="740"/></span>
+ <input class="width" type="number" value="800"/>
+ </div>
+ <div>
+ <span class="label"><wicket:message
key="741"/></span>
+ <input class="height" type="number"
value="600"/>
+ </div>
+ <div>
+ <span class="label"><wicket:message
key="1089"/></span>
+ <select name="fps" class="fps">
+ <option value="2">2 FPS</option>
+ <option value="5">5 FPS</option>
+ <option value="10" selected>10
FPS</option>
+ <option value="15">15 FPS</option>
+ <option value="20">20 FPS</option>
+ <option value="25">25 FPS</option>
+ <option value="30">30 FPS</option>
+ </select>
+ </div>
+ <hr/>
+ <button class="share-start-stop"
wicket:message="data-start:732, data-stop:733"><wicket:message
key="732"/></button>
+ <button class="record-start-stop ui-state-error"
wicket:message="data-start:871, data-stop:872"><wicket:message
key="872"/></button>
+ </div>
</div>
</wicket:panel>
</html>
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 adc6f6f..6280061 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
@@ -738,9 +738,7 @@ public class RoomPanel extends BasePanel {
}
public boolean screenShareAllowed() {
- return !interview && !r.isHidden(RoomElement.ScreenSharing)
- && r.isAllowRecording() &&
getClient().hasRight(Right.share)
- && !kHandler.isSharing(r.getId());
+ return kHandler.screenShareAllowed(getClient());
}
public RoomSidebar getSidebar() {
diff --git
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/ActionsSubMenu.java
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/ActionsSubMenu.java
index 42feac2..be5f7ad 100644
---
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/ActionsSubMenu.java
+++
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/ActionsSubMenu.java
@@ -78,7 +78,7 @@ public class ActionsSubMenu implements Serializable {
@Override
public void onClick(AjaxRequestTarget target) {
- shareBtn.onClick(target);
+
target.appendJavaScript(String.format("$('#%s').click()",
shareBtn.getMarkupId()));
}
};
applyModerMenuItem = new RoomMenuItem(mp.getString("784"),
mp.getString("1481"), false) {
diff --git
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.html
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.html
index 1d826e5..383bff3 100644
---
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.html
+++
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.html
@@ -25,7 +25,7 @@
<span class="icon shared ui-button ui-corner-all ui-widget"
wicket:message="data-user:692, data-text:850, data-view:848"
role="button" style="display: none;"></span>
<span wicket:id="ask" class="icon ask"></span>
- <span wicket:id="share" class="icon share"
wicket:message="title:732"></span>
+ <span wicket:id="share" class="icon share"
wicket:message="title:732" onclick="Room.share();"></span>
<span wicket:id="roomName" class="room name"></span>
<span wicket:id="tag" class="room name"></span>
<span wicket:id="logo" class="icon"></span>
diff --git
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/StartSharingButton.java
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/StartSharingButton.java
index fd05fec..12d1d81 100644
---
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/StartSharingButton.java
+++
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/StartSharingButton.java
@@ -18,27 +18,13 @@
*/
package org.apache.openmeetings.web.room.menu;
-import org.apache.openmeetings.core.remote.KurentoHandler;
-import org.apache.openmeetings.web.common.OmButton;
-import org.apache.openmeetings.web.room.RoomPanel;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.spring.injection.annot.SpringBean;
+import com.googlecode.wicket.jquery.ui.form.button.Button;
-public class StartSharingButton extends OmButton {
+public class StartSharingButton extends Button {
private static final long serialVersionUID = 1L;
- @SpringBean
- private KurentoHandler kHandler;
public StartSharingButton(String id) {
super(id);
setOutputMarkupId(true).setOutputMarkupPlaceholderTag(true);
}
-
- @Override
- public void onClick(AjaxRequestTarget target) {
- RoomPanel rp = findParent(RoomPanel.class);
- if (rp.screenShareAllowed()) {
- kHandler.startSharing(rp.getClient());
- }
- }
}
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 cf527c7..e53926c 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
@@ -1,7 +1,7 @@
/* Licensed under the Apache License, Version 2.0 (the "License")
http://www.apache.org/licenses/LICENSE-2.0 */
var Room = (function() {
const self = {}, sbSide = Settings.isRtl ? 'right' : 'left';
- let options, menuHeight, chat, sb, dock, activities;
+ let options, menuHeight, chat, sb, dock, activities, sharer;
function _init(_options) {
options = _options;
@@ -43,6 +43,30 @@ var Room = (function() {
if (typeof(Activities) !== 'undefined') {
Activities.init();
}
+ sharer = $('#sharer').dialog({
+ width: 450
+ , autoOpen: false
+ });
+ const type = sharer.find('select.type').selectmenu({
+ width: 150
+ }), fps = sharer.find('select.fps').selectmenu({
+ width: 120
+ }), sbtn = sharer.find('.share-start-stop').button({
+ icon: 'ui-icon-image'
+ });
+ sbtn.click(function() {
+ sbtn.button('disable');
+ VideoManager.sendMessage({
+ id: 'wannaShare'
+ , shareType: type.val()
+ , fps: fps.val()
+ , width: sharer.find('.width').val()
+ , height: sharer.find('.height').val()
+ });
+ });
+ sharer.find('.record-start-stop').button({
+ icon: 'ui-icon-bullet'
+ });
}
function _getSelfAudioClient() {
const vw = $('#video' + Room.getOptions().uid);
@@ -187,6 +211,9 @@ var Room = (function() {
$(window).off('keyup', _keyHandler);
$(document).off('click', _mouseHandler);
sb = undefined;
+ if (sharer && sharer.dialog('instance')) {
+ sharer.dialog('close');
+ }
}
function _showClipboard(txt) {
const dlg = $('#clipboard-dialog');
@@ -251,6 +278,9 @@ var Room = (function() {
}
OmUtil.tmpl('#quick-vote-template', 'quick-vote');
}
+ function _share() {
+ sharer.dialog('open');
+ }
self.init = _init;
self.getMenuHeight = function() { return menuHeight; };
@@ -267,6 +297,7 @@ var Room = (function() {
self.unload = _unload;
self.showClipboard = _showClipboard;
self.quickPoll = _quickPoll;
+ self.share = _share;
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 24325ee..1d2daf5 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
@@ -60,7 +60,10 @@ var Video = (function() {
//
https://mozilla.github.io/webrtc-landing/gum_test.html
const cnts = {
video: {
- mediaSource: 'screen' //
'window'/'application' //FIXME TODO different behavior
+ mediaSource: sd.shareType
+ , frameRate: sd.fps //TODO ideal
+ //TODO ideal width
+ //TODO ideal height
}};
navigator.mediaDevices.getUserMedia(cnts).then(function(stream) {
callback(msg, cnts, stream);
diff --git a/openmeetings-web/src/main/webapp/css/raw-room.css
b/openmeetings-web/src/main/webapp/css/raw-room.css
index 4a4b3e8..f938256 100644
--- a/openmeetings-web/src/main/webapp/css/raw-room.css
+++ b/openmeetings-web/src/main/webapp/css/raw-room.css
@@ -572,6 +572,13 @@ ul.settings-menu {
display: inline-block;
float: right;
}
+#sharer .label {
+ width: 215px;
+ display: inline-block;
+}
+#sharer input {
+ width: 75px;
+}
@media screen and (max-width: 1280px) {
.room.sidebar {
width: 155px;