diff --git a/akka-bbb-apps/src/main/java/org/bigbluebutton/core/recorders/events/GotoSlidePresentationRecordEvent.java b/akka-bbb-apps/src/main/java/org/bigbluebutton/core/recorders/events/GotoSlidePresentationRecordEvent.java index ff00fb6849b6edb22f2522e36f97370fbf913e74..8e0c30d78b49f39ecbd7bf380de6005bf69f23d4 100755 --- a/akka-bbb-apps/src/main/java/org/bigbluebutton/core/recorders/events/GotoSlidePresentationRecordEvent.java +++ b/akka-bbb-apps/src/main/java/org/bigbluebutton/core/recorders/events/GotoSlidePresentationRecordEvent.java @@ -59,8 +59,8 @@ public class GotoSlidePresentationRecordEvent extends eventMap.put("txtUri", txtUri); } - public void setPngUri(String pngUri) { - eventMap.put("pngUri", pngUri); + public void setSvgUri(String svgUri) { + eventMap.put("svgUri", svgUri); } public void setXOffset(double offset) { diff --git a/akka-bbb-apps/src/main/java/org/bigbluebutton/core/recorders/events/ResizeAndMoveSlidePresentationRecordEvent.java b/akka-bbb-apps/src/main/java/org/bigbluebutton/core/recorders/events/ResizeAndMoveSlidePresentationRecordEvent.java index f5be54c5f920a14e886b28f6a7fed93bb600ebbc..295f5bf8a16c4df0e3b52d4eb733103d815227db 100755 --- a/akka-bbb-apps/src/main/java/org/bigbluebutton/core/recorders/events/ResizeAndMoveSlidePresentationRecordEvent.java +++ b/akka-bbb-apps/src/main/java/org/bigbluebutton/core/recorders/events/ResizeAndMoveSlidePresentationRecordEvent.java @@ -50,8 +50,8 @@ public class ResizeAndMoveSlidePresentationRecordEvent extends eventMap.put("txtUri", txtUri); } - public void setPngUri(String pngUri) { - eventMap.put("pngUri", pngUri); + public void setSvgUri(String svgUri) { + eventMap.put("svgUri", svgUri); } public void setXOffset(double offset) { diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/BigBlueButtonInGW.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/BigBlueButtonInGW.scala index aace43d1e7303c6c476c06c492947a4fd66134aa..f029761d9471d88125c6bec06323f8b3653f9b1d 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/BigBlueButtonInGW.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/BigBlueButtonInGW.scala @@ -234,10 +234,10 @@ class BigBlueButtonInGW(val system: ActorSystem, recorderApp: RecorderApplicatio val swfUri = presBaseUrl + "/slide/" + i val txtUri = presBaseUrl + "/textfiles/" + i - val pngUri = presBaseUrl + "/png/" + i + val svgUri = presBaseUrl + "/svg/" + i val p = new Page(id = id, num = num, thumbUri = thumbnail, swfUri = swfUri, - txtUri = txtUri, pngUri = pngUri, + txtUri = txtUri, svgUri = svgUri, current = current) pages += (p.id -> p) } diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/MessageSenderActor.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/MessageSenderActor.scala index e367a9e0391916ad22fc4834256259aafefb13d5..66fe57a8d8689fb57f31b3757b0239b2e887d80a 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/MessageSenderActor.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/MessageSenderActor.scala @@ -216,7 +216,7 @@ class MessageSenderActor(val meetingId: String, val service: MessageSender) res += "thumb_uri" -> page.thumbUri res += "swf_uri" -> page.swfUri res += "txt_uri" -> page.txtUri - res += "png_uri" -> page.pngUri + res += "svg_uri" -> page.svgUri res += "current" -> page.current res += "x_offset" -> page.xOffset res += "y_offset" -> page.yOffset diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/RecorderActor.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/RecorderActor.scala index 4afaa57e065ffbccf742e61b8bec6f8edab25d7a..ed6084afaa857d964cd664652367e8087769b481 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/RecorderActor.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/RecorderActor.scala @@ -111,7 +111,7 @@ class RecorderActor(val meetingId: String, val recorder: RecorderApplication) event.setThumbUri(msg.page.thumbUri); event.setSwfUri(msg.page.swfUri); event.setTxtUri(msg.page.txtUri); - event.setPngUri(msg.page.pngUri); + event.setSvgUri(msg.page.svgUri); event.setXOffset(msg.page.xOffset); event.setYOffset(msg.page.yOffset); event.setWidthRatio(msg.page.widthRatio); @@ -130,7 +130,7 @@ class RecorderActor(val meetingId: String, val recorder: RecorderApplication) event.setThumbUri(msg.page.thumbUri); event.setSwfUri(msg.page.swfUri); event.setTxtUri(msg.page.txtUri); - event.setPngUri(msg.page.pngUri); + event.setSvgUri(msg.page.svgUri); event.setXOffset(msg.page.xOffset); event.setYOffset(msg.page.yOffset); event.setWidthRatio(msg.page.widthRatio); diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/PresentationModel.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/PresentationModel.scala index 47bfb994b3fc54ca6745114e854ca8dcb2bed015..eac0060212da6f3b85e84199e1b0184a1d3c8ca4 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/PresentationModel.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/PresentationModel.scala @@ -10,7 +10,7 @@ case class Page(id: String, num: Int, thumbUri: String = "", swfUri: String, txtUri: String, - pngUri: String, + svgUri: String, current: Boolean = false, xOffset: Double = 0, yOffset: Double = 0, widthRatio: Double = 100D, heightRatio: Double = 100D) diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/pubsub/senders/PesentationMessageToJsonConverter.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/pubsub/senders/PesentationMessageToJsonConverter.scala index 0b0b3097a082c03e6d87ace495b1af26915c6122..ad67db4b1dbd12e9cd5d6371fdd06e40fd30c18e 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/pubsub/senders/PesentationMessageToJsonConverter.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/pubsub/senders/PesentationMessageToJsonConverter.scala @@ -14,7 +14,7 @@ object PesentationMessageToJsonConverter { res += "thumb_uri" -> page.thumbUri res += "swf_uri" -> page.swfUri res += "txt_uri" -> page.txtUri - res += "png_uri" -> page.pngUri + res += "svg_uri" -> page.svgUri res += "current" -> page.current res += "x_offset" -> page.xOffset res += "y_offset" -> page.yOffset diff --git a/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/GoToSlideReplyMessage.java b/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/GoToSlideReplyMessage.java index f33f2550f7cdad0f974bc23c23a2f8db93a86b54..8a92ff43cc23d993c3a122a79734c10eaee92023 100755 --- a/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/GoToSlideReplyMessage.java +++ b/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/GoToSlideReplyMessage.java @@ -47,7 +47,7 @@ public class GoToSlideReplyMessage { if(pageObj.has(Constants.WIDTH_RATIO) && pageObj.has(Constants.HEIGHT_RATIO) - && pageObj.has("png_uri") + && pageObj.has("svg_uri") && pageObj.has("txt_uri") && pageObj.has("num") && pageObj.has(Constants.Y_OFFSET) @@ -59,7 +59,7 @@ public class GoToSlideReplyMessage { ) { int wRatio = pageObj.get(Constants.WIDTH_RATIO).getAsInt(); int hRatio = pageObj.get(Constants.HEIGHT_RATIO).getAsInt(); - String pngUri = pageObj.get("png_uri").getAsString(); + String svgUri = pageObj.get("svg_uri").getAsString(); String txtUri = pageObj.get("txt_uri").getAsString(); int num = pageObj.get("num").getAsInt(); int xOffset = pageObj.get(Constants.X_OFFSET).getAsInt(); @@ -71,7 +71,7 @@ public class GoToSlideReplyMessage { page.put(Constants.WIDTH_RATIO, wRatio); page.put(Constants.HEIGHT_RATIO, hRatio); - page.put("png_uri", pngUri); + page.put("svg_uri", svgUri); page.put("txt_uri", txtUri); page.put("num", num); page.put(Constants.X_OFFSET, xOffset); diff --git a/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/Util.java b/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/Util.java index 36e707a8b9962a953173da60540374387c5ec6f9..2219090ab01c8ffd9e2eb7cc5fdc608aca949c2b 100755 --- a/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/Util.java +++ b/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/Util.java @@ -328,7 +328,7 @@ public class Util { JsonObject pageObj = (JsonObject)pagesIter.next(); if (pageObj.has("id") && pageObj.has("num") && pageObj.has("thumb_uri") && pageObj.has("swf_uri") - && pageObj.has("txt_uri") && pageObj.has("png_uri") + && pageObj.has("txt_uri") && pageObj.has("svg_uri") && pageObj.has("current") && pageObj.has("x_offset") && pageObj.has("y_offset") && pageObj.has("width_ratio") && pageObj.has("height_ratio")) { @@ -340,7 +340,7 @@ public class Util { String pageThumbUri = pageObj.get("thumb_uri").getAsString(); String pageSwfUri = pageObj.get("swf_uri").getAsString(); String pageTxtUri = pageObj.get("txt_uri").getAsString(); - String pagePngUri = pageObj.get("png_uri").getAsString(); + String pageSvgUri = pageObj.get("svg_uri").getAsString(); Boolean currentPage = pageObj.get("current").getAsBoolean(); Double xOffset = pageObj.get("x_offset").getAsDouble(); @@ -353,7 +353,7 @@ public class Util { page.put("thumbUri", pageThumbUri); page.put("swfUri", pageSwfUri); page.put("txtUri", pageTxtUri); - page.put("pngUri", pagePngUri); + page.put("svgUri", pageSvgUri); page.put("current", currentPage); page.put("xOffset", xOffset); page.put("yOffset", yOffset); @@ -527,7 +527,7 @@ public class Util { final String NUM = "num"; final String HEIGHT_RATIO = "height_ratio"; final String X_OFFSET = "x_offset"; - final String PNG_URI = "png_uri"; + final String SVG_URI = "svg_uri"; final String THUMB_URI = "thumb_uri"; final String TXT_URI = "txt_uri"; final String CURRENT = "current"; @@ -539,7 +539,7 @@ public class Util { && page.has(NUM) && page.has(HEIGHT_RATIO) && page.has(X_OFFSET) - && page.has(PNG_URI) + && page.has(SVG_URI) && page.has(THUMB_URI) && page.has(CURRENT) && page.has(TXT_URI) @@ -553,7 +553,7 @@ public class Util { double num = page.get(NUM).getAsDouble(); double heightRatio = page.get(HEIGHT_RATIO).getAsDouble(); double xOffset = page.get(X_OFFSET).getAsDouble(); - String pngUri = page.get(PNG_URI).getAsString(); + String svgUri = page.get(SVG_URI).getAsString(); String thumbUri = page.get(THUMB_URI).getAsString(); boolean current = page.get(CURRENT).getAsBoolean(); String txtUri = page.get(TXT_URI).getAsString(); @@ -565,7 +565,7 @@ public class Util { finalPage.put(NUM, num); finalPage.put(HEIGHT_RATIO, heightRatio); finalPage.put(X_OFFSET, xOffset); - finalPage.put(PNG_URI, pngUri); + finalPage.put(SVG_URI, svgUri); finalPage.put(THUMB_URI, thumbUri); finalPage.put(CURRENT, current); finalPage.put(TXT_URI, txtUri); diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/red5/client/PresentationClientMessageSender.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/red5/client/PresentationClientMessageSender.java index 2d9e4a92c485597f14f9bb12b7599b2a27f008b7..e2fe63eb58f5fb65cc460f9cc77bf776dc7eb8f7 100755 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/red5/client/PresentationClientMessageSender.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/red5/client/PresentationClientMessageSender.java @@ -72,7 +72,7 @@ public class PresentationClientMessageSender { break; case PresentationSharedMessage.PRESENTATION_SHARED_MESSAGE: processPresentationSharedMessage(message); - break; + break; } } } @@ -151,7 +151,7 @@ public class PresentationClientMessageSender { args.put("current", msg.page.get("current")); args.put("swfUri", msg.page.get("swf_uri")); args.put("txtUri", msg.page.get("txt_uri")); - args.put("pngUri", msg.page.get("png_uri")); + args.put("svgUri", msg.page.get("svg_uri")); args.put("thumbUri", msg.page.get("thumb_uri")); args.put("xOffset", msg.page.get("x_offset")); args.put("yOffset", msg.page.get("y_offset")); @@ -301,7 +301,7 @@ public class PresentationClientMessageSender { args.put("xOffset", msg.page.get(Constants.X_OFFSET)); args.put("num", msg.page.get("num")); args.put("heightRatio", msg.page.get(Constants.HEIGHT_RATIO)); - args.put("pngUri", msg.page.get("png_uri")); + args.put("svgUri", msg.page.get("svg_uri")); args.put("thumbUri", msg.page.get("thumb_uri")); args.put(Constants.CURRENT, msg.page.get(Constants.CURRENT)); args.put("txtUri", msg.page.get("txt_uri")); @@ -317,6 +317,6 @@ public class PresentationClientMessageSender { BroadcastClientMessage m = new BroadcastClientMessage(msg.meetingId, "goToSlideCallback", message); service.sendMessage(m); } - } + } } diff --git a/bigbluebutton-html5/app/client/views/whiteboard/slide.coffee b/bigbluebutton-html5/app/client/views/whiteboard/slide.coffee index 927d91442480af977d385fe9d0e9c165571df195..46a0b7b32110ac2c56132593431680ff7437ef82 100755 --- a/bigbluebutton-html5/app/client/views/whiteboard/slide.coffee +++ b/bigbluebutton-html5/app/client/views/whiteboard/slide.coffee @@ -9,13 +9,13 @@ Template.slide.rendered = -> if !$('.panel-footer').hasClass('ui-resizable-resizing') # not in the middle of resizing the message input redrawWhiteboard() ) - if currentSlide?.slide?.png_uri? + if currentSlide?.slide?.svg_uri? createWhiteboardPaper (wpm) -> displaySlide wpm Tracker.autorun (comp) -> # whiteboard is redrawn every time user becomes a presenter or loses that status if BBB.isUserPresenter(getInSession('userId')) isnt undefined redrawWhiteboard() - pic.src = currentSlide?.slide?.png_uri + pic.src = currentSlide?.slide?.svg_uri @createWhiteboardPaper = (callback) => @whiteboardPaperModel = new Meteor.WhiteboardPaperModel('whiteboard-paper') @@ -25,7 +25,7 @@ Template.slide.rendered = -> currentSlide = getCurrentSlideDoc() wpm.create() adjustedDimensions = scaleSlide(getInSession('slideOriginalWidth'), getInSession('slideOriginalHeight')) - wpm._displayPage(currentSlide?.slide?.png_uri, getInSession('slideOriginalWidth'), getInSession('slideOriginalHeight')) + wpm._displayPage(currentSlide?.slide?.svg_uri, getInSession('slideOriginalWidth'), getInSession('slideOriginalHeight')) manuallyDisplayShapes() wpm.scale(adjustedDimensions.width, adjustedDimensions.height) diff --git a/bigbluebutton-html5/app/server/collection_methods/slides.coffee b/bigbluebutton-html5/app/server/collection_methods/slides.coffee index 04128babbe5e937c55abf4b3ef9589753b5754dc..09afd0727493be150cb7b2133067f17ff6343507 100755 --- a/bigbluebutton-html5/app/server/collection_methods/slides.coffee +++ b/bigbluebutton-html5/app/server/collection_methods/slides.coffee @@ -23,7 +23,7 @@ num: slideObject.num x_offset: slideObject.x_offset current: slideObject.current - png_uri: slideObject.png_uri + svg_uri: slideObject.svg_uri txt_uri: slideObject.txt_uri id: slideObject.id width_ratio: slideObject.width_ratio diff --git a/bigbluebutton-web/grails-app/conf/UrlMappings.groovy b/bigbluebutton-web/grails-app/conf/UrlMappings.groovy index c01269da1b78d336191e84f827a9276e53e70f8b..abf6aa14952546e20be2142d925ad5d7b9c50d98 100755 --- a/bigbluebutton-web/grails-app/conf/UrlMappings.groovy +++ b/bigbluebutton-web/grails-app/conf/UrlMappings.groovy @@ -25,12 +25,12 @@ class UrlMappings { action = [GET:'showThumbnail'] } - "/presentation/$conference/$room/$presentation_name/pngs"(controller:"presentation") { - action = [GET:'numberOfPngs'] + "/presentation/$conference/$room/$presentation_name/svgs"(controller:"presentation") { + action = [GET:'numberOfSvgs'] } - "/presentation/$conference/$room/$presentation_name/png/$id"(controller:"presentation") { - action = [GET:'showPngImage'] + "/presentation/$conference/$room/$presentation_name/svg/$id"(controller:"presentation") { + action = [GET:'showSvgImage'] } "/presentation/$conference/$room/$presentation_name/textfiles"(controller:"presentation") { diff --git a/bigbluebutton-web/grails-app/conf/bigbluebutton.properties b/bigbluebutton-web/grails-app/conf/bigbluebutton.properties index 7db5c4fd8864631030ab3ca146f7cfe76f659569..2bbf9cb2a3738715eeececd45fb41e564c00b08f 100755 --- a/bigbluebutton-web/grails-app/conf/bigbluebutton.properties +++ b/bigbluebutton-web/grails-app/conf/bigbluebutton.properties @@ -69,9 +69,9 @@ maxNumPages=200 MAX_SWF_FILE_SIZE=500000 #---------------------------------------------------- -# Additional conversion of the presentation slides to PNG +# Additional conversion of the presentation slides to SVG # to be used in the HTML5 client -pngImagesRequired=false +svgImagesRequired=false # Default number of digits for voice conference users joining through the PSTN. defaultNumDigitsForTelVoice=5 diff --git a/bigbluebutton-web/grails-app/conf/spring/doc-conversion.xml b/bigbluebutton-web/grails-app/conf/spring/doc-conversion.xml index 14501b7d88acd994020da998dbfdb8dc2c4414d6..f4336ed549b692af7d4e86d44e2ed5fe79964c9a 100755 --- a/bigbluebutton-web/grails-app/conf/spring/doc-conversion.xml +++ b/bigbluebutton-web/grails-app/conf/spring/doc-conversion.xml @@ -79,7 +79,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. <property name="imageMagickDir" value="${imageMagickDir}"/> </bean> - <bean id="pngImageCreator" class="org.bigbluebutton.presentation.imp.PngImageCreatorImp"> + <bean id="svgImageCreator" class="org.bigbluebutton.presentation.imp.SvgImageCreatorImp"> <property name="imageMagickDir" value="${imageMagickDir}"/> </bean> @@ -91,18 +91,18 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. <property name="pdfPageToImageConversionService" ref="imageConvSvc"/> <property name="thumbnailCreator" ref="thumbCreator"/> <property name="textFileCreator" ref="textFileCreator"/> - <property name="pngImageCreator" ref="pngImageCreator"/> + <property name="svgImageCreator" ref="svgImageCreator"/> <property name="blankSlide" value="${BLANK_SLIDE}"/> <property name="maxSwfFileSize" value="${MAX_SWF_FILE_SIZE}"/> <property name="maxConversionTime" value="${maxConversionTime}"/> <property name="swfSlidesGenerationProgressNotifier" ref="swfSlidesGenerationProgressNotifier"/> - <property name="pngImagesRequired" value="${pngImagesRequired}"/> + <property name="svgImagesRequired" value="${svgImagesRequired}"/> </bean> <bean id="imageToSwfSlidesGenerationService" class="org.bigbluebutton.presentation.imp.ImageToSwfSlidesGenerationService"> <property name="pngPageConverter" ref="png2SwfConverter"/> <property name="jpgPageConverter" ref="jpg2SwfConverter"/> - <property name="pngImageCreator" ref="pngImageCreator"/> + <property name="svgImageCreator" ref="svgImageCreator"/> <property name="thumbnailCreator" ref="thumbCreator"/> <property name="textFileCreator" ref="textFileCreator"/> <property name="blankSlide" value="${BLANK_SLIDE}"/> @@ -114,4 +114,4 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. <property name="messagingService" ref="messagingService"/> <property name="generatedSlidesInfoHelper" ref="generatedSlidesInfoHelper"/> </bean> -</beans> +</beans> 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 old mode 100644 new mode 100755 index ce6feec68f03c779aaa162117b4fe3474f21d9d6..4460cac78befdd022c1dc5f2b6df27fdf02be24e --- a/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/PresentationController.groovy +++ b/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/PresentationController.groovy @@ -144,7 +144,7 @@ class PresentationController { return null; } - def showPngImage = { + def showSvgImage = { def presentationName = params.presentation_name def conf = params.conference def rm = params.room @@ -153,11 +153,11 @@ class PresentationController { InputStream is = null; try { // def f = confInfo() - def pres = presentationService.showPngImage(conf, rm, presentationName, slide) + def pres = presentationService.showSvgImage(conf, rm, presentationName, slide) if (pres.exists()) { def bytes = pres.readBytes() response.addHeader("Cache-Control", "no-cache") - response.contentType = 'image/png' + response.contentType = 'image/svg+xml' response.outputStream << bytes; } } catch (IOException e) { @@ -308,18 +308,18 @@ class PresentationController { } } - def numberOfPngs = { + def numberOfSvgs = { def filename = params.presentation_name def f = confInfo() - def numPngs = presentationService.numberOfPngs(f.conference, f.room, filename) + def numSvgs = presentationService.numberOfSvgs(f.conference, f.room, filename) withFormat { xml { render(contentType:"text/xml") { conference(id:f.conference, room:f.room) { presentation(name:filename) { - pngs(count:numPngs) { - for (def i=0;i<numPngs;i++) { - png(name:"pngs/${i}") + svgs(count:numSvgs) { + for (def i=0;i<numSvgs;i++) { + svg(name:"svgs/${i}") } } } 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 old mode 100644 new mode 100755 index 2b1f6b0cc22f96f6db24bf59f1a0532b23897d8c..3e3d700678290f08242b6923a58317f2c0682f9c --- a/bigbluebutton-web/grails-app/services/org/bigbluebutton/web/services/PresentationService.groovy +++ b/bigbluebutton-web/grails-app/services/org/bigbluebutton/web/services/PresentationService.groovy @@ -94,8 +94,8 @@ class PresentationService { new File(roomDirectory(conf, room).absolutePath + File.separatorChar + presentationName + File.separatorChar + "slide-${id}.swf") } - def showPngImage(String conf, String room, String presentationName, String id) { - new File(roomDirectory(conf, room).absolutePath + File.separatorChar + presentationName + File.separatorChar + "pngs" + File.separatorChar + "slide${id}.png") + def showSvgImage(String conf, String room, String presentationName, String id) { + new File(roomDirectory(conf, room).absolutePath + File.separatorChar + presentationName + File.separatorChar + "svgs" + File.separatorChar + "slide${id}.svg") } def showPresentation = {conf, room, filename -> @@ -125,9 +125,9 @@ class PresentationService { thumbDir.listFiles().length } - def numberOfPngs = {conf, room, name -> - def PngsDir = new File(roomDirectory(conf, room).absolutePath + File.separatorChar + name + File.separatorChar + "pngs") - PngsDir.listFiles().length + def numberOfSvgs = {conf, room, name -> + def SvgsDir = new File(roomDirectory(conf, room).absolutePath + File.separatorChar + name + File.separatorChar + "svgs") + SvgsDir.listFiles().length } def numberOfTextfiles = {conf, room, name -> @@ -166,8 +166,8 @@ class PresentationService { /*** Helper classes **/ import java.io.FilenameFilter; import java.io.File; -class PngFilter implements FilenameFilter { +class SvgFilter implements FilenameFilter { public boolean accept(File dir, String name) { - return (name.endsWith(".png")); + return (name.endsWith(".svg")); } } diff --git a/bigbluebutton-web/src/java/org/bigbluebutton/presentation/ConversionMessageConstants.java b/bigbluebutton-web/src/java/org/bigbluebutton/presentation/ConversionMessageConstants.java index f2eb04fc29112a5b074f3ba1a56683f66e2565a2..53aa6b3c0c7a3988ce59f905cda783ea08a10c80 100755 --- a/bigbluebutton-web/src/java/org/bigbluebutton/presentation/ConversionMessageConstants.java +++ b/bigbluebutton-web/src/java/org/bigbluebutton/presentation/ConversionMessageConstants.java @@ -33,7 +33,7 @@ public class ConversionMessageConstants { public static final String GENERATED_THUMBNAIL_KEY = "GENERATED_THUMBNAIL"; public static final String GENERATING_TEXTFILES_KEY = "GENERATING_TEXTFILES"; public static final String GENERATED_TEXTFILES_KEY = "GENERATED_TEXTFILES"; - public static final String GENERATING_PNGIMAGES_KEY = "GENERATING_PNGIMAGES"; - public static final String GENERATED_PNGIMAGES_KEY = "GENERATED_PNGIMAGES"; + public static final String GENERATING_SVGIMAGES_KEY = "GENERATING_SVGIMAGES"; + public static final String GENERATED_SVGIMAGES_KEY = "GENERATED_SVGIMAGES"; public static final String CONVERSION_COMPLETED_KEY = "CONVERSION_COMPLETED"; } diff --git a/bigbluebutton-web/src/java/org/bigbluebutton/presentation/PngImageCreator.java b/bigbluebutton-web/src/java/org/bigbluebutton/presentation/SvgImageCreator.java similarity index 88% rename from bigbluebutton-web/src/java/org/bigbluebutton/presentation/PngImageCreator.java rename to bigbluebutton-web/src/java/org/bigbluebutton/presentation/SvgImageCreator.java index 019fc6d4be0f9286f458900d594f707693df6df1..d0af7ad08d7ce646630052056a3082d664e43fc8 100755 --- a/bigbluebutton-web/src/java/org/bigbluebutton/presentation/PngImageCreator.java +++ b/bigbluebutton-web/src/java/org/bigbluebutton/presentation/SvgImageCreator.java @@ -22,6 +22,6 @@ */ package org.bigbluebutton.presentation; -public interface PngImageCreator { - public boolean createPngImages(UploadedPresentation pres); +public interface SvgImageCreator { + public boolean createSvgImages(UploadedPresentation pres); } diff --git a/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/ImageToSwfSlidesGenerationService.java b/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/ImageToSwfSlidesGenerationService.java old mode 100644 new mode 100755 index 1b4f6a4e5710606bd10a1c703bc0b2c6812d6b24..9e781b684a815048ac7ed17e4afe6324bcc030c6 --- a/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/ImageToSwfSlidesGenerationService.java +++ b/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/ImageToSwfSlidesGenerationService.java @@ -30,7 +30,7 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import org.bigbluebutton.presentation.PageConverter; import org.bigbluebutton.presentation.ImageToSwfSlide; -import org.bigbluebutton.presentation.PngImageCreator; +import org.bigbluebutton.presentation.SvgImageCreator; import org.bigbluebutton.presentation.TextFileCreator; import org.bigbluebutton.presentation.ThumbnailCreator; import org.bigbluebutton.presentation.UploadedPresentation; @@ -45,7 +45,7 @@ public class ImageToSwfSlidesGenerationService { private SwfSlidesGenerationProgressNotifier notifier; private PageConverter jpgToSwfConverter; private PageConverter pngToSwfConverter; - private PngImageCreator pngImageCreator; + private SvgImageCreator svgImageCreator; private ThumbnailCreator thumbnailCreator; private TextFileCreator textFileCreator; private long MAX_CONVERSION_TIME = 5*60*1000; @@ -69,7 +69,7 @@ public class ImageToSwfSlidesGenerationService { /* adding accessibility */ createTextFiles(pres); createThumbnails(pres); - createPngImages(pres); + createSvgImages(pres); notifier.sendConversionCompletedMessage(pres); } @@ -95,10 +95,10 @@ public class ImageToSwfSlidesGenerationService { thumbnailCreator.createThumbnails(pres); } - private void createPngImages(UploadedPresentation pres) { - log.debug("Creating PNG images."); - notifier.sendCreatingPngImagesUpdateMessage(pres); - pngImageCreator.createPngImages(pres); + private void createSvgImages(UploadedPresentation pres) { + log.debug("Creating SVG images."); + notifier.sendCreatingSvgImagesUpdateMessage(pres); + svgImageCreator.createSvgImages(pres); } private void convertImageToSwf(UploadedPresentation pres, PageConverter pageConverter) { @@ -184,8 +184,8 @@ public class ImageToSwfSlidesGenerationService { this.textFileCreator = textFileCreator; } - public void setPngImageCreator(PngImageCreator pngImageCreator) { - this.pngImageCreator = pngImageCreator; + public void setSvgImageCreator(SvgImageCreator svgImageCreator) { + this.svgImageCreator = svgImageCreator; } public void setMaxConversionTime(int minutes) { diff --git a/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/PdfPageToImageConversionService.java b/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/PdfPageToImageConversionService.java index bcf233a91f3d3d9bce66315d43005c29b212f8fa..ed47637f550a2658876ce34d24204f349263b452 100755 --- a/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/PdfPageToImageConversionService.java +++ b/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/PdfPageToImageConversionService.java @@ -41,7 +41,7 @@ public class PdfPageToImageConversionService { log.debug("Creating temporary pdf " + tempPdfFile.getAbsolutePath()); if (extractor.extractPage(presentationFile, tempPdfFile, page)) { - File tempPngFile = new File(tempDir.getAbsolutePath() + "/temp-" + page + ".png"); + File tempPngFile = new File(tempDir.getAbsolutePath() + "/temp-" + page + ".svg"); log.debug("Creating PNG " + tempPngFile.getAbsolutePath()); if (pdfToImageConverter.convert(tempPdfFile, tempPngFile, 1)) { diff --git a/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/PdfToSwfSlidesGenerationService.java b/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/PdfToSwfSlidesGenerationService.java old mode 100644 new mode 100755 index 219028f5b22198284be638e53146487bc4fd8427..e245599fe1f2f35a4018765eccdf871d69a9d6dc --- a/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/PdfToSwfSlidesGenerationService.java +++ b/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/PdfToSwfSlidesGenerationService.java @@ -35,7 +35,7 @@ import org.bigbluebutton.presentation.ConversionMessageConstants; import org.bigbluebutton.presentation.ConversionUpdateMessage; import org.bigbluebutton.presentation.PageConverter; import org.bigbluebutton.presentation.PdfToSwfSlide; -import org.bigbluebutton.presentation.PngImageCreator; +import org.bigbluebutton.presentation.SvgImageCreator; import org.bigbluebutton.presentation.TextFileCreator; import org.bigbluebutton.presentation.ThumbnailCreator; import org.bigbluebutton.presentation.UploadedPresentation; @@ -55,11 +55,11 @@ public class PdfToSwfSlidesGenerationService { private ThumbnailCreator thumbnailCreator; private TextFileCreator textFileCreator; - private PngImageCreator pngImageCreator; + private SvgImageCreator svgImageCreator; private long MAX_CONVERSION_TIME = 5*60*1000; private String BLANK_SLIDE; private int MAX_SWF_FILE_SIZE; - private boolean pngImagesRequired; + private boolean svgImagesRequired; public void generateSlides(UploadedPresentation pres) { log.debug("Generating slides"); @@ -70,9 +70,9 @@ public class PdfToSwfSlidesGenerationService { createTextFiles(pres); createThumbnails(pres); - // only create PNG images if the configuration requires it - if (pngImagesRequired) { - createPngImages(pres); + // only create SVG images if the configuration requires it + if (svgImagesRequired) { + createSvgImages(pres); } notifier.sendConversionCompletedMessage(pres); @@ -114,10 +114,10 @@ public class PdfToSwfSlidesGenerationService { textFileCreator.createTextFiles(pres); } - private void createPngImages(UploadedPresentation pres) { - log.info("Creating PNG images. MeetingId=[" + pres.getMeetingId() + "], presId=[" + pres.getId() + "], name=[" + pres.getName() + "]"); - notifier.sendCreatingPngImagesUpdateMessage(pres); - pngImageCreator.createPngImages(pres); + private void createSvgImages(UploadedPresentation pres) { + log.info("Creating SVG images. MeetingId=[" + pres.getMeetingId() + "], presId=[" + pres.getId() + "], name=[" + pres.getName() + "]"); + notifier.sendCreatingSvgImagesUpdateMessage(pres); + svgImageCreator.createSvgImages(pres); } private void convertPdfToSwf(UploadedPresentation pres) { @@ -214,8 +214,8 @@ public class PdfToSwfSlidesGenerationService { this.MAX_SWF_FILE_SIZE = size; } - public void setPngImagesRequired(boolean png) { - this.pngImagesRequired = png; + public void setSvgImagesRequired(boolean svg) { + this.svgImagesRequired = svg; } public void setThumbnailCreator(ThumbnailCreator thumbnailCreator) { @@ -224,8 +224,8 @@ public class PdfToSwfSlidesGenerationService { public void setTextFileCreator(TextFileCreator textFileCreator) { this.textFileCreator = textFileCreator; } - public void setPngImageCreator(PngImageCreator pngImageCreator) { - this.pngImageCreator = pngImageCreator; + public void setSvgImageCreator(SvgImageCreator svgImageCreator) { + this.svgImageCreator = svgImageCreator; } public void setMaxConversionTime(int minutes) { MAX_CONVERSION_TIME = minutes * 60 * 1000; diff --git a/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/PngImageCreatorImp.java b/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/SvgImageCreatorImp.java similarity index 63% rename from bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/PngImageCreatorImp.java rename to bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/SvgImageCreatorImp.java index e36a22639deb412c39d7c76aa030f326f08848e7..ce76de22c7b592e2bfc9685e25ae35127aafedef 100755 --- a/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/PngImageCreatorImp.java +++ b/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/SvgImageCreatorImp.java @@ -6,21 +6,21 @@ import java.io.FileWriter; import java.io.IOException; import java.io.Writer; -import org.bigbluebutton.presentation.PngImageCreator; +import org.bigbluebutton.presentation.SvgImageCreator; import org.bigbluebutton.presentation.SupportedFileTypes; import org.bigbluebutton.presentation.UploadedPresentation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class PngImageCreatorImp implements PngImageCreator { - private static Logger log = LoggerFactory.getLogger(PngImageCreatorImp.class); +public class SvgImageCreatorImp implements SvgImageCreator { + private static Logger log = LoggerFactory.getLogger(SvgImageCreatorImp.class); private String IMAGEMAGICK_DIR; @Override - public boolean createPngImages(UploadedPresentation pres) { + public boolean createSvgImages(UploadedPresentation pres) { boolean success = false; - File imagePresentationDir = determinePngImagesDirectory(pres.getUploadedFile()); + File imagePresentationDir = determineSvgImagesDirectory(pres.getUploadedFile()); if (! imagePresentationDir.exists()) imagePresentationDir.mkdir(); @@ -28,7 +28,7 @@ public class PngImageCreatorImp implements PngImageCreator { try { extractPdfPages(pres); - success = generatePngImages(imagePresentationDir,pres); + success = generateSvgImages(imagePresentationDir,pres); } catch (InterruptedException e) { log.warn("Interrupted Exception while generating images."); success = false; @@ -38,7 +38,7 @@ public class PngImageCreatorImp implements PngImageCreator { } private void extractPdfPages(UploadedPresentation pres){ - File tmpDir = new File(pres.getUploadedFile().getParent() + File.separatorChar + "pngs" + File.separatorChar + "tmp"); + File tmpDir = new File(pres.getUploadedFile().getParent() + File.separatorChar + "svgs" + File.separatorChar + "tmp"); if (! tmpDir.exists()) tmpDir.mkdir(); @@ -52,21 +52,26 @@ public class PngImageCreatorImp implements PngImageCreator { } } - private boolean generatePngImages(File imagePresentationDir, UploadedPresentation pres) throws InterruptedException { + private boolean generateSvgImages(File imagePresentationDir, UploadedPresentation pres) throws InterruptedException { String source = pres.getUploadedFile().getAbsolutePath(); String dest; String COMMAND = ""; boolean done = true; if(SupportedFileTypes.isImageFile(pres.getFileType())){ - dest = imagePresentationDir.getAbsolutePath() + File.separator + "slide1.png"; + dest = imagePresentationDir.getAbsolutePath() + File.separator + "slide1.pdf"; COMMAND = IMAGEMAGICK_DIR + "/convert " + source + " " + dest; done = new ExternalProcessExecutor().exec(COMMAND, 60000); + + source = imagePresentationDir.getAbsolutePath() + File.separator + "slide1.pdf"; + dest = imagePresentationDir.getAbsolutePath() + File.separator + "slide1.svg"; + COMMAND = "pdftocairo -rx 300 -ry 300 -svg -q -f 1 -l 1 " + source + " " + dest; + done = new ExternalProcessExecutor().exec(COMMAND, 60000); }else{ for(int i=1; i<=pres.getNumberOfPages(); i++){ File tmp = new File(imagePresentationDir.getAbsolutePath() + File.separatorChar + "tmp" + File.separatorChar + "slide" + i + ".pdf"); - File destpng = new File(imagePresentationDir.getAbsolutePath() + File.separatorChar + "slide" + i + ".png"); - COMMAND = IMAGEMAGICK_DIR + "/convert -density 300x300 -quality 90 +dither -depth 8 -colors 256 " + File.separatorChar + tmp.getAbsolutePath() + " " + destpng.getAbsolutePath(); + File destsvg = new File(imagePresentationDir.getAbsolutePath() + File.separatorChar + "slide" + i + ".svg"); + COMMAND = "pdftocairo -rx 300 -ry 300 -svg -q -f 1 -l 1 " + File.separatorChar + tmp.getAbsolutePath() + " " + destsvg.getAbsolutePath(); done = new ExternalProcessExecutor().exec(COMMAND, 60000); if(!done){ @@ -78,12 +83,12 @@ public class PngImageCreatorImp implements PngImageCreator { if (done) { return true; } - log.warn("Failed to create png images: " + COMMAND); + log.warn("Failed to create svg images: " + COMMAND); return false; } - private File determinePngImagesDirectory(File presentationFile) { - return new File(presentationFile.getParent() + File.separatorChar + "pngs"); + private File determineSvgImagesDirectory(File presentationFile) { + return new File(presentationFile.getParent() + File.separatorChar + "svgs"); } private void cleanDirectory(File directory) { diff --git a/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/SwfSlidesGenerationProgressNotifier.java b/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/SwfSlidesGenerationProgressNotifier.java index a04981e87f807274ef6f2649d839d22ef8d4e007..d3ded12f3af714898192a4541a99a81de39353d4 100755 --- a/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/SwfSlidesGenerationProgressNotifier.java +++ b/bigbluebutton-web/src/java/org/bigbluebutton/presentation/imp/SwfSlidesGenerationProgressNotifier.java @@ -21,9 +21,9 @@ package org.bigbluebutton.presentation.imp; import java.util.Map; -import org.apache.commons.lang.StringEscapeUtils; +import org.apache.commons.lang.StringEscapeUtils; import org.bigbluebutton.api.messaging.MessagingConstants; -import org.bigbluebutton.api.messaging.MessagingService; +import org.bigbluebutton.api.messaging.MessagingService; import org.bigbluebutton.presentation.ConversionMessageConstants; import org.bigbluebutton.presentation.ConversionUpdateMessage; import org.bigbluebutton.presentation.GeneratedSlidesInfoHelper; @@ -47,7 +47,7 @@ public class SwfSlidesGenerationProgressNotifier { String updateMsg = gson.toJson(msg); log.debug("SENDING: " + updateMsg); messagingService.send(MessagingConstants.TO_PRESENTATION_CHANNEL, updateMsg); - log.debug("SENT: " + updateMsg); + log.debug("SENT: " + updateMsg); } else { log.warn("MessagingService has not been set"); } @@ -98,9 +98,9 @@ public class SwfSlidesGenerationProgressNotifier { notifyProgressListener(builder.build().getMessage()); } - public void sendCreatingPngImagesUpdateMessage(UploadedPresentation pres) { + public void sendCreatingSvgImagesUpdateMessage(UploadedPresentation pres) { MessageBuilder builder = new ConversionUpdateMessage.MessageBuilder(pres); - builder.messageKey(ConversionMessageConstants.GENERATING_PNGIMAGES_KEY); + builder.messageKey(ConversionMessageConstants.GENERATING_SVGIMAGES_KEY); notifyProgressListener(builder.build().getMessage()); } }