diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/breakout/CreateBreakoutRoomsCmdMsgHdlr.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/breakout/CreateBreakoutRoomsCmdMsgHdlr.scala index 5401ece7ba..5a07d42aff 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/breakout/CreateBreakoutRoomsCmdMsgHdlr.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/breakout/CreateBreakoutRoomsCmdMsgHdlr.scala @@ -99,6 +99,7 @@ trait CreateBreakoutRoomsCmdMsgHdlr extends RightsManagementTrait { breakout.captureSlides, breakout.captureNotesFilename, breakout.captureSlidesFilename, + pluginProp = liveMeeting.props.pluginProp, ) val event = buildCreateBreakoutRoomSysCmdMsg(liveMeeting.props.meetingProp.intId, roomDetail) diff --git a/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/BreakoutMsgs.scala b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/BreakoutMsgs.scala index 1783e4cbc3..774d8c9d02 100755 --- a/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/BreakoutMsgs.scala +++ b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/BreakoutMsgs.scala @@ -1,5 +1,7 @@ package org.bigbluebutton.common2.msgs +import java.util + object BreakoutRoomEndedEvtMsg { val NAME = "BreakoutRoomEndedEvtMsg" } case class BreakoutRoomEndedEvtMsg(header: BbbClientMsgHeader, body: BreakoutRoomEndedEvtMsgBody) extends BbbCoreMsg case class BreakoutRoomEndedEvtMsgBody(parentId: String, breakoutId: String) @@ -56,6 +58,7 @@ case class BreakoutRoomDetail( captureSlides: Boolean, captureNotesFilename: String, captureSlidesFilename: String, + pluginProp: util.Map[String, AnyRef], ) /** diff --git a/bbb-common-web/src/main/java/org/bigbluebutton/api/MeetingService.java b/bbb-common-web/src/main/java/org/bigbluebutton/api/MeetingService.java index 0b8ccf58cc..5d885dad9f 100755 --- a/bbb-common-web/src/main/java/org/bigbluebutton/api/MeetingService.java +++ b/bbb-common-web/src/main/java/org/bigbluebutton/api/MeetingService.java @@ -464,15 +464,27 @@ public class MeetingService implements MessageListener { } return urlContents; } + public synchronized boolean createMeeting(Meeting m) { + Map pluginsMap = new HashMap<>(); + return createMeeting(m, pluginsMap); + } + + public synchronized boolean createMeeting(Meeting m, Map plugins) { String internalMeetingId = paramsProcessorUtil.convertToInternalMeetingId(m.getExternalId()); Meeting existingId = getNotEndedMeetingWithId(internalMeetingId); Meeting existingTelVoice = getNotEndedMeetingWithTelVoice(m.getTelVoice()); Meeting existingWebVoice = getNotEndedMeetingWithWebVoice(m.getWebVoice()); if (existingId == null && existingTelVoice == null && existingWebVoice == null) { meetings.put(m.getInternalId(), m); - Map requestedManifests = requestPluginManifests(m); - m.setPlugins(requestedManifests); + Map pluginsMap; + if (m.isBreakout()) { + pluginsMap = plugins; + } else { + pluginsMap = requestPluginManifests(m); + } + + m.setPlugins(pluginsMap); handle(new CreateMeeting(m)); return true; } @@ -808,7 +820,7 @@ public class MeetingService implements MessageListener { Meeting breakout = paramsProcessorUtil.processCreateParams(params); - createMeeting(breakout); + createMeeting(breakout, message.pluginProp); presDownloadService.extractPresentationPage(message.parentMeetingId, message.sourcePresentationId, diff --git a/bbb-common-web/src/main/java/org/bigbluebutton/api/ParamsProcessorUtil.java b/bbb-common-web/src/main/java/org/bigbluebutton/api/ParamsProcessorUtil.java index 676e5e1dc5..4c3d64369b 100755 --- a/bbb-common-web/src/main/java/org/bigbluebutton/api/ParamsProcessorUtil.java +++ b/bbb-common-web/src/main/java/org/bigbluebutton/api/ParamsProcessorUtil.java @@ -576,16 +576,18 @@ public class ParamsProcessorUtil { // Parse Plugins Manifests from config and param ArrayList listOfPluginManifests = new ArrayList(); - //Process plugins from config - if(defaultPluginManifests != null && !defaultPluginManifests.isEmpty()) { - ArrayList pluginManifestsFromConfig = processPluginManifests(defaultPluginManifests); - listOfPluginManifests.addAll(pluginManifestsFromConfig); - } - //Process plugins from /create param - String pluginManifestsParam = params.get(ApiParams.PLUGIN_MANIFESTS); - if (!StringUtils.isEmpty(pluginManifestsParam)) { - ArrayList pluginManifestsFromParam = processPluginManifests(pluginManifestsParam); - listOfPluginManifests.addAll(pluginManifestsFromParam); + if (!isBreakout){ + //Process plugins from config + if (defaultPluginManifests != null && !defaultPluginManifests.isEmpty()) { + ArrayList pluginManifestsFromConfig = processPluginManifests(defaultPluginManifests); + listOfPluginManifests.addAll(pluginManifestsFromConfig); + } + //Process plugins from /create param + String pluginManifestsParam = params.get(ApiParams.PLUGIN_MANIFESTS); + if (!StringUtils.isEmpty(pluginManifestsParam)) { + ArrayList pluginManifestsFromParam = processPluginManifests(pluginManifestsParam); + listOfPluginManifests.addAll(pluginManifestsFromParam); + } } // Check if VirtualBackgrounds is disabled diff --git a/bbb-common-web/src/main/java/org/bigbluebutton/api/messaging/messages/CreateBreakoutRoom.java b/bbb-common-web/src/main/java/org/bigbluebutton/api/messaging/messages/CreateBreakoutRoom.java index b2989e30c2..b147fb033a 100755 --- a/bbb-common-web/src/main/java/org/bigbluebutton/api/messaging/messages/CreateBreakoutRoom.java +++ b/bbb-common-web/src/main/java/org/bigbluebutton/api/messaging/messages/CreateBreakoutRoom.java @@ -1,5 +1,7 @@ package org.bigbluebutton.api.messaging.messages; +import java.util.Map; + public class CreateBreakoutRoom implements IMessage { public final String meetingId; @@ -23,6 +25,7 @@ public class CreateBreakoutRoom implements IMessage { public final Boolean captureSlides; // Upload annotated breakout slides to main room after breakout room end public final String captureNotesFilename; public final String captureSlidesFilename; + public final Map pluginProp; public CreateBreakoutRoom(String meetingId, String parentMeetingId, @@ -43,7 +46,8 @@ public class CreateBreakoutRoom implements IMessage { Boolean captureNotes, Boolean captureSlides, String captureNotesFilename, - String captureSlidesFilename) { + String captureSlidesFilename, + Map pluginProp) { this.meetingId = meetingId; this.parentMeetingId = parentMeetingId; this.name = name; @@ -64,5 +68,6 @@ public class CreateBreakoutRoom implements IMessage { this.captureSlides = captureSlides; this.captureNotesFilename = captureNotesFilename; this.captureSlidesFilename = captureSlidesFilename; + this.pluginProp = pluginProp; } } diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/meeting/OldMeetingMsgHdlrActor.scala b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/meeting/OldMeetingMsgHdlrActor.scala index e5d61e80db..4c2d283629 100755 --- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/meeting/OldMeetingMsgHdlrActor.scala +++ b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/meeting/OldMeetingMsgHdlrActor.scala @@ -127,6 +127,7 @@ class OldMeetingMsgHdlrActor(val olgMsgGW: OldMessageReceivedGW) msg.body.room.captureSlides, msg.body.room.captureNotesFilename, msg.body.room.captureSlidesFilename, + msg.body.room.pluginProp, )) }