diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/presentationpod/PresentationConversionCompletedSysPubMsgHdlr.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/presentationpod/PresentationConversionCompletedSysPubMsgHdlr.scala index 2ac6696e2446602b49175dedad236d1deabb1816..6f9cdfe22a46f50e3d4b2a2b7fa0fe1ba5ab86d4 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/presentationpod/PresentationConversionCompletedSysPubMsgHdlr.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/presentationpod/PresentationConversionCompletedSysPubMsgHdlr.scala @@ -16,20 +16,7 @@ trait PresentationConversionCompletedSysPubMsgHdlr { liveMeeting: LiveMeeting, bus: MessageBus ): MeetingState2x = { - def broadcastPresentationConversionCompletedEvtMsg(podId: String, userId: String, messageKey: String, - code: String, presentation: PresentationVO): Unit = { - val routing = Routing.addMsgToClientRouting( - MessageTypes.BROADCAST_TO_MEETING, - liveMeeting.props.meetingProp.intId, userId - ) - val envelope = BbbCoreEnvelope(PresentationConversionCompletedEvtMsg.NAME, routing) - val header = BbbClientMsgHeader(PresentationConversionCompletedEvtMsg.NAME, liveMeeting.props.meetingProp.intId, userId) - - val body = PresentationConversionCompletedEvtMsgBody(podId, messageKey, code, presentation) - val event = PresentationConversionCompletedEvtMsg(header, body) - val msgEvent = BbbCommonEnvCoreMsg(envelope, event) - bus.outGW.send(msgEvent) - } + val meetingId = liveMeeting.props.meetingProp.intId val pages = new collection.mutable.HashMap[String, PageVO] @@ -39,15 +26,20 @@ trait PresentationConversionCompletedSysPubMsgHdlr { pages += page.id -> page } - val pres = new PresentationInPod(msg.body.presentation.id, msg.body.presentation.name, msg.body.presentation.current, - pages.toMap, msg.body.presentation.downloadable) + val downloadable = msg.body.presentation.downloadable + val presentationId = msg.body.presentation.id + val pres = new PresentationInPod(presentationId, msg.body.presentation.name, msg.body.presentation.current, + pages.toMap, downloadable) val presVO = PresentationPodsApp.translatePresentationToPresentationVO(pres) val podId = msg.body.podId val newState = for { pod <- PresentationPodsApp.getPresentationPod(state, podId) } yield { - broadcastPresentationConversionCompletedEvtMsg(pod.id, msg.header.userId, msg.body.messageKey, msg.body.code, presVO) + PresentationSender.broadcastPresentationConversionCompletedEvtMsg(bus, meetingId, + pod.id, msg.header.userId, msg.body.messageKey, msg.body.code, presVO) + PresentationSender.broadcastSetPresentationDownloadableEvtMsg(bus, meetingId, pod.id, + msg.header.userId, presentationId, downloadable, pres.name) var pods = state.presentationPodManager.addPod(pod) pods = pods.addPresentationToPod(pod.id, pres) diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/presentationpod/PresentationSender.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/presentationpod/PresentationSender.scala new file mode 100755 index 0000000000000000000000000000000000000000..3c7d111df6697eab6c79a3ea4f56c245589cbd1c --- /dev/null +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/presentationpod/PresentationSender.scala @@ -0,0 +1,47 @@ +package org.bigbluebutton.core.apps.presentationpod + +import org.bigbluebutton.common2.domain.PresentationVO +import org.bigbluebutton.common2.msgs._ +import org.bigbluebutton.core.bus.MessageBus + +object PresentationSender { + def broadcastSetPresentationDownloadableEvtMsg( + bus: MessageBus, + meetingId: String, + podId: String, userId: String, + presentationId: String, + downloadable: Boolean, + presFilename: String + ): Unit = { + val routing = Routing.addMsgToClientRouting( + MessageTypes.BROADCAST_TO_MEETING, + meetingId, userId + ) + val envelope = BbbCoreEnvelope(SetPresentationDownloadableEvtMsg.NAME, routing) + val header = BbbClientMsgHeader(SetPresentationDownloadableEvtMsg.NAME, meetingId, userId) + + val body = SetPresentationDownloadableEvtMsgBody(podId, presentationId, downloadable, presFilename) + val event = SetPresentationDownloadableEvtMsg(header, body) + val msgEvent = BbbCommonEnvCoreMsg(envelope, event) + bus.outGW.send(msgEvent) + } + + def broadcastPresentationConversionCompletedEvtMsg( + bus: MessageBus, + meetingId: String, + podId: String, userId: String, messageKey: String, + code: String, presentation: PresentationVO + ): Unit = { + val routing = Routing.addMsgToClientRouting( + MessageTypes.BROADCAST_TO_MEETING, + meetingId, userId + ) + val envelope = BbbCoreEnvelope(PresentationConversionCompletedEvtMsg.NAME, routing) + val header = BbbClientMsgHeader(PresentationConversionCompletedEvtMsg.NAME, meetingId, userId) + + val body = PresentationConversionCompletedEvtMsgBody(podId, messageKey, code, presentation) + val event = PresentationConversionCompletedEvtMsg(header, body) + val msgEvent = BbbCommonEnvCoreMsg(envelope, event) + bus.outGW.send(msgEvent) + } +} diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/presentationpod/SetPresentationDownloadablePubMsgHdlr.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/presentationpod/SetPresentationDownloadablePubMsgHdlr.scala old mode 100644 new mode 100755 index 61f3c04e6df07078f367e471e05aad558b50d876..2c24143076b8eecc6989563e33370bb83aa02f0b --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/presentationpod/SetPresentationDownloadablePubMsgHdlr.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/presentationpod/SetPresentationDownloadablePubMsgHdlr.scala @@ -14,26 +14,14 @@ trait SetPresentationDownloadablePubMsgHdlr extends RightsManagementTrait { liveMeeting: LiveMeeting, bus: MessageBus ): MeetingState2x = { + val meetingId = liveMeeting.props.meetingProp.intId + if (filterPresentationMessage(liveMeeting.users2x, msg.header.userId) && permissionFailed(PermissionCheck.GUEST_LEVEL, PermissionCheck.PRESENTER_LEVEL, liveMeeting.users2x, msg.header.userId)) { - val meetingId = liveMeeting.props.meetingProp.intId val reason = "No permission to remove presentation from meeting." PermissionCheck.ejectUserForFailedPermission(meetingId, msg.header.userId, reason, bus.outGW, liveMeeting) state } else { - def broadcastSetPresentationDownloadableEvtMsg(podId: String, userId: String, presentationId: String, downloadable: Boolean): Unit = { - val routing = Routing.addMsgToClientRouting( - MessageTypes.BROADCAST_TO_MEETING, - liveMeeting.props.meetingProp.intId, userId - ) - val envelope = BbbCoreEnvelope(SetPresentationDownloadableEvtMsg.NAME, routing) - val header = BbbClientMsgHeader(SetPresentationDownloadableEvtMsg.NAME, liveMeeting.props.meetingProp.intId, userId) - - val body = SetPresentationDownloadableEvtMsgBody(podId, presentationId, downloadable) - val event = SetPresentationDownloadableEvtMsg(header, body) - val msgEvent = BbbCommonEnvCoreMsg(envelope, event) - bus.outGW.send(msgEvent) - } val podId = msg.body.podId val presentationId = msg.body.presentationId @@ -41,8 +29,10 @@ trait SetPresentationDownloadablePubMsgHdlr extends RightsManagementTrait { val newState = for { pod <- PresentationPodsApp.getPresentationPod(state, podId) + pres <- pod.getPresentation(presentationId) } yield { - broadcastSetPresentationDownloadableEvtMsg(pod.id, msg.header.userId, presentationId, downloadable) + PresentationSender.broadcastSetPresentationDownloadableEvtMsg(bus, meetingId, pod.id, + msg.header.userId, presentationId, downloadable, pres.name) val pods = state.presentationPodManager.setPresentationDownloadableInPod(pod.id, presentationId, downloadable) state.update(pods) diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/FromAkkaAppsMsgSenderActor.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/FromAkkaAppsMsgSenderActor.scala index 919ae73edfe8d7a43ed140524b4d9ccf2935245e..0b54cb1db0f96c504ce5c0c9f112bcd54a7ccf36 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/FromAkkaAppsMsgSenderActor.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/FromAkkaAppsMsgSenderActor.scala @@ -75,8 +75,6 @@ class FromAkkaAppsMsgSenderActor(msgSender: MessageSender) msgSender.send(fromAkkaAppsPresRedisChannel, json) case RemovePresentationEvtMsg.NAME => msgSender.send(fromAkkaAppsPresRedisChannel, json) - case SetPresentationDownloadableEvtMsg.NAME => - msgSender.send(fromAkkaAppsPresRedisChannel, json) case SetCurrentPresentationEvtMsg.NAME => msgSender.send(fromAkkaAppsPresRedisChannel, json) diff --git a/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/PresentationPodsMsgs.scala b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/PresentationPodsMsgs.scala index fa95db5af296589967cbe94e38692c1f334b3c7c..adb578c82b9b3d7bc925dd79a8741f772003346c 100755 --- a/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/PresentationPodsMsgs.scala +++ b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/PresentationPodsMsgs.scala @@ -129,7 +129,7 @@ case class RemovePresentationEvtMsgBody(podId: String, presentationId: String) object SetPresentationDownloadableEvtMsg { val NAME = "SetPresentationDownloadableEvtMsg"} case class SetPresentationDownloadableEvtMsg(header: BbbClientMsgHeader, body: SetPresentationDownloadableEvtMsgBody) extends BbbCoreMsg -case class SetPresentationDownloadableEvtMsgBody(podId: String, presentationId: String, downloadable: Boolean) +case class SetPresentationDownloadableEvtMsgBody(podId: String, presentationId: String, downloadable: Boolean, presFilename: String) object ResizeAndMovePageEvtMsg { val NAME = "ResizeAndMovePageEvtMsg"} case class ResizeAndMovePageEvtMsg(header: BbbClientMsgHeader, body: ResizeAndMovePageEvtMsgBody) extends BbbCoreMsg 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 4a17a2332102bf48ae5d0db0e49637db0931dd66..84321b4f82374f71194238523abbd3aa487ffd01 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 @@ -18,6 +18,7 @@ package org.bigbluebutton.api; +import java.io.File; import java.util.AbstractMap; import java.util.ArrayList; import java.util.Collection; @@ -856,6 +857,8 @@ public class MeetingService implements MessageListener { processGuestPolicyChanged((GuestPolicyChanged) message); } else if (message instanceof RecordChapterBreak) { processRecordingChapterBreak((RecordChapterBreak) message); + } else if (message instanceof MakePresentationDownloadableMsg) { + processMakePresentationDownloadableMsg((MakePresentationDownloadableMsg) message); } } }; @@ -874,6 +877,14 @@ public class MeetingService implements MessageListener { recordingService.kickOffRecordingChapterBreak(msg.meetingId, msg.timestamp); } + private void processMakePresentationDownloadableMsg(MakePresentationDownloadableMsg msg) { + recordingService.processMakePresentationDownloadableMsg(msg); + } + + public File getDownloadablePresentationFile(String meetingId, String presId, String presFilename) { + return recordingService.getDownloadablePresentationFile(meetingId, presId, presFilename); + } + public void start() { log.info("Starting Meeting Service."); try { diff --git a/bbb-common-web/src/main/java/org/bigbluebutton/api/RecordingService.java b/bbb-common-web/src/main/java/org/bigbluebutton/api/RecordingService.java index 351cd69dc5b4fc8c1dbec716792b3be25d2e0dcd..1d9981265350a38ada09bc1b0f1c0c27a9802e3f 100755 --- a/bbb-common-web/src/main/java/org/bigbluebutton/api/RecordingService.java +++ b/bbb-common-web/src/main/java/org/bigbluebutton/api/RecordingService.java @@ -36,6 +36,7 @@ import java.util.Set; import org.apache.commons.io.FileUtils; import org.bigbluebutton.api.domain.Recording; import org.bigbluebutton.api.domain.RecordingMetadata; +import org.bigbluebutton.api.messaging.messages.MakePresentationDownloadableMsg; import org.bigbluebutton.api.util.RecordingMetadataReaderHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -49,6 +50,41 @@ public class RecordingService { private String deletedDir = "/var/bigbluebutton/deleted"; private RecordingMetadataReaderHelper recordingServiceHelper; private String recordStatusDir; + private String presentationBaseDir; + + private void copyPresentationFile(File presFile, File dlownloadableFile) { + try { + FileUtils.copyFile(presFile, dlownloadableFile); + } catch (IOException ex) { + log.error("Failed to copy file: " + ex); + } + } + + public void processMakePresentationDownloadableMsg(MakePresentationDownloadableMsg msg) { + File presDir = Util.getPresentationDir(presentationBaseDir, msg.meetingId, msg.presId); + File downloadableFile = new File(presDir.getAbsolutePath() + File.separatorChar + msg.presFilename); + + if (presDir != null) { + if (msg.downloadable) { + File presFile = new File(presDir.getAbsolutePath() + File.separatorChar + msg.presId + ".pdf"); + copyPresentationFile(presFile, downloadableFile); + } else { + if (downloadableFile.exists()) { + if(downloadableFile.delete()) { + log.info("File deleted. {}", downloadableFile.getAbsolutePath()); + } else { + log.warn("Failed to delete. {}", downloadableFile.getAbsolutePath()); + } + } + } + } + } + + public File getDownloadablePresentationFile(String meetingId, String presId, String presFilename) { + File presDir = Util.getPresentationDir(presentationBaseDir, meetingId, presId); + File downloadableFile = new File(presDir.getAbsolutePath() + File.separatorChar + presFilename); + return downloadableFile; + } public void kickOffRecordingChapterBreak(String meetingId, Long timestamp) { String done = recordStatusDir + "/" + meetingId + "-" + timestamp + ".done"; @@ -287,6 +323,10 @@ public class RecordingService { unpublishedDir = dir; } + public void setPresentationBaseDir(String dir) { + presentationBaseDir = dir; + } + public void setPublishedDir(String dir) { publishedDir = dir; } diff --git a/bbb-common-web/src/main/java/org/bigbluebutton/api/Util.java b/bbb-common-web/src/main/java/org/bigbluebutton/api/Util.java index 0d7d543f68de83e7de6aa966778fee9436164982..e89097adb509814ed79c77f6f7f12e274d9c749c 100755 --- a/bbb-common-web/src/main/java/org/bigbluebutton/api/Util.java +++ b/bbb-common-web/src/main/java/org/bigbluebutton/api/Util.java @@ -14,7 +14,7 @@ public final class Util { return presId + "." + fileExt; } - public static File createPresentationDirectory(String meetingId, String presentationDir, String presentationId) { + public static File createPresentationDir(String meetingId, String presentationDir, String presentationId) { String meetingPath = presentationDir + File.separatorChar + meetingId + File.separatorChar + meetingId; String presPath = meetingPath + File.separatorChar + presentationId; File dir = new File(presPath); @@ -24,11 +24,14 @@ public final class Util { return null; } - public static File downloadPresentationDirectory(String uploadDirectory) { - File dir = new File(uploadDirectory + File.separatorChar + "download"); - if (dir.mkdirs()) { + public static File getPresentationDir(String presentationBaseDir, String meetingId, String presentationId) { + String meetingPath = presentationBaseDir + File.separatorChar + meetingId + File.separatorChar + meetingId; + String presPath = meetingPath + File.separatorChar + presentationId; + File dir = new File(presPath); + if (dir.exists()) { return dir; } return null; } + } diff --git a/bbb-common-web/src/main/java/org/bigbluebutton/api/messaging/messages/MakePresentationDownloadableMsg.java b/bbb-common-web/src/main/java/org/bigbluebutton/api/messaging/messages/MakePresentationDownloadableMsg.java new file mode 100755 index 0000000000000000000000000000000000000000..2faa23411cd3388cba9a37e789aa666b5c3dba53 --- /dev/null +++ b/bbb-common-web/src/main/java/org/bigbluebutton/api/messaging/messages/MakePresentationDownloadableMsg.java @@ -0,0 +1,15 @@ +package org.bigbluebutton.api.messaging.messages; + +public class MakePresentationDownloadableMsg implements IMessage { + public final String meetingId; + public final String presId; + public final String presFilename; + public final Boolean downloadable; + + public MakePresentationDownloadableMsg(String meetingId, String presId, String presFilename, Boolean downloadable) { + this.meetingId = meetingId; + this.presId = presId; + this.presFilename = presFilename; + this.downloadable = downloadable; + } +} diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/ReceivedJsonMsgHdlrActor.scala b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/ReceivedJsonMsgHdlrActor.scala index da4f382cb606fd5f2f6f661628b39695b5341667..289edd8306eed5c7f674c06fac3531e81c7a397c 100755 --- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/ReceivedJsonMsgHdlrActor.scala +++ b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/ReceivedJsonMsgHdlrActor.scala @@ -93,6 +93,8 @@ class ReceivedJsonMsgHdlrActor(val msgFromAkkaAppsEventBus: MsgFromAkkaAppsEvent route[GuestPolicyChangedEvtMsg](envelope, jsonNode) case RecordingChapterBreakSysMsg.NAME => route[RecordingChapterBreakSysMsg](envelope, jsonNode) + case SetPresentationDownloadableEvtMsg.NAME => + route[SetPresentationDownloadableEvtMsg](envelope, jsonNode) case _ => //log.debug("************ Cannot route envelope name " + envelope.name) // do nothing 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 638109b95d82baa90dec88ff3d6d459b1beeb701..b583fbf171f08a9c9dcbe28197405e1af2732794 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 @@ -41,7 +41,7 @@ class OldMeetingMsgHdlrActor(val olgMsgGW: OldMessageReceivedGW) case m: GuestsWaitingApprovedEvtMsg => handleGuestsWaitingApprovedEvtMsg(m) case m: GuestPolicyChangedEvtMsg => handleGuestPolicyChangedEvtMsg(m) case m: RecordingChapterBreakSysMsg => handleRecordingChapterBreakSysMsg(m) - + case m: SetPresentationDownloadableEvtMsg => handleSetPresentationDownloadableEvtMsg(m) case _ => log.error("***** Cannot handle " + msg.envelope.name) } } @@ -140,4 +140,14 @@ class OldMeetingMsgHdlrActor(val olgMsgGW: OldMessageReceivedGW) val m = new GuestStatusChangedEventMsg(msg.header.meetingId, u) olgMsgGW.handle(m) } + + def handleSetPresentationDownloadableEvtMsg(msg: SetPresentationDownloadableEvtMsg): Unit = { + val meetingId = msg.header.meetingId + val presId = msg.body.presentationId + val downloadable = msg.body.downloadable + val presFilename = msg.body.presFilename + val m = new MakePresentationDownloadableMsg(meetingId, presId, presFilename, downloadable) + olgMsgGW.handle(m) + } + } diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/present/business/PresentProxy.as b/bigbluebutton-client/src/org/bigbluebutton/modules/present/business/PresentProxy.as index 37916515e30145454d5f610f71100db22a322cc6..7041e231eaba69df1dbdee0023fe42e73b1a8d03 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/present/business/PresentProxy.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/present/business/PresentProxy.as @@ -198,8 +198,9 @@ package org.bigbluebutton.modules.present.business * */ public function startDownload(e:DownloadEvent):void { - var presentationName:String = e.fileNameToDownload; - var downloadUri:String = host + "/bigbluebutton/presentation/" + conference + "/" + room + "/" + presentationName + "/download"; + var presFilename:String = e.presFilename; + var presId:String = e.presId + var downloadUri:String = host + "/bigbluebutton/presentation/download/" + room + "/" + presId + "/" + presFilename; LOGGER.debug("PresentationApplication::downloadPresentation()... " + downloadUri); var req:URLRequest = new URLRequest(downloadUri); navigateToURL(req,"_blank"); diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/present/events/DownloadEvent.as b/bigbluebutton-client/src/org/bigbluebutton/modules/present/events/DownloadEvent.as index d45300b10757c19c07861761910d7a4f2c918a82..690de7b88caf3105a70201a2582bf4ffc2b670c5 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/present/events/DownloadEvent.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/present/events/DownloadEvent.as @@ -25,7 +25,8 @@ package org.bigbluebutton.modules.present.events public static const CLOSE_DOWNLOAD_WINDOW:String = "CLOSE_DOWNLOAD_WINDOW"; public static const DOWNLOAD_PRESENTATION:String = "DOWNLOAD_PRESENTATION"; - public var fileNameToDownload:String; + public var presFilename:String; + public var presId:String; public var podId:String; public function DownloadEvent(type:String) { diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/DownloadPresentationRenderer.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/DownloadPresentationRenderer.mxml index 574a0e0b97f39459eec6d4bd64da362ee0d07c09..109669c6d79f4c0470820b983a453d0ff69550e5 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/DownloadPresentationRenderer.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/DownloadPresentationRenderer.mxml @@ -13,7 +13,8 @@ private function downloadPresentation():void { var downloadEvent:DownloadEvent = new DownloadEvent(DownloadEvent.DOWNLOAD_PRESENTATION); - downloadEvent.fileNameToDownload = data.id as String; + downloadEvent.presId = data.id as String; + downloadEvent.presFilename = data.name as String; globalDispatch.dispatchEvent(downloadEvent); } ]]> diff --git a/bigbluebutton-web/grails-app/conf/UrlMappings.groovy b/bigbluebutton-web/grails-app/conf/UrlMappings.groovy index e7d2eba07111ebe601b1bf67efeef393c45c22c0..3082ebc7e7c480f9074eb0a45ef067285b7560e1 100755 --- a/bigbluebutton-web/grails-app/conf/UrlMappings.groovy +++ b/bigbluebutton-web/grails-app/conf/UrlMappings.groovy @@ -49,7 +49,7 @@ class UrlMappings { action = [GET:'showTextfile'] } - "/presentation/$conference/$room/$presentation_name/download"(controller:"presentation") { + "/presentation/download/$meetingId/$presId/$presFilename"(controller:"presentation") { action = [GET:'downloadFile'] } diff --git a/bigbluebutton-web/grails-app/conf/spring/resources.xml b/bigbluebutton-web/grails-app/conf/spring/resources.xml index a1a9f6fae71ca5a505a6ae72fd2c39411e1d73f8..05d1f968bbc3a0cbb95982791cb4b6146ff69d33 100755 --- a/bigbluebutton-web/grails-app/conf/spring/resources.xml +++ b/bigbluebutton-web/grails-app/conf/spring/resources.xml @@ -99,6 +99,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. <property name="publishedDir" value="${publishedDir}"/> <property name="unpublishedDir" value="${unpublishedDir}"/> <property name="recordingServiceHelper" ref="recordingServiceHelper"/> + <property name="presentationBaseDir" value="${presentationDir}"/> </bean> <bean id="configServiceHelper" class="org.bigbluebutton.api.ClientConfigServiceHelperImp"/> diff --git a/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/PresentationController.groovy b/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/PresentationController.groovy index 69ae7a25a41934b83a4450b6940a4431993f9d36..b131ed025ce61aa9a6f7ff6437b67b92da37cdb9 100755 --- a/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/PresentationController.groovy +++ b/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/PresentationController.groovy @@ -93,7 +93,7 @@ class PresentationController { def filenameExt = FilenameUtils.getExtension(presFilename); String presentationDir = presentationService.getPresentationDir() def presId = Util.generatePresentationId(presFilename) - File uploadDir = Util.createPresentationDirectory(meetingId, presentationDir, presId) + File uploadDir = Util.createPresentationDir(meetingId, presentationDir, presId) if (uploadDir != null) { def newFilename = Util.createNewFilename(presId, filenameExt) @@ -102,18 +102,6 @@ class PresentationController { def isDownloadable = params.boolean('is_downloadable') //instead of params.is_downloadable def podId = params.pod_id - log.debug "@AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA..." + podId - - if(isDownloadable) { - log.debug "@Creating download directory..." - File downloadDir = Util.downloadPresentationDirectory(uploadDir.absolutePath) - if (downloadDir != null) { - def notValidCharsRegExp = /[^0-9a-zA-Z_\.]/ - def downloadableFileName = presFilename.replaceAll(notValidCharsRegExp, '-') - def downloadableFile = new File( downloadDir.absolutePath + File.separatorChar + downloadableFileName ) - downloadableFile << pres.newInputStream() - } - } def presentationBaseUrl = presentationService.presentationBaseUrl UploadedPresentation uploadedPres = new UploadedPresentation(podId, meetingId, presId, @@ -276,16 +264,18 @@ class PresentationController { } def downloadFile = { - def presentationName = params.presentation_name - def conf = params.conference - def rm = params.room - println "Controller: Download request for $presentationName" + def presId = params.presId + def presFilename = params.presFilename + def meetingId = params.meetingId + + log.debug "Controller: Download request for $presFilename" + String presentationDir = presentationService.getPresentationDir() InputStream is = null; try { - def pres = presentationService.getFile(conf, rm, presentationName) + def pres = meetingService.getDownloadablePresentationFile(meetingId, presId, presFilename) if (pres.exists()) { - println "Controller: Sending pdf reply for $presentationName" + log.debug "Controller: Sending pdf reply for $presFilename" def bytes = pres.readBytes() def responseName = pres.getName(); @@ -293,10 +283,10 @@ class PresentationController { response.addHeader("Cache-Control", "no-cache") response.outputStream << bytes; } else { - println "$pres does not exist." + log.warn "$pres does not exist." } } catch (IOException e) { - println("Error reading file.\n" + e.getMessage()); + log.error("Error reading file.\n" + e.getMessage()); } return null; diff --git a/bigbluebutton-web/grails-app/services/org/bigbluebutton/web/services/PresentationService.groovy b/bigbluebutton-web/grails-app/services/org/bigbluebutton/web/services/PresentationService.groovy index 88f765f9901ead73c5cd10221b5a9097a614361a..79fa143a8654a3b1eed1db08215b432883778206 100755 --- a/bigbluebutton-web/grails-app/services/org/bigbluebutton/web/services/PresentationService.groovy +++ b/bigbluebutton-web/grails-app/services/org/bigbluebutton/web/services/PresentationService.groovy @@ -168,15 +168,6 @@ class PresentationService { } - def getFile = {conf, room, presentationName -> - println "download request for $presentationName" - def fileDirectory = new File(roomDirectory(conf, room).absolutePath + File.separatorChar + presentationName + File.separatorChar + -"download") - //list the files of the download directory ; it must have only 1 file to download - def list = fileDirectory.listFiles() - //new File(pdfFile) - list[0] - } } /*** Helper classes **/