diff --git a/bigbluebutton-html5/imports/api/users/server/handlers/presenterAssigned.js b/bigbluebutton-html5/imports/api/users/server/handlers/presenterAssigned.js index 105772c23263026b5baed5bd935bf5d74512e3f9..ddd232040867e1ae3c7d21ff9dc22971b542f76b 100644 --- a/bigbluebutton-html5/imports/api/users/server/handlers/presenterAssigned.js +++ b/bigbluebutton-html5/imports/api/users/server/handlers/presenterAssigned.js @@ -1,10 +1,13 @@ import Users from '/imports/api/users'; +import PresentationPods from '/imports/api/presentation-pods'; import changeRole from '/imports/api/users/server/modifiers/changeRole'; +import assignPresenter from '../methods/assignPresenter'; -export default function handlePresenterAssigned({ body }, meetingId) { +export default function handlePresenterAssigned(credentials, meetingId) { const USER_CONFIG = Meteor.settings.public.user; const ROLE_PRESENTER = USER_CONFIG.role_presenter; + const { body } = credentials; const { presenterId, assignedBy } = body; changeRole(ROLE_PRESENTER, true, presenterId, meetingId, assignedBy); @@ -15,11 +18,34 @@ export default function handlePresenterAssigned({ body }, meetingId) { presenter: true, }; + const defaultPodSelector = { + podId: 'DEFAULT_PRESENTATION_POD', + }; + const prevPresenter = Users.findOne(selector); // no previous presenters + // The below code is responsible for set Meeting presenter to be default pod presenter as well. + // It's been handled here because right now akka-apps don't handle all cases scenarios. if (!prevPresenter) { - return true; + const currentDefaultPodPresenter = PresentationPods.findOne(defaultPodSelector); + + const { currentPresenterId } = currentDefaultPodPresenter; + + const podPresenterCredentials = { + meetingId, + requesterUserId: assignedBy, + }; + + if (currentDefaultPodPresenter.currentPresenterId !== '') { + const oldPresenter = Users.findOne({ userId: currentPresenterId }); + + if (oldPresenter.connectionStatus === 'offline') { + return assignPresenter(podPresenterCredentials, presenterId); + } + return true; + } + return assignPresenter(podPresenterCredentials, presenterId); } return changeRole(ROLE_PRESENTER, false, prevPresenter.userId, meetingId, assignedBy);