[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;
 }

Reply via email to