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 2017/04/23 14:57:41 UTC

svn commit: r1792368 - in /openmeetings/application/trunk: openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ openmeetings-core/src/main/java/org/apache/openmeetings/core/session/ openmeetings-core/src/main/java/org/apache/openmeeting...

Author: solomax
Date: Sun Apr 23 14:57:40 2017
New Revision: 1792368

URL: http://svn.apache.org/viewvc?rev=1792368&view=rev
Log:
[OPENMEETINGS-551] screen-sharing improved, build is fixed

Added:
    openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/images/shared.png   (with props)
Modified:
    openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java
    openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/RecordingService.java
    openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java
    openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java
    openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/RoomHelper.java
    openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/StreamClient.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.html
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
    openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css

Modified: openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java?rev=1792368&r1=1792367&r2=1792368&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java (original)
+++ openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java Sun Apr 23 14:57:40 2017
@@ -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);

Modified: openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/RecordingService.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/RecordingService.java?rev=1792368&r1=1792367&r2=1792368&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/RecordingService.java (original)
+++ openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/RecordingService.java Sun Apr 23 14:57:40 2017
@@ -165,7 +165,7 @@ public class RecordingService implements
 						} 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
 							}
 						} 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
 
 				// 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
 				// 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
 						+ 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);
 

Modified: openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java?rev=1792368&r1=1792367&r2=1792368&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java (original)
+++ openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java Sun Apr 23 14:57:40 2017
@@ -588,10 +588,11 @@ public class ScopeApplicationAdapter ext
 			// 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 ext
 				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 ext
 		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);

Modified: openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java?rev=1792368&r1=1792367&r2=1792368&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java (original)
+++ openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java Sun Apr 23 14:57:40 2017
@@ -213,7 +213,7 @@ public class SessionManager implements I
 			// 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());

Modified: openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/RoomHelper.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/RoomHelper.java?rev=1792368&r1=1792367&r2=1792368&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/RoomHelper.java (original)
+++ openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/RoomHelper.java Sun Apr 23 14:57:40 2017
@@ -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());
 		}

Modified: openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/StreamClient.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/StreamClient.java?rev=1792368&r1=1792367&r2=1792368&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/StreamClient.java (original)
+++ openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/StreamClient.java Sun Apr 23 14:57:40 2017
@@ -46,22 +46,22 @@ import org.apache.openmeetings.util.Cale
  */
 @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 ICl
 	 * @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 ICl
 		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 ICl
 	@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 + "]";

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java?rev=1792368&r1=1792367&r2=1792368&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java Sun Apr 23 14:57:40 2017
@@ -323,13 +323,13 @@ public class Application extends Authent
 				}
 				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;

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java?rev=1792368&r1=1792367&r2=1792368&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java Sun Apr 23 14:57:40 2017
@@ -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;
 	}
 }

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.html
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.html?rev=1792368&r1=1792367&r2=1792368&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.html (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.html Sun Apr 23 14:57:40 2017
@@ -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>

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js?rev=1792368&r1=1792367&r2=1792368&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js Sun Apr 23 14:57:40 2017
@@ -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;

Added: openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/images/shared.png
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/images/shared.png?rev=1792368&view=auto
==============================================================================
Binary file - no diff available.

Propchange: openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/images/shared.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css?rev=1792368&r1=1792367&r2=1792368&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css Sun Apr 23 14:57:40 2017
@@ -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;
 }