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 2020/09/08 13:55:56 UTC

[openmeetings] branch master updated: [OPENMEETINGS-2402] upload to WB is fixed

This is an automated email from the ASF dual-hosted git repository.

solomax pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openmeetings.git


The following commit(s) were added to refs/heads/master by this push:
     new ecee6f8  [OPENMEETINGS-2402] upload to WB is fixed
ecee6f8 is described below

commit ecee6f8eeaa624252a540e1ba063f31a523f7535
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Tue Sep 8 20:55:40 2020 +0700

    [OPENMEETINGS-2402] upload to WB is fixed
---
 .../openmeetings/core/util/WebSocketHelper.java    | 11 +++++++++++
 .../openmeetings/db/util/ws/RoomMessage.java       |  1 +
 .../apache/openmeetings/web/room/RoomPanel.java    |  8 ++++++++
 .../sidebar/RoomFileUploadResourceReference.java   | 23 ++++++++++++++--------
 4 files changed, 35 insertions(+), 8 deletions(-)

diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/WebSocketHelper.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/WebSocketHelper.java
index c75254f..cc2b451 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/WebSocketHelper.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/WebSocketHelper.java
@@ -80,6 +80,17 @@ public class WebSocketHelper {
 		}
 	}
 
+	public static void sendClient(final IWsClient omClient, final RoomMessage m) {
+		log.trace("Sending WebSocket message to client: {} {}", m.getType(), m instanceof TextRoomMessage ? ((TextRoomMessage)m).getText() : "");
+		sendClient(omClient, c -> {
+			try {
+				c.sendMessage(m);
+			} catch (Throwable e) {
+				log.error("Error while sending message to client", e);
+			}
+		});
+	}
+
 	public static IApplication getApp() {
 		return (IApplication)Application.get(getWicketApplicationName());
 	}
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/ws/RoomMessage.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/ws/RoomMessage.java
index cb9896d..85937b7 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/ws/RoomMessage.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/ws/RoomMessage.java
@@ -56,6 +56,7 @@ public class RoomMessage implements IWebSocketPushMessage {
 		, KURENTO_STATUS
 		, WB_RELOAD
 		, MODERATOR_IN_ROOM
+		, WB_PUT_FILE
 	}
 	private final Date timestamp;
 	private final String uid;
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 3245256..f6a4649 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
@@ -40,6 +40,7 @@ import org.apache.openmeetings.core.remote.KurentoHandler;
 import org.apache.openmeetings.core.remote.StreamProcessor;
 import org.apache.openmeetings.core.util.WebSocketHelper;
 import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.dao.file.FileItemDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.basic.Client;
 import org.apache.openmeetings.db.entity.basic.Client.StreamDesc;
@@ -249,6 +250,8 @@ public class RoomPanel extends BasePanel {
 	private StreamProcessor streamProcessor;
 	@SpringBean
 	private TimerService timerService;
+	@SpringBean
+	private FileItemDao fileDao;
 
 	public RoomPanel(String id, Room r) {
 		super(id);
@@ -595,6 +598,11 @@ public class RoomPanel extends BasePanel {
 						}
 					}
 						break;
+					case WB_PUT_FILE: {
+						JSONObject obj = new JSONObject(((TextRoomMessage)m).getText());
+						getWb().sendFileToWb(fileDao.getAny(obj.getLong("fileId")), obj.getBoolean("clean"));
+					}
+						break;
 				}
 			}
 		}
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomFileUploadResourceReference.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomFileUploadResourceReference.java
index 35d2943..784bfaa 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomFileUploadResourceReference.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomFileUploadResourceReference.java
@@ -42,6 +42,8 @@ import org.apache.openmeetings.db.entity.file.BaseFileItem;
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.room.Room.Right;
 import org.apache.openmeetings.db.entity.room.Room.RoomElement;
