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 2018/03/03 18:30:15 UTC
[openmeetings] branch OPENMEETINGS-1649-kurento updated:
[OPENMEETINGS-1649] JS errors during broadcast are fixed
This is an automated email from the ASF dual-hosted git repository.
solomax pushed a commit to branch OPENMEETINGS-1649-kurento
in repository https://gitbox.apache.org/repos/asf/openmeetings.git
The following commit(s) were added to refs/heads/OPENMEETINGS-1649-kurento by this push:
new 5afa80f [OPENMEETINGS-1649] JS errors during broadcast are fixed
5afa80f is described below
commit 5afa80f1e0d6007f7883185f166fde0a2dbfb31e
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Sun Mar 4 01:30:01 2018 +0700
[OPENMEETINGS-1649] JS errors during broadcast are fixed
---
.../org/apache/openmeetings/core/remote/KRoom.java | 35 +++++--------------
.../org/apache/openmeetings/core/remote/KUser.java | 15 ++++----
.../openmeetings/core/remote/KurentoHandler.java | 16 +++------
.../apache/openmeetings/web/room/RoomPanel.java | 35 ++++++++++---------
.../apache/openmeetings/web/room/video-manager.js | 40 ++++++++++++++--------
.../openmeetings/web/room/wb/interview-area.js | 5 ++-
.../org/apache/openmeetings/web/room/wb/wb-all.js | 13 +++++++
.../org/apache/openmeetings/web/room/wb/wb-area.js | 17 ++-------
.../apache/openmeetings/web/user/chat/Chat.java | 10 ++++--
.../openmeetings/web/user/chat/ChatForm.java | 8 +++--
.../openmeetings/web/user/chat/ChatToolbar.java | 13 ++++---
11 files changed, 106 insertions(+), 101 deletions(-)
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KRoom.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KRoom.java
index 97671d9..2ed5335 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KRoom.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KRoom.java
@@ -33,7 +33,6 @@ import org.kurento.client.MediaPipeline;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.github.openjson.JSONArray;
import com.github.openjson.JSONObject;
/**
@@ -41,7 +40,7 @@ import com.github.openjson.JSONObject;
* @since 4.3.1
*/
public class KRoom implements Closeable {
- private final Logger log = LoggerFactory.getLogger(KRoom.class);
+ private final static Logger log = LoggerFactory.getLogger(KRoom.class);
private final Map<String, KUser> participants = new ConcurrentHashMap<>();
private final MediaPipeline pipeline;
@@ -64,11 +63,11 @@ public class KRoom implements Closeable {
public KUser join(final KurentoHandler h, String uid) {
log.info("ROOM {}: adding participant {}", roomId, uid);
- final KUser participant = new KUser(h, uid, this.roomId, this.pipeline);
- joinRoom(h, participant);
- participants.put(participant.getUid(), participant);
- sendParticipantNames(h, participant);
- return participant;
+ final KUser u = new KUser(h, uid, this.roomId, this.pipeline);
+ joinRoom(h, u);
+ participants.put(u.getUid(), u);
+ broadcast(h, u);
+ return u;
}
public void leave(final KurentoHandler h, KUser user) {
@@ -89,7 +88,6 @@ public class KRoom implements Closeable {
h.sendClient(participant.getUid(), msg);
participantsList.add(participant.getUid());
}
-
return participantsList;
}
@@ -111,21 +109,12 @@ public class KRoom implements Closeable {
log.debug("ROOM {}: The users {} could not be notified that {} left the room", this.roomId,
unnotifiedParticipants, name);
}
-
}
- public void sendParticipantNames(final KurentoHandler h, KUser user) {
- final JSONArray participantsArray = new JSONArray();
- for (final KUser participant : this.getParticipants()) {
- if (!participant.equals(user)) {
- participantsArray.put(participant.getUid());
- }
- }
-
+ private static void broadcast(final KurentoHandler h, KUser user) {
final JSONObject msg = newKurentoMsg();
- msg.put("id", "existingParticipants");
- msg.put("data", participantsArray);
- log.debug("PARTICIPANT {}: sending a list of {} participants", user.getUid(), participantsArray.length());
+ msg.put("id", "broadcast");
+ log.debug("User {}: has started broadcast", user.getUid());
h.sendClient(user.getUid(), msg);
}
@@ -133,10 +122,6 @@ public class KRoom implements Closeable {
return participants.values();
}
- public KUser getParticipant(String name) {
- return participants.get(name);
- }
-
@Override
public void close() {
for (final KUser user : participants.values()) {
@@ -157,8 +142,6 @@ public class KRoom implements Closeable {
log.warn("PARTICIPANT {}: Could not release Pipeline", KRoom.this.roomId);
}
});
-
log.debug("Room {} closed", this.roomId);
}
-
}
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KUser.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KUser.java
index 237cc25..85b4e95 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KUser.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KUser.java
@@ -41,19 +41,15 @@ import com.github.openjson.JSONObject;
* @since 4.3.1
*/
public class KUser implements Closeable {
-
private static final Logger log = LoggerFactory.getLogger(KUser.class);
private final String uid;
-
private final MediaPipeline pipeline;
-
private final Long roomId;
private final WebRtcEndpoint outgoingMedia;
private final ConcurrentMap<String, WebRtcEndpoint> incomingMedia = new ConcurrentHashMap<>();
public KUser(final KurentoHandler h, final String uid, Long roomId, MediaPipeline pipeline) {
-
this.pipeline = pipeline;
this.uid = uid;
this.roomId = roomId;
@@ -66,7 +62,7 @@ public class KUser implements Closeable {
JSONObject response = newKurentoMsg();
response.put("id", "iceCandidate");
response.put("uid", uid);
- response.put("candidate", JsonUtils.toJsonObject(event.getCandidate()));
+ response.put("candidate", convert(JsonUtils.toJsonObject(event.getCandidate())));
h.sendClient(uid, response);
}
});
@@ -96,7 +92,7 @@ public class KUser implements Closeable {
final String ipSdpAnswer = this.getEndpointForUser(h, sender).processOffer(sdpOffer);
final JSONObject scParams = newKurentoMsg();
- scParams.put("id", "receiveVideoAnswer");
+ scParams.put("id", "videoResponse");
scParams.put("uid", sender.getUid());
scParams.put("sdpAnswer", ipSdpAnswer);
@@ -126,7 +122,7 @@ public class KUser implements Closeable {
JSONObject response = newKurentoMsg();
response.put("id", "iceCandidate");
response.put("uid", sender.getUid());
- response.put("candidate", JsonUtils.toJsonObject(event.getCandidate()));
+ response.put("candidate", convert(JsonUtils.toJsonObject(event.getCandidate())));
h.sendClient(uid, response);
}
});
@@ -212,6 +208,10 @@ public class KUser implements Closeable {
}
}
+ private static JSONObject convert(com.google.gson.JsonObject o) {
+ return new JSONObject(o.toString());
+ }
+
/*
* (non-Javadoc)
*
@@ -219,7 +219,6 @@ public class KUser implements Closeable {
*/
@Override
public boolean equals(Object obj) {
-
if (this == obj) {
return true;
}
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KurentoHandler.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KurentoHandler.java
index d6c2f2f..0ab11d6 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KurentoHandler.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KurentoHandler.java
@@ -38,6 +38,8 @@ public class KurentoHandler {
private final static Logger log = LoggerFactory.getLogger(KurentoHandler.class);
public final static String KURENTO_TYPE = "kurento";
private final KurentoClient client = KurentoClient.create();
+ private final Map<Long, KRoom> rooms = new ConcurrentHashMap<>();
+ private final Map<String, KUser> usersByUid = new ConcurrentHashMap<>();
@Autowired
private IClientManager clientManager;
@@ -82,8 +84,9 @@ public class KurentoHandler {
log.info("PARTICIPANT {}: trying to join room {}", c, c.getRoomId());
KRoom room = getRoom(c.getRoomId());
+ clientManager.update(c.addStream(c.getUid()));
final KUser user = room.join(this, c.getUid());
- register(user);
+ usersByUid.put(user.getUid(), user);
}
void sendClient(String uid, JSONObject msg) {
@@ -98,8 +101,6 @@ public class KurentoHandler {
}
}
- private final Map<Long, KRoom> rooms = new ConcurrentHashMap<>();
-
/**
* Looks for a room in the active room list.
*
@@ -113,7 +114,7 @@ public class KurentoHandler {
KRoom room = rooms.get(roomId);
if (room == null) {
- log.debug("Room {} not existent. Will create now!", roomId);
+ log.debug("Room {} does not exist. Will create now!", roomId);
room = new KRoom(roomId, client.createMediaPipeline());
rooms.put(roomId, room);
}
@@ -133,13 +134,6 @@ public class KurentoHandler {
log.info("Room {} removed and closed", room.getRoomId());
}
-
- private final Map<String, KUser> usersByUid = new ConcurrentHashMap<>();
-
- public void register(KUser user) {
- usersByUid.put(user.getUid(), user);
- }
-
public KUser getByUid(String uid) {
return usersByUid.get(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 fb3d63a..f5076bb 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
@@ -86,6 +86,7 @@ import org.apache.wicket.protocol.ws.api.BaseWebSocketBehavior;
import org.apache.wicket.protocol.ws.api.event.WebSocketPushPayload;
import org.apache.wicket.request.resource.JavaScriptResourceReference;
import org.apache.wicket.request.resource.ResourceStreamResource;
+import org.apache.wicket.spring.injection.annot.SpringBean;
import org.apache.wicket.util.resource.AbstractResourceStream;
import org.apache.wicket.util.resource.IResourceStream;
import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
@@ -151,7 +152,7 @@ public class RoomPanel extends BasePanel {
sidebar.setFilesActive(target);
}
if (Room.Type.presentation != r.getType()) {
- List<Client> mods = getBean(ClientManager.class).listByRoom(r.getId(), c -> c.hasRight(Room.Right.moderator));
+ List<Client> mods = cm.listByRoom(r.getId(), c -> c.hasRight(Room.Right.moderator));
if (mods.isEmpty()) {
waitApplyModeration.open(target);
}
@@ -163,7 +164,7 @@ public class RoomPanel extends BasePanel {
StringBuilder sb = new StringBuilder();
boolean hasStreams = false;
Client _c = getClient();
- for (Client c: getBean(ClientManager.class).listByRoom(getRoom().getId())) {
+ for (Client c: cm.listByRoom(getRoom().getId())) {
boolean self = _c.getUid().equals(c.getUid());
for (String uid : c.getStreams()) {
JSONObject jo = videoJson(c, self, c.getSid(), getBean(StreamClientManager.class), uid);
@@ -223,6 +224,9 @@ public class RoomPanel extends BasePanel {
};
Component eventDetail = new WebMarkupContainer(EVENT_DETAILS_ID).setVisible(false);
+ @SpringBean
+ private ClientManager cm;
+
public RoomPanel(String id, Room r) {
super(id);
this.r = r;
@@ -239,7 +243,6 @@ public class RoomPanel extends BasePanel {
protected void onInitialize() {
super.onInitialize();
//let's refresh user in client
- ClientManager cm = getBean(ClientManager.class);
cm.update(getClient().updateUser(getBean(UserDao.class)));
Component accessDenied = new WebMarkupContainer(ACCESS_DENIED_ID).setVisible(false);
@@ -399,7 +402,6 @@ public class RoomPanel extends BasePanel {
if (wsEvent.getMessage() instanceof RoomMessage) {
RoomMessage m = (RoomMessage)wsEvent.getMessage();
IPartialPageRequestHandler handler = wsEvent.getHandler();
- ClientManager cm = getBean(ClientManager.class);
switch (m.getType()) {
case pollCreated:
menu.updatePoll(handler, m.getUserId());
@@ -642,7 +644,7 @@ public class RoomPanel extends BasePanel {
if (interview && _c.hasRight(Right.moderator)) {
if (recordingUser == null) {
boolean hasStreams = false;
- for (Client cl : getBean(ClientManager.class).listByRoom(r.getId())) {
+ for (Client cl : cm.listByRoom(r.getId())) {
if (!cl.getStreams().isEmpty()) {
hasStreams = true;
break;
@@ -661,7 +663,6 @@ public class RoomPanel extends BasePanel {
if (room.isVisible()) {
//We are setting initial rights here
Client c = getClient();
- ClientManager cm = getBean(ClientManager.class);
cm.addToRoom(c.setRoom(getRoom()));
SOAPLogin soap = WebSession.get().getSoapLogin();
if (soap != null && soap.isModerator()) {
@@ -677,12 +678,16 @@ public class RoomPanel extends BasePanel {
}
}
- public static boolean isModerator(long userId, long roomId) {
- return hasRight(userId, roomId, Right.moderator);
+ public boolean isModerator(long userId, long roomId) {
+ return isModerator(cm, userId, roomId);
+ }
+
+ public static boolean isModerator(ClientManager cm, long userId, long roomId) {
+ return hasRight(cm, userId, roomId, Right.moderator);
}
- public static boolean hasRight(long userId, long roomId, Right r) {
- for (Client c : getBean(ClientManager.class).listByRoom(roomId)) {
+ public static boolean hasRight(ClientManager cm, long userId, long roomId, Right r) {
+ for (Client c : cm.listByRoom(roomId)) {
if (c.getUserId().equals(userId) && c.hasRight(r)) {
return true;
}
@@ -725,7 +730,7 @@ public class RoomPanel extends BasePanel {
getMainPanel().getChat().toggle(handler, true);
}
handler.appendJavaScript("if (typeof(Room) !== 'undefined') { Room.unload(); }");
- getBean(ClientManager.class).exitRoom(getClient());
+ cm.exitRoom(getClient());
getMainPanel().getChat().roomExit(r, handler);
}
@@ -741,7 +746,6 @@ public class RoomPanel extends BasePanel {
public void requestRight(Right right, IPartialPageRequestHandler handler) {
RoomMessage.Type reqType = null;
- ClientManager cm = getBean(ClientManager.class);
List<Client> mods = cm.listByRoom(r.getId(), c -> c.hasRight(Room.Right.moderator));
if (mods.isEmpty()) {
if (r.isModerated()) {
@@ -750,7 +754,7 @@ public class RoomPanel extends BasePanel {
return;
} else {
// we found no-one we can ask, allow right
- broadcast(getBean(ClientManager.class).update(getClient().allow(right)));
+ broadcast(cm.update(getClient().allow(right)));
}
}
// ask
@@ -791,8 +795,7 @@ public class RoomPanel extends BasePanel {
}
public void allowRight(Client client, Right... rights) {
- client.allow(rights);
- getBean(ClientManager.class).update(client);
+ cm.update(client.allow(rights));
broadcast(client);
}
@@ -806,7 +809,7 @@ public class RoomPanel extends BasePanel {
if (client.hasActivity(Client.Activity.broadcastV) && !client.hasRight(Right.video)) {
client.remove(Client.Activity.broadcastV);
}
- getBean(ClientManager.class).update(client);
+ cm.update(client);
broadcast(client);
}
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/video-manager.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/video-manager.js
index fc09c06..ed9ea1a 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/video-manager.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/video-manager.js
@@ -8,13 +8,18 @@ var VideoManager = (function() {
receiveVideo(request.uid);
}
- function receiveVideoResponse(result) {
- participants[result.uid].rtcPeer.processAnswer (result.sdpAnswer, function (error) {
- if (error) return console.error (error);
+ function onVideoResponse(m) {
+ const w = $('#' + VideoUtil.getVid(m.uid))
+ , v = w.data()
+
+ v.getPeer().processAnswer(m.sdpAnswer, function (error) {
+ if (error) {
+ return console.error(error);
+ }
});
}
- function onExistingParticipants(msg) {
+ function onBroadcast(msg) {
const uid = Room.getOptions().uid;
const w = $('#' + VideoUtil.getVid(uid))
, v = w.data()
@@ -44,7 +49,7 @@ var VideoManager = (function() {
}
this.generateOffer(v.offerToReceiveVideo.bind(v));
}));
- msg.data.forEach(receiveVideo);
+ // TODO FIXME msg.data.forEach(receiveVideo);
}
function leaveRoom() {
@@ -98,8 +103,8 @@ var VideoManager = (function() {
console.info('Received message: ' + m);
switch (m.id) {
- case 'existingParticipants':
- onExistingParticipants(m);
+ case 'broadcast':
+ onBroadcast(m);
break;
case 'newParticipantArrived':
onNewParticipant(m);
@@ -107,16 +112,21 @@ var VideoManager = (function() {
case 'participantLeft':
onParticipantLeft(m);
break;
- case 'receiveVideoAnswer':
- receiveVideoResponse(m);
+ case 'videoResponse':
+ onVideoResponse(m);
break;
case 'iceCandidate':
- participants[m.uid].rtcPeer.addIceCandidate(m.candidate, function (error) {
- if (error) {
- console.error("Error adding candidate: " + error);
- return;
- }
- });
+ {
+ const w = $('#' + VideoUtil.getVid(m.uid))
+ , v = w.data()
+
+ v.getPeer().addIceCandidate(m.candidate, function (error) {
+ if (error) {
+ console.error("Error adding candidate: " + error);
+ return;
+ }
+ });
+ }
break;
default:
console.error('Unrecognized message', m);
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/interview-area.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/interview-area.js
index ad63f30..b7f7881 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/interview-area.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/interview-area.js
@@ -5,6 +5,7 @@ var InterviewWbArea = function() {
, _inited = false, recStart, recStop;
function _init() {
+ Wicket.Event.subscribe("/websocket/message", wbWsHandler);
container = $(".room.wb.area");
area = container.find(".wb-area");
btns = $('.pod-row .pod-container .pod a.choose-btn');
@@ -79,7 +80,9 @@ var InterviewWbArea = function() {
}
self.init = _init;
- self.destroy = function() {};
+ self.destroy = function() {
+ Wicket.Event.unsubscribe("/websocket/message", wbWsHandler);
+ };
self.setRole = _setRole;
self.resize = _resize;
self.setRecStartEnabled = _setRecStartEnabled;
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb-all.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb-all.js
index 923d7ad..0764189 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb-all.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb-all.js
@@ -1,2 +1,15 @@
/* Licensed under the Apache License, Version 2.0 (the "License") http://www.apache.org/licenses/LICENSE-2.0 */
var NONE = 'none';
+function wbWsHandler(jqEvent, msg) {
+ try {
+ if (msg instanceof Blob) {
+ return; //ping
+ }
+ const m = jQuery.parseJSON(msg);
+ if (m && 'wb' === m.type && typeof(WbArea) !== 'undefined' && !!m.func) {
+ WbArea[m.func](m.param);
+ }
+ } catch (err) {
+ //no-op
+ }
+}
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb-area.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb-area.js
index 4539086..dff9e3a 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb-area.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb-area.js
@@ -153,6 +153,7 @@ var DrawWbArea = function() {
});
}
self.init = function() {
+ Wicket.Event.subscribe("/websocket/message", wbWsHandler);
container = $('.room.wb.area');
tabs = container.find('.tabs');
if (tabs.length === 0) return;
@@ -184,6 +185,7 @@ var DrawWbArea = function() {
};
self.destroy = function() {
self.removeDeleteHandler();
+ Wicket.Event.unsubscribe("/websocket/message", wbWsHandler);
};
self.create = function(obj) {
if (!_inited) return;
@@ -338,18 +340,3 @@ var DrawWbArea = function() {
};
return self;
};
-$(function() {
- Wicket.Event.subscribe("/websocket/message", function(jqEvent, msg) {
- try {
- if (msg instanceof Blob) {
- return; //ping
- }
- const m = jQuery.parseJSON(msg);
- if (m && 'wb' === m.type && typeof(WbArea) !== 'undefined' && !!m.func) {
- WbArea[m.func](m.param);
- }
- } catch (err) {
- //no-op
- }
- });
-});
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java
index d49e99b..4b1616b 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java
@@ -55,6 +55,7 @@ import org.apache.wicket.markup.head.PriorityHeaderItem;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.request.cycle.RequestCycle;
import org.apache.wicket.request.resource.JavaScriptResourceReference;
+import org.apache.wicket.spring.injection.annot.SpringBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -79,7 +80,7 @@ public class Chat extends Panel {
long msgId = getRequest().getRequestParameters().getParameterValue(PARAM_MSG_ID).toLong();
ChatDao dao = getBean(ChatDao.class);
ChatMessage m = dao.get(msgId);
- if (m.isNeedModeration() && isModerator(getUserId(), roomId)) {
+ if (m.isNeedModeration() && isModerator(cm, getUserId(), roomId)) {
m.setNeedModeration(false);
dao.update(m);
WebSocketHelper.sendRoom(m, getMessage(Arrays.asList(m)).put("mode", "accept"));
@@ -102,6 +103,9 @@ public class Chat extends Panel {
}
};
+ @SpringBean
+ private ClientManager cm;
+
public Chat(String id) {
super(id);
setOutputMarkupPlaceholderTag(true);
@@ -147,7 +151,7 @@ public class Chat extends Panel {
public CharSequence addRoom(Room r) {
StringBuilder sb = new StringBuilder();
sb.append(String.format("Chat.addTab('%1$s%2$d', '%3$s %2$d');", ID_ROOM_PREFIX, r.getId(), getString("406")));
- List<ChatMessage> list = getBean(ChatDao.class).getRoom(r.getId(), 0, 30, !r.isChatModerated() || isModerator(getUserId(), r.getId()));
+ List<ChatMessage> list = getBean(ChatDao.class).getRoom(r.getId(), 0, 30, !r.isChatModerated() || isModerator(cm, getUserId(), r.getId()));
if (!list.isEmpty()) {
sb.append("Chat.addMessage(").append(getMessage(list).toString()).append(");");
}
@@ -164,7 +168,7 @@ public class Chat extends Panel {
ChatDao dao = getBean(ChatDao.class);
StringBuilder sb = new StringBuilder(getReinit());
List<ChatMessage> list = new ArrayList<>(dao.getGlobal(0, 30));
- for(Long roomId : getBean(ClientManager.class).listRoomIds(getUserId())) {
+ for(Long roomId : cm.listRoomIds(getUserId())) {
Room r = getBean(RoomDao.class).get(roomId);
sb.append(addRoom(r));
}
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatForm.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatForm.java
index 30e88af..99c44b9 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatForm.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatForm.java
@@ -51,6 +51,7 @@ import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.HiddenField;
import org.apache.wicket.model.Model;
+import org.apache.wicket.spring.injection.annot.SpringBean;
import org.apache.wicket.util.string.Strings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -111,13 +112,13 @@ public class ChatForm extends Form<Void> {
if (!process(
() -> getChat().isShowDashboardChat()
, r -> {
- if (getBean(ClientManager.class).isInRoom(r.getId(), getUserId())) {
+ if (cm.isInRoom(r.getId(), getUserId())) {
m.setToRoom(r);
} else {
log.error("It seems like we are being hacked!!!!");
return false;
}
- m.setNeedModeration(r.isChatModerated() && !isModerator(m.getFromUser().getId(), r.getId()));
+ m.setNeedModeration(r.isChatModerated() && !isModerator(cm, m.getFromUser().getId(), r.getId()));
return true;
}, u -> {
m.setToUser(u);
@@ -144,6 +145,9 @@ public class ChatForm extends Form<Void> {
});
}
+ @SpringBean
+ private ClientManager cm;
+
private Client getClient() {
return findParent(MainPanel.class).getClient();
}
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.java
index 62872a7..eab74c5 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.java
@@ -36,6 +36,7 @@ import javax.servlet.http.HttpServletResponse;
import org.apache.openmeetings.db.dao.basic.ChatDao;
import org.apache.openmeetings.db.entity.basic.ChatMessage;
import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.web.app.ClientManager;
import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;
import org.apache.openmeetings.web.pages.BasePage;
import org.apache.wicket.AttributeModifier;
@@ -47,6 +48,7 @@ import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.request.resource.ResourceStreamResource;
+import org.apache.wicket.spring.injection.annot.SpringBean;
import org.apache.wicket.util.resource.IResourceStream;
import org.apache.wicket.util.resource.StringResourceStream;
@@ -80,7 +82,7 @@ public class ChatToolbar extends Panel implements IWysiwygToolbar {
final boolean admin = hasAdminLevel(getRights());
if (!chatForm.process(
() -> admin
- , r -> admin || isModerator(getUserId(), r.getId())
+ , r -> admin || isModerator(cm, getUserId(), r.getId())
, u -> true))
{
rr.setError(HttpServletResponse.SC_FORBIDDEN);
@@ -121,7 +123,7 @@ public class ChatToolbar extends Panel implements IWysiwygToolbar {
return true;
}
, r -> {
- if (admin || isModerator(getUserId(), r.getId())) {
+ if (admin || isModerator(cm, getUserId(), r.getId())) {
setFileName(String.format(CHAT_FNAME_TMPL, "room_" + r.getId()));
export(dao.getRoom(r.getId(), 0, Integer.MAX_VALUE, true), sb);
}
@@ -137,6 +139,9 @@ public class ChatToolbar extends Panel implements IWysiwygToolbar {
}
});
+ @SpringBean
+ private ClientManager cm;
+
/**
* Constructor
*
@@ -192,7 +197,7 @@ public class ChatToolbar extends Panel implements IWysiwygToolbar {
return true;
}
, r -> {
- if (admin || isModerator(getUserId(), r.getId())) {
+ if (admin || isModerator(cm, getUserId(), r.getId())) {
dao.deleteRoom(r.getId());
clean(target, scope);
}
@@ -229,7 +234,7 @@ public class ChatToolbar extends Panel implements IWysiwygToolbar {
return true;
}
, r -> {
- final boolean moder = admin || isModerator(getUserId(), r.getId());
+ final boolean moder = admin || isModerator(cm, getUserId(), r.getId());
target.add(save.setVisible(moder), delBtn.setVisible(moder));
return true;
}, u -> {
--
To stop receiving notification emails like this one, please contact
solomax@apache.org.