From 8b6cdc6edf1b034bdc49f1ec53094d78687d107f Mon Sep 17 00:00:00 2001 From: Daniel Petri Rocha Date: Thu, 18 Jul 2024 16:37:02 +0000 Subject: [PATCH] Initial implementation to let slides be passed in the backend --- .../bigbluebutton/core/apps/BreakoutModel.scala | 5 ++++- .../breakout/CreateBreakoutRoomsCmdMsgHdlr.scala | 16 +++++++++++----- .../core/domain/BreakoutRoom2x.scala | 2 ++ .../common2/msgs/BreakoutMsgs.scala | 2 +- .../PresentationUrlDownloadService.java | 3 ++- 5 files changed, 20 insertions(+), 8 deletions(-) diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/BreakoutModel.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/BreakoutModel.scala index cf83653d87..bba8d27930 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/BreakoutModel.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/BreakoutModel.scala @@ -18,8 +18,11 @@ object BreakoutModel { captureSlides: Boolean, captureNotesFilename: String, captureSlidesFilename: String, + allPages: Boolean, + presId: String, ): BreakoutRoom2x = { - new BreakoutRoom2x(id, externalId, name, parentId, sequence, shortName, isDefaultName, freeJoin, voiceConf, assignedUsers, Vector(), Vector(), None, false, captureNotes, captureSlides, captureNotesFilename, captureSlidesFilename) + new BreakoutRoom2x(id, externalId, name, parentId, sequence, shortName, isDefaultName, freeJoin, voiceConf, assignedUsers, Vector(), Vector(), None, false, + captureNotes, captureSlides, captureNotesFilename, captureSlidesFilename, allPages, presId) } } 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 0b3c5f768d..d2d1f14e99 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 @@ -40,26 +40,30 @@ trait CreateBreakoutRoomsCmdMsgHdlr extends RightsManagementTrait { } def processRequest(msg: CreateBreakoutRoomsCmdMsg, state: MeetingState2x): MeetingState2x = { - - val presId = getPresentationId(state) - val presSlide = getPresentationSlide(state) + val presId = getPresentationId(state) // The current presentation + val presSlide = getPresentationSlide(state) // The current slide val parentId = liveMeeting.props.meetingProp.intId var rooms = new collection.immutable.HashMap[String, BreakoutRoom2x] var i = 0 for (room <- msg.body.rooms) { + val roomPresId = if (room.presId.isEmpty) presId else room.presId; + i += 1 val (internalId, externalId) = BreakoutRoomsUtil.createMeetingIds(liveMeeting.props.meetingProp.intId, i) val voiceConf = BreakoutRoomsUtil.createVoiceConfId(liveMeeting.props.voiceProp.voiceConf, i) val breakout = BreakoutModel.create(parentId, internalId, externalId, room.name, room.sequence, room.shortName, room.isDefaultName, room.freeJoin, voiceConf, room.users, msg.body.captureNotes, - msg.body.captureSlides, room.captureNotesFilename, room.captureSlidesFilename) + msg.body.captureSlides, room.captureNotesFilename, room.captureSlidesFilename, + room.allPages, roomPresId) rooms = rooms + (breakout.id -> breakout) } for (breakout <- rooms.values.toVector) { + val roomSlides = if (breakout.allPages) -1 else presSlide; + val roomDetail = new BreakoutRoomDetail( breakout.id, breakout.name, liveMeeting.props.meetingProp.intId, @@ -72,7 +76,9 @@ trait CreateBreakoutRoomsCmdMsgHdlr extends RightsManagementTrait { msg.body.durationInMinutes * 60, liveMeeting.props.password.moderatorPass, liveMeeting.props.password.viewerPass, - presId, presSlide, msg.body.record, + breakout.presId, + roomSlides, + msg.body.record, liveMeeting.props.breakoutProps.privateChatEnabled, breakout.captureNotes, breakout.captureSlides, diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/domain/BreakoutRoom2x.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/domain/BreakoutRoom2x.scala index 009a2b018d..5fa3a84e07 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/domain/BreakoutRoom2x.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/domain/BreakoutRoom2x.scala @@ -19,6 +19,8 @@ case class BreakoutRoom2x( captureSlides: Boolean, captureNotesFilename: String, captureSlidesFilename: String, + allPages: Boolean, + presId: String, ) { } 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 7ac03144e3..6f0af8d0f9 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 @@ -71,7 +71,7 @@ case class BreakoutRoomDetail( object CreateBreakoutRoomsCmdMsg { val NAME = "CreateBreakoutRoomsCmdMsg" } case class CreateBreakoutRoomsCmdMsg(header: BbbClientMsgHeader, body: CreateBreakoutRoomsCmdMsgBody) extends StandardMsg case class CreateBreakoutRoomsCmdMsgBody(meetingId: String, durationInMinutes: Int, record: Boolean, captureNotes: Boolean, captureSlides: Boolean, rooms: Vector[BreakoutRoomMsgBody], sendInviteToModerators: Boolean) -case class BreakoutRoomMsgBody(name: String, sequence: Int, shortName: String, captureNotesFilename: String, captureSlidesFilename: String, isDefaultName: Boolean, freeJoin: Boolean, users: Vector[String]) +case class BreakoutRoomMsgBody(name: String, sequence: Int, shortName: String, captureNotesFilename: String, captureSlidesFilename: String, isDefaultName: Boolean, freeJoin: Boolean, users: Vector[String], allPages: Boolean, presId: String) // Sent by user to request ending all the breakout rooms object EndAllBreakoutRoomsMsg { val NAME = "EndAllBreakoutRoomsMsg" } diff --git a/bbb-common-web/src/main/java/org/bigbluebutton/presentation/PresentationUrlDownloadService.java b/bbb-common-web/src/main/java/org/bigbluebutton/presentation/PresentationUrlDownloadService.java index 6fe5e1014f..9add5bb657 100755 --- a/bbb-common-web/src/main/java/org/bigbluebutton/presentation/PresentationUrlDownloadService.java +++ b/bbb-common-web/src/main/java/org/bigbluebutton/presentation/PresentationUrlDownloadService.java @@ -94,6 +94,7 @@ public class PresentationUrlDownloadService { }, 5, TimeUnit.SECONDS); } + // A negative presentationSlide indicates the entire presentation deck should be used. private void extractPage(final String sourceMeetingId, final String presentationId, final Integer presentationSlide, final String destinationMeetingId) { @@ -146,7 +147,7 @@ public class PresentationUrlDownloadService { + newFilename; File newPresentation = new File(newFilePath); - if (sourcePresentationFile.getName().toLowerCase().endsWith("pdf")) { + if (sourcePresentationFile.getName().toLowerCase().endsWith("pdf") && presentationSlide >= 0) { pageExtractor.extractPage(sourcePresentationFile, new File( newFilePath), presentationSlide); } else {