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/09/16 12:56:25 UTC

openmeetings git commit: [OPENMEETINGS-1641] video status for newly entered user is preserved

Repository: openmeetings
Updated Branches:
  refs/heads/master c5fbecb27 -> 5b60f06f7


[OPENMEETINGS-1641] video status for newly entered user is preserved


Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/5b60f06f
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/5b60f06f
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/5b60f06f

Branch: refs/heads/master
Commit: 5b60f06f7c295e364ab46f6b11b87b17bcb172a4
Parents: c5fbecb
Author: Maxim Solodovnik <so...@gmail.com>
Authored: Sat Sep 16 19:56:17 2017 +0700
Committer: Maxim Solodovnik <so...@gmail.com>
Committed: Sat Sep 16 19:56:17 2017 +0700

----------------------------------------------------------------------
 .../openmeetings/web/room/wb/WbAction.java      |  1 +
 .../openmeetings/web/room/wb/WbPanel.java       | 92 ++++++++++++++------
 .../org/apache/openmeetings/web/room/wb/wb.js   |  9 ++
 3 files changed, 74 insertions(+), 28 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/5b60f06f/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbAction.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbAction.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbAction.java
index 7fded48..dc3eef1 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbAction.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbAction.java
@@ -36,4 +36,5 @@ public enum WbAction {
 	, startRecording
 	, stopRecording
 	, videoStatus
+	, loadVideos
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/5b60f06f/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java
index 23f807e..a68e150 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java
@@ -180,6 +180,7 @@ public class WbPanel extends AbstractWbPanel {
 		if (wb != null) {
 			sb.append("WbArea.setSlide(").append(wbj.put("slide", wb.getSlide())).append(");");
 		}
+		sb.append("WbArea.loadVideos();");
 	}
 
 	@Override
@@ -189,41 +190,76 @@ public class WbPanel extends AbstractWbPanel {
 
 	@Override
 	protected void processWbAction(WbAction a, JSONObject obj, AjaxRequestTarget target) throws IOException {
-		if (WbAction.createObj == a || WbAction.modifyObj == a) {
-			JSONObject o = obj.optJSONObject("obj");
-			if (o != null && "pointer".equals(o.getString("type"))) {
-				sendWbOthers(a, obj);
+		Client c = rp.getClient();
+		switch (a) {
+			case createObj:
+			case modifyObj:
+			{
+				JSONObject o = obj.optJSONObject("obj");
+				if (o != null && "pointer".equals(o.getString("type"))) {
+					sendWbOthers(a, obj);
+					return;
+				}
+			}
+				break;
+			case downloadPdf:
+			{
+				boolean moder = c.hasRight(Room.Right.moderator);
+				Room r = rp.getRoom();
+				if ((moder && !r.isHidden(RoomElement.ActionMenu)) || (!moder && r.isAllowUserQuestions())) {
+					try (PDDocument doc = new PDDocument()) {
+						JSONArray arr = obj.getJSONArray("slides");
+						for (int i = 0; i < arr.length(); ++i) {
+							String base64Image = arr.getString(i).split(",")[1];
+							byte[] bb = Base64.decodeBase64(base64Image);
+							BufferedImage img = ImageIO.read(new ByteArrayInputStream(bb));
+							float width = img.getWidth();
+							float height = img.getHeight();
+							PDPage page = new PDPage(new PDRectangle(width, height));
+							PDImageXObject pdImageXObject = LosslessFactory.createFromImage(doc, img);
+							try (PDPageContentStream contentStream = new PDPageContentStream(doc, page, AppendMode.APPEND, false)) {
+								contentStream.drawImage(pdImageXObject, 0, 0, width, height);
+							}
+							doc.addPage(page);
+						}
+						ByteArrayOutputStream baos = new ByteArrayOutputStream();
+						doc.save(baos);
+						rp.startDownload(target, baos.toByteArray());
+					}
+				}
 				return;
 			}
-		}
-
-		Client c = rp.getClient();
-		if (WbAction.downloadPdf == a) {
-			boolean moder = c.hasRight(Room.Right.moderator);
-			Room r = rp.getRoom();
-			if ((moder && !r.isHidden(RoomElement.ActionMenu)) || (!moder && r.isAllowUserQuestions())) {
-				try (PDDocument doc = new PDDocument()) {
-					JSONArray arr = obj.getJSONArray("slides");
-					for (int i = 0; i < arr.length(); ++i) {
-						String base64Image = arr.getString(i).split(",")[1];
-						byte[] bb = Base64.decodeBase64(base64Image);
-						BufferedImage img = ImageIO.read(new ByteArrayInputStream(bb));
-						float width = img.getWidth();
-						float height = img.getHeight();
-						PDPage page = new PDPage(new PDRectangle(width, height));
-						PDImageXObject pdImageXObject = LosslessFactory.createFromImage(doc, img);
-						try (PDPageContentStream contentStream = new PDPageContentStream(doc, page, AppendMode.APPEND, false)) {
-							contentStream.drawImage(pdImageXObject, 0, 0, width, height);
+			case loadVideos:
+			{
+				StringBuilder sb = new StringBuilder("WbArea.initVideos(");
+				JSONArray arr = new JSONArray();
+				for (Entry<Long, Whiteboard> entry : WhiteboardCache.list(roomId, rp.getClient().getUser().getLanguageId())) {
+					Whiteboard wb = entry.getValue();
+					for (JSONObject o : wb.list()) {
+						String ft = o.optString("fileType");
+						if (BaseFileItem.Type.Recording.name().equals(ft) || BaseFileItem.Type.Video.name().equals(ft)) {
+							JSONObject _sts = o.optJSONObject("status");
+							if (_sts == null) {
+								continue;
+							}
+							JSONObject sts = new JSONObject(_sts.toString()); //copy
+							sts.put("pos", sts.getDouble("pos") + (System.currentTimeMillis() - sts.getLong("updated")) * 1. / 1000);
+							arr.put(new JSONObject()
+									.put("wbId", wb.getId())
+									.put("uid", o.getString("uid"))
+									.put("slide", o.getString("slide"))
+									.put("status", sts));
 						}
-						doc.addPage(page);
 					}
-					ByteArrayOutputStream baos = new ByteArrayOutputStream();
-					doc.save(baos);
-					rp.startDownload(target, baos.toByteArray());
 				}
+				sb.append(arr.toString()).append(");");
+				target.appendJavaScript(sb);
+				return;
 			}
-			return;
+			default:
+				break;
 		}
+
 		//presenter-right
 		if (c.hasRight(Right.presenter)) {
 			switch (a) {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/5b60f06f/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js
index 9c4b7d6..b2420d2 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js
@@ -147,6 +147,7 @@ var Player = (function() {
 					updateProgress();
 					if (group.status.paused) {
 						cancelAnimationFrame(request);
+						canvas.renderAll();
 					} else {
 						request = fabric.util.requestAnimFrame(render);
 					}
@@ -1539,6 +1540,12 @@ var WbArea = (function() {
 	function _videoStatus(json) {
 		self.getWb(json.wbId).videoStatus(json);
 	}
+	function _initVideos(arr) {
+		for (let i = 0; i < arr.length; ++i) {
+			 _videoStatus(arr[i]);
+		}
+	}
+
 	self.getWbTabId = function(id) {
 		return "wb-tab-" + id;
 	};
@@ -1712,6 +1719,8 @@ var WbArea = (function() {
 		}
 	}
 	self.videoStatus = _videoStatus;
+	self.loadVideos = function() { wbAction('loadVideos'); };
+	self.initVideos = _initVideos;
 	return self;
 })();
 $(function() {