fix(bbb-web): fix plugins not loading nor running into breakout-rooms (#21525)

* [fix-breakouts-plugin] - Fix plugin not loading and not running into breakouts.

* [fix-breakouts-plugin] - simplifying createMeeting logic - changes in review
This commit is contained in:
Guilherme Pereira Leme 2024-10-24 22:15:27 -03:00 committed by GitHub
parent 6d4fa12de2
commit d1af76d8ff
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 38 additions and 14 deletions

View File

@ -99,6 +99,7 @@ trait CreateBreakoutRoomsCmdMsgHdlr extends RightsManagementTrait {
breakout.captureSlides, breakout.captureSlides,
breakout.captureNotesFilename, breakout.captureNotesFilename,
breakout.captureSlidesFilename, breakout.captureSlidesFilename,
pluginProp = liveMeeting.props.pluginProp,
) )
val event = buildCreateBreakoutRoomSysCmdMsg(liveMeeting.props.meetingProp.intId, roomDetail) val event = buildCreateBreakoutRoomSysCmdMsg(liveMeeting.props.meetingProp.intId, roomDetail)

View File

@ -1,5 +1,7 @@
package org.bigbluebutton.common2.msgs package org.bigbluebutton.common2.msgs
import java.util
object BreakoutRoomEndedEvtMsg { val NAME = "BreakoutRoomEndedEvtMsg" } object BreakoutRoomEndedEvtMsg { val NAME = "BreakoutRoomEndedEvtMsg" }
case class BreakoutRoomEndedEvtMsg(header: BbbClientMsgHeader, body: BreakoutRoomEndedEvtMsgBody) extends BbbCoreMsg case class BreakoutRoomEndedEvtMsg(header: BbbClientMsgHeader, body: BreakoutRoomEndedEvtMsgBody) extends BbbCoreMsg
case class BreakoutRoomEndedEvtMsgBody(parentId: String, breakoutId: String) case class BreakoutRoomEndedEvtMsgBody(parentId: String, breakoutId: String)
@ -56,6 +58,7 @@ case class BreakoutRoomDetail(
captureSlides: Boolean, captureSlides: Boolean,
captureNotesFilename: String, captureNotesFilename: String,
captureSlidesFilename: String, captureSlidesFilename: String,
pluginProp: util.Map[String, AnyRef],
) )
/** /**

View File

@ -464,15 +464,27 @@ public class MeetingService implements MessageListener {
} }
return urlContents; return urlContents;
} }
public synchronized boolean createMeeting(Meeting m) { public synchronized boolean createMeeting(Meeting m) {
Map<String, Object> pluginsMap = new HashMap<>();
return createMeeting(m, pluginsMap);
}
public synchronized boolean createMeeting(Meeting m, Map<String, Object> plugins) {
String internalMeetingId = paramsProcessorUtil.convertToInternalMeetingId(m.getExternalId()); String internalMeetingId = paramsProcessorUtil.convertToInternalMeetingId(m.getExternalId());
Meeting existingId = getNotEndedMeetingWithId(internalMeetingId); Meeting existingId = getNotEndedMeetingWithId(internalMeetingId);
Meeting existingTelVoice = getNotEndedMeetingWithTelVoice(m.getTelVoice()); Meeting existingTelVoice = getNotEndedMeetingWithTelVoice(m.getTelVoice());
Meeting existingWebVoice = getNotEndedMeetingWithWebVoice(m.getWebVoice()); Meeting existingWebVoice = getNotEndedMeetingWithWebVoice(m.getWebVoice());
if (existingId == null && existingTelVoice == null && existingWebVoice == null) { if (existingId == null && existingTelVoice == null && existingWebVoice == null) {
meetings.put(m.getInternalId(), m); meetings.put(m.getInternalId(), m);
Map<String, Object> requestedManifests = requestPluginManifests(m); Map<String, Object> pluginsMap;
m.setPlugins(requestedManifests); if (m.isBreakout()) {
pluginsMap = plugins;
} else {
pluginsMap = requestPluginManifests(m);
}
m.setPlugins(pluginsMap);
handle(new CreateMeeting(m)); handle(new CreateMeeting(m));
return true; return true;
} }
@ -808,7 +820,7 @@ public class MeetingService implements MessageListener {
Meeting breakout = paramsProcessorUtil.processCreateParams(params); Meeting breakout = paramsProcessorUtil.processCreateParams(params);
createMeeting(breakout); createMeeting(breakout, message.pluginProp);
presDownloadService.extractPresentationPage(message.parentMeetingId, presDownloadService.extractPresentationPage(message.parentMeetingId,
message.sourcePresentationId, message.sourcePresentationId,

View File

@ -576,16 +576,18 @@ public class ParamsProcessorUtil {
// Parse Plugins Manifests from config and param // Parse Plugins Manifests from config and param
ArrayList<PluginManifest> listOfPluginManifests = new ArrayList<PluginManifest>(); ArrayList<PluginManifest> listOfPluginManifests = new ArrayList<PluginManifest>();
//Process plugins from config if (!isBreakout){
if(defaultPluginManifests != null && !defaultPluginManifests.isEmpty()) { //Process plugins from config
ArrayList<PluginManifest> pluginManifestsFromConfig = processPluginManifests(defaultPluginManifests); if (defaultPluginManifests != null && !defaultPluginManifests.isEmpty()) {
listOfPluginManifests.addAll(pluginManifestsFromConfig); ArrayList<PluginManifest> pluginManifestsFromConfig = processPluginManifests(defaultPluginManifests);
} listOfPluginManifests.addAll(pluginManifestsFromConfig);
//Process plugins from /create param }
String pluginManifestsParam = params.get(ApiParams.PLUGIN_MANIFESTS); //Process plugins from /create param
if (!StringUtils.isEmpty(pluginManifestsParam)) { String pluginManifestsParam = params.get(ApiParams.PLUGIN_MANIFESTS);
ArrayList<PluginManifest> pluginManifestsFromParam = processPluginManifests(pluginManifestsParam); if (!StringUtils.isEmpty(pluginManifestsParam)) {
listOfPluginManifests.addAll(pluginManifestsFromParam); ArrayList<PluginManifest> pluginManifestsFromParam = processPluginManifests(pluginManifestsParam);
listOfPluginManifests.addAll(pluginManifestsFromParam);
}
} }
// Check if VirtualBackgrounds is disabled // Check if VirtualBackgrounds is disabled

View File

@ -1,5 +1,7 @@
package org.bigbluebutton.api.messaging.messages; package org.bigbluebutton.api.messaging.messages;
import java.util.Map;
public class CreateBreakoutRoom implements IMessage { public class CreateBreakoutRoom implements IMessage {
public final String meetingId; 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 Boolean captureSlides; // Upload annotated breakout slides to main room after breakout room end
public final String captureNotesFilename; public final String captureNotesFilename;
public final String captureSlidesFilename; public final String captureSlidesFilename;
public final Map<String, Object> pluginProp;
public CreateBreakoutRoom(String meetingId, public CreateBreakoutRoom(String meetingId,
String parentMeetingId, String parentMeetingId,
@ -43,7 +46,8 @@ public class CreateBreakoutRoom implements IMessage {
Boolean captureNotes, Boolean captureNotes,
Boolean captureSlides, Boolean captureSlides,
String captureNotesFilename, String captureNotesFilename,
String captureSlidesFilename) { String captureSlidesFilename,
Map<String, Object> pluginProp) {
this.meetingId = meetingId; this.meetingId = meetingId;
this.parentMeetingId = parentMeetingId; this.parentMeetingId = parentMeetingId;
this.name = name; this.name = name;
@ -64,5 +68,6 @@ public class CreateBreakoutRoom implements IMessage {
this.captureSlides = captureSlides; this.captureSlides = captureSlides;
this.captureNotesFilename = captureNotesFilename; this.captureNotesFilename = captureNotesFilename;
this.captureSlidesFilename = captureSlidesFilename; this.captureSlidesFilename = captureSlidesFilename;
this.pluginProp = pluginProp;
} }
} }

View File

@ -127,6 +127,7 @@ class OldMeetingMsgHdlrActor(val olgMsgGW: OldMessageReceivedGW)
msg.body.room.captureSlides, msg.body.room.captureSlides,
msg.body.room.captureNotesFilename, msg.body.room.captureNotesFilename,
msg.body.room.captureSlidesFilename, msg.body.room.captureSlidesFilename,
msg.body.room.pluginProp,
)) ))
} }