[OPENMEETINGS-551] screen-sharing improved, build is fixed
Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/bcfb736e Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/bcfb736e Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/bcfb736e Branch: refs/heads/master Commit: bcfb736ed62d53855dfd05d3df342db32c724ecd Parents: a260f5a Author: Maxim Solodovnik <[email protected]> Authored: Sun Apr 23 14:57:40 2017 +0000 Committer: Maxim Solodovnik <[email protected]> Committed: Sun Apr 23 14:57:40 2017 +0000 ---------------------------------------------------------------------- .../openmeetings/core/remote/MobileService.java | 8 +- .../core/remote/RecordingService.java | 10 +-- .../core/remote/ScopeApplicationAdapter.java | 9 +- .../core/session/SessionManager.java | 2 +- .../openmeetings/core/util/RoomHelper.java | 2 +- .../db/entity/room/StreamClient.java | 44 +++++----- .../openmeetings/web/app/Application.java | 4 +- .../apache/openmeetings/web/room/RoomPanel.java | 45 +++++----- .../web/room/menu/RoomMenuPanel.html | 2 + .../org/apache/openmeetings/web/room/room.js | 83 +++++++++++++------ .../src/main/webapp/css/images/shared.png | Bin 0 -> 1830 bytes openmeetings-web/src/main/webapp/css/room.css | 3 + 12 files changed, 121 insertions(+), 91 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/openmeetings/blob/bcfb736e/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java ---------------------------------------------------------------------- diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java index 3e571c2..a0d25fc 100644 --- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java +++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java @@ -261,7 +261,7 @@ public class MobileService { if (!Strings.isEmpty(c.getAvsettings()) && !c.isScreenClient()) { Map<String, Object> map = new HashMap<>(); add(map, "streamId", c.getStreamid()); - add(map, "broadCastId", c.getBroadCastID()); + add(map, "broadCastId", c.getBroadCastId()); add(map, "userId", c.getUserId()); add(map, "firstname", c.getFirstname()); add(map, "lastname", c.getLastname()); @@ -339,7 +339,7 @@ public class MobileService { StreamClient c = sessionManager.getClientByStreamId(current.getClient().getId(), null); Map<String, Object> result = new HashMap<>(); result.put("publicSid", c.getPublicSID()); - result.put("broadCastId", c.getBroadCastID()); + result.put("broadCastId", c.getBroadCastId()); return result; } @@ -348,7 +348,7 @@ public class MobileService { StreamClient c = sessionManager.getClientByStreamId(current.getClient().getId(), null); c.setAvsettings(avMode); if (!"n".equals(avMode)) { - c.setBroadCastID(nextBroadCastId()); + c.setBroadCastId("" + nextBroadCastId()); c.setIsBroadcasting(true); } c.setVWidth(Double.valueOf(width).intValue()); @@ -362,7 +362,7 @@ public class MobileService { hsm.put("message", new String[]{"avsettings", "0", avMode}); Map<String, Object> result = new HashMap<>(); if (!"n".equals(avMode)) { - result.put("broadcastId", c.getBroadCastID()); + result.put("broadcastId", c.getBroadCastId()); } scopeAdapter.sendMessageToCurrentScope("sendVarsToMessageWithClient", hsm, true, false); http://git-wip-us.apache.org/repos/asf/openmeetings/blob/bcfb736e/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/RecordingService.java ---------------------------------------------------------------------- diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/RecordingService.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/RecordingService.java index e0bcd21..96a6f4f 100644 --- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/RecordingService.java +++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/RecordingService.java @@ -165,7 +165,7 @@ public class RecordingService implements IPendingServiceCallback { } else if (rcl.getAvsettings().equals("av") || rcl.getAvsettings().equals("a") || rcl.getAvsettings().equals("v")) { // if the user does publish av, a, v // But we only record av or a, video only is not interesting - String broadcastId = "" + rcl.getBroadCastID(); + String broadcastId = rcl.getBroadCastId(); String streamName = generateFileName(recordingId, broadcastId); // Add Meta Data @@ -332,7 +332,7 @@ public class RecordingService implements IPendingServiceCallback { } } else if (rcl.getAvsettings().equals("av") || rcl.getAvsettings().equals("a") || rcl.getAvsettings().equals("v")) { - stopRecordingShow(scope, String.valueOf(rcl.getBroadCastID()).toString(), rcl.getRecordingMetaDataId()); + stopRecordingShow(scope, rcl.getBroadCastId(), rcl.getRecordingMetaDataId()); // Update Meta Data metaDataDao.updateEndDate(rcl.getRecordingMetaDataId(), new Date()); @@ -422,7 +422,7 @@ public class RecordingService implements IPendingServiceCallback { // FIXME: Is there really a need to stop it manually if the user // just stops the stream? - stopRecordingShow(scope, String.valueOf(rcl.getBroadCastID()), rcl.getRecordingMetaDataId()); + stopRecordingShow(scope, rcl.getBroadCastId(), rcl.getRecordingMetaDataId()); // Update Meta Data metaDataDao.updateEndDate(rcl.getRecordingMetaDataId(), new Date()); @@ -461,7 +461,7 @@ public class RecordingService implements IPendingServiceCallback { // if the user does publish av, a, v // But we only record av or a, video only is not interesting - String streamName = generateFileName(recordingId, String.valueOf(rcl.getBroadCastID()).toString()); + String streamName = generateFileName(recordingId, rcl.getBroadCastId()); // Add Meta Data boolean isAudioOnly = false; @@ -477,7 +477,7 @@ public class RecordingService implements IPendingServiceCallback { + rcl.getLastname(), now, isAudioOnly, isVideoOnly, false, streamName, rcl.getInterviewPodId()); // Start FLV recording - recordShow(conn, String.valueOf(rcl.getBroadCastID()).toString(), streamName, metaDataId, false, recording.isInterview()); + recordShow(conn, rcl.getBroadCastId(), streamName, metaDataId, false, recording.isInterview()); rcl.setRecordingMetaDataId(metaDataId); http://git-wip-us.apache.org/repos/asf/openmeetings/blob/bcfb736e/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java ---------------------------------------------------------------------- diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java index bfb251a..e8af7b1 100644 --- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java +++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java @@ -588,10 +588,11 @@ public class ScopeApplicationAdapter extends MultiThreadedApplicationAdapter imp // In case its a screen sharing we start a new Video for that if (c.isScreenClient()) { c.setScreenPublishStarted(true); + c.setBroadCastId(stream.getPublishedName()); sessionManager.updateClientByStreamId(streamid, c, false, null); } if (!c.isMobile() && !Strings.isEmpty(c.getSecurityCode())) { - c.setBroadCastID(Long.parseLong(stream.getPublishedName())); + c.setBroadCastId(stream.getPublishedName()); c.setAvsettings("av"); c.setIsBroadcasting(true); if (c.getVWidth() == 0 || c.getVHeight() == 0) { @@ -680,8 +681,8 @@ public class ScopeApplicationAdapter extends MultiThreadedApplicationAdapter imp log.debug("*** +++++++ ######## sendClientBroadcastNotifications Any Client is Recording - stop that"); recordingService.stopRecordingShowForClient(current.getScope(), rcl); } - if (stream.getPublishedName().equals("" + rcl.getBroadCastID())) { - rcl.setBroadCastID(-1); + if (stream.getPublishedName().equals(rcl.getBroadCastId())) { + rcl.setBroadCastId("-1"); rcl.setIsBroadcasting(false); rcl.setAvsettings("n"); } @@ -1239,7 +1240,7 @@ public class ScopeApplicationAdapter extends MultiThreadedApplicationAdapter imp currentClient.setRoomEnter(new Date()); currentClient.setFirstname("SIP Transport"); currentClient.setLastname(getSipTransportLastname(roomId)); - currentClient.setBroadCastID(Long.parseLong(broadCastId)); + currentClient.setBroadCastId(broadCastId); currentClient.setIsBroadcasting(true); currentClient.setPublicSID(publicSID); currentClient.setVWidth(120); http://git-wip-us.apache.org/repos/asf/openmeetings/blob/bcfb736e/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java ---------------------------------------------------------------------- diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java index 84f2bf9..8af1814 100644 --- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java +++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java @@ -213,7 +213,7 @@ public class SessionManager implements ISessionManager { // get the corresponding user session object and update the settings StreamClient rclUsual = getClientByPublicSID(rcm.getPublicSID(), server); if (rclUsual != null) { - rclUsual.setBroadCastID(rcm.getBroadCastID()); + rclUsual.setBroadCastId(rcm.getBroadCastId()); rclUsual.setAvsettings(rcm.getAvsettings()); rclUsual.setVHeight(rcm.getVHeight()); rclUsual.setVWidth(rcm.getVWidth()); http://git-wip-us.apache.org/repos/asf/openmeetings/blob/bcfb736e/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/RoomHelper.java ---------------------------------------------------------------------- diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/RoomHelper.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/RoomHelper.java index 508bd4a..e74ce34 100644 --- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/RoomHelper.java +++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/RoomHelper.java @@ -33,7 +33,7 @@ public class RoomHelper { json.put("screenShare", true) .put("uid", sc.getPublicSID()) // unique screen-sharing ID - .put("broadcastId", sc.getBroadCastID()) + .put("broadcastId", sc.getBroadCastId()) .put("width", sc.getVWidth()) .put("height", sc.getVHeight()); } http://git-wip-us.apache.org/repos/asf/openmeetings/blob/bcfb736e/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/StreamClient.java ---------------------------------------------------------------------- diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/StreamClient.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/StreamClient.java index 2dc1fae..aba737a 100644 --- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/StreamClient.java +++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/StreamClient.java @@ -46,22 +46,22 @@ import org.apache.openmeetings.util.CalendarPatterns; */ @Entity @NamedQueries({ - @NamedQuery(name = "deleteAll", query = "DELETE FROM Client"), - @NamedQuery(name = "deletedById", query = "DELETE FROM Client c WHERE c.id = :id"), - @NamedQuery(name = "deleteClientsByServer", query = "DELETE FROM Client c WHERE c.server = :server"), - @NamedQuery(name = "deletedByServerAndStreamId", query = "DELETE FROM Client c WHERE c.server = :server AND c.streamid LIKE :streamid"), - @NamedQuery(name = "countClients", query = "SELECT count(c.id) FROM Client c"), - @NamedQuery(name = "countClientsByServer", query = "SELECT count(c.id) FROM Client c WHERE c.server = :server"), - @NamedQuery(name = "countClientsByServerAndStreamId", query = "SELECT count(c.id) FROM Client c WHERE c.streamid LIKE :streamid AND c.server = :server"), - @NamedQuery(name = "getClientByServerAndStreamId", query = "SELECT c FROM Client c WHERE c.streamid LIKE :streamid AND c.server = :server"), - @NamedQuery(name = "getClientsByPublicSIDAndServer", query = "SELECT c FROM Client c WHERE c.publicSID LIKE :publicSID AND c.server = :server"), - @NamedQuery(name = "getClientsByPublicSID", query = "SELECT c FROM Client c WHERE c.publicSID LIKE :publicSID"), - @NamedQuery(name = "getClientsByServer", query = "SELECT c FROM Client c WHERE c.server = :server"), - @NamedQuery(name = "getClients", query = "SELECT c FROM Client c"), - @NamedQuery(name = "getClientsWithServer", query = "SELECT c FROM Client c LEFT JOIN FETCH c.server"), - @NamedQuery(name = "getClientsByUserId", query = "SELECT c FROM Client c WHERE c.server = :server AND c.userId = :userId"), - @NamedQuery(name = "getClientsByRoomId", query = "SELECT c FROM Client c WHERE c.roomId = :roomId"), - @NamedQuery(name = "getRoomsIdsByServer", query = "SELECT c.roomId FROM Client c WHERE c.server = :server GROUP BY c.roomId") + @NamedQuery(name = "deleteAll", query = "DELETE FROM StreamClient"), + @NamedQuery(name = "deletedById", query = "DELETE FROM StreamClient c WHERE c.id = :id"), + @NamedQuery(name = "deleteClientsByServer", query = "DELETE FROM StreamClient c WHERE c.server = :server"), + @NamedQuery(name = "deletedByServerAndStreamId", query = "DELETE FROM StreamClient c WHERE c.server = :server AND c.streamid LIKE :streamid"), + @NamedQuery(name = "countClients", query = "SELECT count(c.id) FROM StreamClient c"), + @NamedQuery(name = "countClientsByServer", query = "SELECT count(c.id) FROM StreamClient c WHERE c.server = :server"), + @NamedQuery(name = "countClientsByServerAndStreamId", query = "SELECT count(c.id) FROM StreamClient c WHERE c.streamid LIKE :streamid AND c.server = :server"), + @NamedQuery(name = "getClientByServerAndStreamId", query = "SELECT c FROM StreamClient c WHERE c.streamid LIKE :streamid AND c.server = :server"), + @NamedQuery(name = "getClientsByPublicSIDAndServer", query = "SELECT c FROM StreamClient c WHERE c.publicSID LIKE :publicSID AND c.server = :server"), + @NamedQuery(name = "getClientsByPublicSID", query = "SELECT c FROM StreamClient c WHERE c.publicSID LIKE :publicSID"), + @NamedQuery(name = "getClientsByServer", query = "SELECT c FROM StreamClient c WHERE c.server = :server"), + @NamedQuery(name = "getClients", query = "SELECT c FROM StreamClient c"), + @NamedQuery(name = "getClientsWithServer", query = "SELECT c FROM StreamClient c LEFT JOIN FETCH c.server"), + @NamedQuery(name = "getClientsByUserId", query = "SELECT c FROM StreamClient c WHERE c.server = :server AND c.userId = :userId"), + @NamedQuery(name = "getClientsByRoomId", query = "SELECT c FROM StreamClient c WHERE c.roomId = :roomId"), + @NamedQuery(name = "getRoomsIdsByServer", query = "SELECT c.roomId FROM StreamClient c WHERE c.server = :server GROUP BY c.roomId") }) @Table(name = "client") @XmlRootElement @@ -225,7 +225,7 @@ public class StreamClient implements IClient { * @see StreamClient#getBroadCastID() */ @Column(name = "broadcast_id") - private long broadCastID = -2; + private String broadCastId = "-2"; /** * @see StreamClient#getUserId() @@ -629,12 +629,12 @@ public class StreamClient implements IClient { this.avsettings = avsettings; } - public long getBroadCastID() { - return broadCastID; + public String getBroadCastId() { + return broadCastId; } - public void setBroadCastID(long broadCastID) { - this.broadCastID = broadCastID; + public void setBroadCastId(String broadCastId) { + this.broadCastId = broadCastId; } public String getPublicSID() { @@ -888,7 +888,7 @@ public class StreamClient implements IClient { @Override public String toString() { return "Client [streamid=" + streamid + ", publicSID=" + publicSID + ", isScreenClient=" + screenClient - + ", isMobile = " + mobile + ", roomId=" + roomId + ", broadCastID=" + broadCastID + ", userId=" + + ", isMobile = " + mobile + ", roomId=" + roomId + ", broadCastID=" + broadCastId + ", userId=" + userId + ", avsettings=" + avsettings + ", isRecording=" + isRecording + ", recordingId=" + recordingId + ", recordingMetaDataId=" + recordingMetaDataId + ", screenPublishStarted=" + screenPublishStarted + ", interviewPodId=" + interviewPodId + ", server=" + server + "]"; http://git-wip-us.apache.org/repos/asf/openmeetings/blob/bcfb736e/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java index 2718c5f..307124d 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java @@ -323,13 +323,13 @@ public class Application extends AuthenticatedWebApplication implements IApplica } if (!rcl.getIsBroadcasting() || hasVideo(rcl) != hasVideo(client)) { rcl.setIsBroadcasting(true); - rcl.setBroadCastID(ScopeApplicationAdapter.nextBroadCastId()); + rcl.setBroadCastId("" + ScopeApplicationAdapter.nextBroadCastId()); } rcl.setAvsettings(sb.toString()); } else { rcl.setAvsettings("n"); rcl.setIsBroadcasting(false); - rcl.setBroadCastID(-1L); + rcl.setBroadCastId("-1"); } } return rcl; http://git-wip-us.apache.org/repos/asf/openmeetings/blob/bcfb736e/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java ---------------------------------------------------------------------- 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 6341021..59ea091 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 @@ -147,16 +147,11 @@ public class RoomPanel extends BasePanel { private final WbPanel wb; private String sharingUser = null; private String recordingUser = null; - private String publishingUser = null; //TODO add public RoomPanel(String id, Room r) { super(id); this.r = r; this.wb = new WbPanel("whiteboard", this); - //TODO check here and set - //private String recordingUser = null; - //private String sharingUser = null; - //private String publishingUser = null; } private void initVideos(AjaxRequestTarget target) { @@ -343,51 +338,51 @@ public class RoomPanel extends BasePanel { case recordingStoped: { String uid = ((TextRoomMessage)m).getText(); - if (Strings.isEmpty(uid) || !uid.equals(recordingUser)) { - log.error("Not existing/BAD user has stopped recording {} != {} !!!!", uid, recordingUser); - } - recordingUser = null; - menu.update(handler); Client c = getOnlineClient(uid); - if (c == null) { - log.error("Not existing user has stopped recording {} !!!!", uid); + if (c == null || !c.hasActivity(Client.Activity.record)) { + log.error("Not existing/BAD user has stopped recording {} != {} !!!!", uid); return; } + recordingUser = null; c.remove(Client.Activity.record); + menu.update(handler); } break; case recordingStarted: { - recordingUser = ((TextRoomMessage)m).getText(); - menu.update(handler); - Client c = getOnlineClient(recordingUser); + String uid = ((TextRoomMessage)m).getText(); + Client c = getOnlineClient(uid); if (c == null) { - log.error("Not existing user has started recording {} !!!!", recordingUser); + log.error("Not existing user has started recording {} !!!!", uid); return; } + recordingUser = uid; c.set(Client.Activity.record); + menu.update(handler); } break; case sharingStoped: { - sharingUser = null; - Client c = getOnlineClient(((TextRoomMessage)m).getText()); - if (c == null) { - log.error("Not existing user has started sharing {} !!!!", sharingUser); + String uid = ((TextRoomMessage)m).getText(); + Client c = getOnlineClient(uid); + if (c == null || !c.hasActivity(Client.Activity.share)) { + log.error("Not existing user has started sharing {} !!!!", uid); return; } + sharingUser = null; c.remove(Client.Activity.share); menu.update(handler); } break; case sharingStarted: { - sharingUser = ((TextRoomMessage)m).getText(); - Client c = getOnlineClient(sharingUser); + String uid = ((TextRoomMessage)m).getText(); + Client c = getOnlineClient(uid); if (c == null) { - log.error("Not existing user has started sharing {} !!!!", sharingUser); + log.error("Not existing user has started sharing {} !!!!", uid); return; } + sharingUser = uid; c.set(Client.Activity.share); menu.update(handler); } @@ -652,7 +647,7 @@ public class RoomPanel extends BasePanel { Room r = getRoom(); return Room.Type.interview != r.getType() && !r.isHidden(RoomElement.ScreenSharing) && r.isAllowRecording() && getClient().hasRight(Right.share) - && getSharingUser() == null; + && sharingUser == null; } public RoomSidebar getSidebar() { @@ -676,6 +671,6 @@ public class RoomPanel extends BasePanel { } public String getPublishingUser() { - return publishingUser; + return null; } } http://git-wip-us.apache.org/repos/asf/openmeetings/blob/bcfb736e/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.html ---------------------------------------------------------------------- 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 e8697bf..df5db12 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 @@ -22,6 +22,8 @@ <wicket:panel> <div wicket:id="menu"></div> <div class="room menu right"> + <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"></span> <span wicket:id="roomName" class="room name"></span> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/bcfb736e/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js index f9e1087..6581ef3 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js @@ -58,35 +58,37 @@ var Video = (function() { icons: { 'collapse': 'ui-icon-minus' } - , closable: false + , closable: !!c.screenShare , collapsable: true , dblclick: "collapse" }); t = v.parent().find('.ui-dialog-titlebar').attr('title', name); - v.parent().find('.ui-dialog-titlebar-buttonpane').append($('#video-volume-btn').children().clone()); - var volume = v.parent().find('.dropdown-menu.video.volume'); - v.parent().find('.ui-dialog-titlebar-volume').click(function(e) { - e.stopImmediatePropagation(); - volume.toggle(); - }).dblclick(function(e) { - e.stopImmediatePropagation(); - }); - var handle = v.parent().find('.slider .handle'); - v.parent().find('.slider').slider({ - orientation: 'vertical' - , range: 'min' - , min: 0 - , max: 100 - , value: 60 - , slide: function(event, ui) { - } - , create: function() { - handle.text($(this).slider("value")); - } - , slide: function(event, ui) { - handle.text(ui.value); - } - }); + if (!c.screenShare) { + v.parent().find('.ui-dialog-titlebar-buttonpane').append($('#video-volume-btn').children().clone()); + var volume = v.parent().find('.dropdown-menu.video.volume'); + v.parent().find('.ui-dialog-titlebar-volume').click(function(e) { + e.stopImmediatePropagation(); + volume.toggle(); + }).dblclick(function(e) { + e.stopImmediatePropagation(); + }); + var handle = v.parent().find('.slider .handle'); + v.parent().find('.slider').slider({ + orientation: 'vertical' + , range: 'min' + , min: 0 + , max: 100 + , value: 60 + , slide: function(event, ui) { + } + , create: function() { + handle.text($(this).slider("value")); + } + , slide: function(event, ui) { + handle.text(ui.value); + } + }); + } vc = v.find('.video'); vc.width(_w).height(_h); //broadcast @@ -115,15 +117,17 @@ var Video = (function() { self.update = _update; self.init = _init; self.resetSize = _resetSize; + self.client = function() { return c; }; return self; }); var VideoManager = (function() { - var self = {}, box, options; + var self = {}, box, options, share; function _init(_options) { options = _options; VideoSettings.init(self.getOptions()); box = $('.room.box'); + share = box.find('.icon.shared.ui-button'); } function _getVid(uid) { return "video" + uid; @@ -143,14 +147,39 @@ var VideoManager = (function() { } } function _play(c) { - Video().init(box, options.uid, c); + if (!!c.screenShare) { + _highlight(share.attr('title', share.data('user') + ' ' + c.user.firstName + ' ' + c.user.lastName + ' ' + share.data('text')).show(), 10); + share.tooltip().click(function() { + var v = $('#' + _getVid(c.uid)) + if (v.length != 1) { + Video().init(box, options.uid, c); + } else { + v.dialog('open'); + } + }); + } else { + Video().init(box, options.uid, c); + } } function _close(uid) { var _id = _getVid(uid), v = $('#' + _id); if (v.length == 1) { + if (v.data().client().screenShare) { + share.off('click').hide(); + } v.remove(); } } + function _highlight(el, count) { + if (count < 0) { + return; + } + el.addClass('ui-state-highlight', 2000, function() { + el.removeClass('ui-state-highlight', 2000, function() { + _highlight(el, --count); + }); + }); + } self.getOptions = function() { return JSON.parse(JSON.stringify(options)); }; self.init = _init; http://git-wip-us.apache.org/repos/asf/openmeetings/blob/bcfb736e/openmeetings-web/src/main/webapp/css/images/shared.png ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/webapp/css/images/shared.png b/openmeetings-web/src/main/webapp/css/images/shared.png new file mode 100644 index 0000000..80c4edd Binary files /dev/null and b/openmeetings-web/src/main/webapp/css/images/shared.png differ http://git-wip-us.apache.org/repos/asf/openmeetings/blob/bcfb736e/openmeetings-web/src/main/webapp/css/room.css ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/webapp/css/room.css b/openmeetings-web/src/main/webapp/css/room.css index cf437c1..66e71cb 100644 --- a/openmeetings-web/src/main/webapp/css/room.css +++ b/openmeetings-web/src/main/webapp/css/room.css @@ -79,6 +79,9 @@ .room.menu.right .icon.share { background-image: url(images/monitor_go.png); } +.room.menu.right .icon.shared { + background-image: url(images/shared.png); +} .room.menu.right .icon .profile { margin-top: 3px; }