+import org.apache.openmeetings.db.util.ws.RoomMessage;
+import org.apache.openmeetings.db.util.ws.TextRoomMessage;
 import org.apache.openmeetings.util.process.ProcessResult;
 import org.apache.openmeetings.util.process.ProcessResultList;
 import org.apache.openmeetings.web.app.Application;
@@ -113,15 +115,16 @@ public class RoomFileUploadResourceReference extends ResourceReference {
 						final boolean toWb = multiPartRequest.getPostParameters().getParameterValue(PARAM_TO_WB_NAME).toBoolean(false);
 						final boolean clean = multiPartRequest.getPostParameters().getParameterValue(PARAM_CLEAN_NAME).toBoolean(false);
 						final long lastSelected = multiPartRequest.getPostParameters().getParameterValue(PARAM_LAST_SELECTED_NAME).toLong(-1L);
-						startRunnable(() -> convertAll(c, fileItems, toWb, clean, lastSelected));
+						final String uuid = randomUUID().toString();
+						startRunnable(() -> convertAll(c, fileItems, uuid, toWb, clean, lastSelected));
 
-						prepareResponse(response, Status.SUCCESS, Application.getString("54", langId));
+						prepareResponse(response, Status.SUCCESS, uuid, Application.getString("54", langId));
 					} else {
-						prepareResponse(response, Status.ERROR, Application.getString("access.denied.header", langId));
+						prepareResponse(response, Status.ERROR, null, Application.getString("access.denied.header", langId));
 					}
 				} catch (Exception e) {
 					log.error("An error occurred while uploading a file", e);
-					prepareResponse(response, Status.ERROR, e.getMessage());
+					prepareResponse(response, Status.ERROR, null, e.getMessage());
 				}
 				return response;
 			}
@@ -132,7 +135,7 @@ public class RoomFileUploadResourceReference extends ResourceReference {
 		return c == null || c.getUser() == null ? 1L : c.getUser().getLanguageId();
 	}
 
-	private static void prepareResponse(ResourceResponse response, Status status, String msg) {
+	private static void prepareResponse(ResourceResponse response, Status status, String uuid, String msg) {
 		response.setContentType(MediaType.APPLICATION_JSON);
 		response.setWriteCallback(new WriteCallback() {
 			@Override
@@ -140,6 +143,7 @@ public class RoomFileUploadResourceReference extends ResourceReference {
 				attributes.getResponse().write(new JSONObject()
 						.put("status", status.name())
 						.put("message", msg)
+						.put("uuid", uuid)
 						.toString());
 			}
 		});
@@ -153,11 +157,10 @@ public class RoomFileUploadResourceReference extends ResourceReference {
 		return !r.isHidden(RoomElement.FILES) && c.hasRight(Right.PRESENTER);
 	}
 
-	private void convertAll(Client c, List<FileItem> files, boolean toWb, boolean clean, long lastSelected) {
+	private void convertAll(Client c, List<FileItem> files, String uuid, boolean toWb, boolean clean, long lastSelected) {
 		final BaseFileItem parent = fileDao.get(lastSelected);
 		final long langId = getLangId(c);
 		final long totalSize = files.stream().mapToLong(FileItem::getSize).sum();
-		final String uuid = randomUUID().toString();
 		final AtomicInteger progress = new AtomicInteger(0);
 		long currentSize = 0;
 		for (FileItem curItem : files) {
@@ -187,7 +190,11 @@ public class RoomFileUploadResourceReference extends ResourceReference {
 					sendError(c, uuid, Application.getString("convert.errors.file", langId));
 				} else {
 					if (toWb) {
-						//FIXME TODO room.getWb().sendFileToWb(f, clean);
+						WebSocketHelper.sendClient(c, new TextRoomMessage(c.getRoomId(), c, RoomMessage.Type.WB_PUT_FILE
+								, new JSONObject()
+										.put("fileId", f.getId())
+										.put("clean", clean)
+										.toString()));
 						clean = false;
 					}
 				}