loleaflet/src/control/Toolbar.js           |    1 
 loleaflet/src/layer/tile/TileLayer.js      |    2 
 loleaflet/src/map/handler/Map.Keyboard.js  |    3 -
 loleaflet/src/map/handler/Map.Mouse.js     |    7 ---
 loleaflet/src/map/handler/Map.SlideShow.js |   59 +++--------------------------
 loolwsd/LOOLSession.cpp                    |   20 +++------
 loolwsd/LOOLWSD.cpp                        |   12 +++--
 loolwsd/protocol.txt                       |    3 -
 8 files changed, 27 insertions(+), 80 deletions(-)

New commits:
commit 0ea00afb99b54f05425478967b0477803fb106e7
Author: Mihai Varga <mihai.va...@collabora.com>
Date:   Fri Oct 16 19:45:57 2015 +0300

    loolwsd: allow the specification of the mime type

diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp
index 528a64e..89bc579 100644
--- a/loolwsd/LOOLWSD.cpp
+++ b/loolwsd/LOOLWSD.cpp
@@ -220,8 +220,8 @@ public:
 
         if(!(request.find("Upgrade") != request.end() && 
Poco::icompare(request["Upgrade"], "websocket") == 0))
         {
-            StringTokenizer tokens(request.getURI(), "/");
-            if (tokens.count() == 2 && tokens[1] == "convert-to")
+            StringTokenizer tokens(request.getURI(), "/?");
+            if (tokens.count() >= 2 && tokens[1] == "convert-to")
             {
                 std::vector<char> buffer;
                 ConvertToPartHandler handler(buffer);
@@ -239,7 +239,7 @@ public:
                 response.setContentLength(0);
                 response.send();
             }
-            else if (tokens.count() == 4)
+            else if (tokens.count() >= 4)
             {
                 // The user might request a file to download
                 std::string dirPath = LOOLWSD::childRoot + "/" + tokens[1] + 
LOOLSession::jailDocumentURL + "/" + tokens[2];
@@ -249,7 +249,11 @@ public:
                 if (file.exists())
                 {
                     response.set("Access-Control-Allow-Origin", "*");
-                    response.sendFile(filePath, "application/octet-stream");
+                    Poco::Net::HTMLForm form(request);
+                    std::string mimeType = "application/octet-stream";
+                    if (form.has("mime_type"))
+                        mimeType = form.get("mime_type");
+                    response.sendFile(filePath, mimeType);
                     File dir(dirPath);
                     dir.remove(true);
                 }
commit 9deebf4f87c772218018d84cf5666fa7883707d9
Author: Mihai Varga <mihai.va...@collabora.com>
Date:   Fri Oct 16 19:27:57 2015 +0300

    loleaflet: directly load the presentation in an iframe
    
    We now export the presentation document to a single svg document which
    can be loaded in an iframe and displayed in fullscreen

diff --git a/loleaflet/src/map/handler/Map.SlideShow.js 
b/loleaflet/src/map/handler/Map.SlideShow.js
index cbe38b1..e4ca979 100644
--- a/loleaflet/src/map/handler/Map.SlideShow.js
+++ b/loleaflet/src/map/handler/Map.SlideShow.js
@@ -23,26 +23,25 @@ L.Map.SlideShow = L.Handler.extend({
        },
 
        _onFullScreen: function (e) {
-               this._container = L.DomUtil.create('div', '', 
this._map._container);
-               this._slideShow = L.DomUtil.create('img', 'slide-show', 
this._container);
+               this._slideShow = L.DomUtil.create('iframe', '', 
this._map._container);
                if (this._slideShow.requestFullscreen) {
-                 this._container.requestFullscreen();
+                 this._slideShow.requestFullscreen();
                }
                else if (this._slideShow.msRequestFullscreen) {
-                 this._container.msRequestFullscreen();
+                 this._slideShow.msRequestFullscreen();
                }
                else if (this._slideShow.mozRequestFullScreen) {
-                 this._container.mozRequestFullScreen();
+                 this._slideShow.mozRequestFullScreen();
                }
                else if (this._slideShow.webkitRequestFullscreen) {
-                 this._container.webkitRequestFullscreen();
+                 this._slideShow.webkitRequestFullscreen();
                }
 
                L.DomEvent['on'](document, 'fullscreenchange 
webkitfullscreenchange mozfullscreenchange msfullscreenchange',
                                this._onFullScreenChange, this);
 
                this.fullscreen = true;
-               this._getSlides();
+               L.Socket.sendMessage('downloadas name=slideshow.svg 
id=slideshow format=svg options=');
        },
 
        _onFullScreenChange: function (e) {
@@ -52,54 +51,12 @@ L.Map.SlideShow = L.Handler.extend({
                        document.mozFullScreen ||
                        document.msFullscreenElement;
                if (!this.fullscreen) {
-                       L.DomUtil.remove(this._container);
-               }
-       },
-
-       _getSlides: function () {
-               this._currentSlide = 0;
-               this._slides = [];
-               for (var i = 0; i < this._map.getNumberOfParts(); i++) {
-                       // mark the i-th slide as not available yet
-                       this._slides.push(null);
-               }
-
-               for (var i = 0; i < this._map.getNumberOfParts(); i++) {
-                       L.Socket.sendMessage('downloadas name=' + i + '.svg 
id=slideshow ' +
-                                       'part=' + i + ' format=svg options=');
+                       L.DomUtil.remove(this._slideShow);
                }
        },
 
        _onSlideDownloadReady: function (e) {
-               var xmlHttp = new XMLHttpRequest();
-               var part = e.part;
-               xmlHttp.onreadystatechange = L.bind(function () {
-                       if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
-                               var blob = new Blob([xmlHttp.response], {type: 
'image/svg+xml'});
-                               var url = URL.createObjectURL(blob);
-                               this._slides[part] = url;
-                               if (part === this._currentSlide) {
-                                       this._slideShow.src = url;
-                               }
-                       }
-               }, this);
-               xmlHttp.open('GET', e.url, true);
-               xmlHttp.responseType = 'blob';
-               xmlHttp.send();
-       },
-
-       _onUserInput: function (e) {
-               if (e.type === 'mousedown' || (e.type === 'keydown' &&
-                                       e.originalEvent.keyCode === 39)) {
-                       this._currentSlide = Math.min(this._currentSlide + 1, 
this._map.getNumberOfParts() - 1);
-               }
-               else if (e.type === 'keydown' && e.originalEvent.keyCode === 
37) {
-                       this._currentSlide = Math.max(this._currentSlide - 1, 
0);
-               }
-               else {
-                       return;
-               }
-               this._slideShow.src = this._slides[this._currentSlide];
+               this._slideShow.src = e.url + '?mime_type=image/svg%2Bxml';
        }
 });
 
commit d7ceedac5444512417f93a2c26da45029ba1ee98
Author: Mihai Varga <mihai.va...@collabora.com>
Date:   Fri Oct 16 19:27:13 2015 +0300

    drop 'part' from downloadas protocol as it is no longer needed

diff --git a/loleaflet/src/control/Toolbar.js b/loleaflet/src/control/Toolbar.js
index 0e276f7..c319926 100644
--- a/loleaflet/src/control/Toolbar.js
+++ b/loleaflet/src/control/Toolbar.js
@@ -41,7 +41,6 @@ L.Map.include({
                L.Socket.sendMessage('downloadas ' +
                        'name=' + name + ' ' +
                        'id=-1 ' + // not a special download
-                       'part=-1 ' + // we don't want to export just a single 
part
                        'format=' + format + ' ' +
                        'options=' + options);
        },
diff --git a/loleaflet/src/layer/tile/TileLayer.js 
b/loleaflet/src/layer/tile/TileLayer.js
index e9182e5..b16429f 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -287,7 +287,7 @@ L.TileLayer = L.GridLayer.extend({
                        }
                }
                else if (command.id === 'slideshow') {
-                       this._map.fire('slidedownloadready', {url: url, part: 
command.part});
+                       this._map.fire('slidedownloadready', {url: url});
                }
                else {
                        this._map._fileDownloader.src = url;
diff --git a/loleaflet/src/map/handler/Map.Keyboard.js 
b/loleaflet/src/map/handler/Map.Keyboard.js
index b26f4f3..da463aa 100644
--- a/loleaflet/src/map/handler/Map.Keyboard.js
+++ b/loleaflet/src/map/handler/Map.Keyboard.js
@@ -181,7 +181,6 @@ L.Map.Keyboard = L.Handler.extend({
 
        _onKeyDown: function (e) {
                if (this._map.slideShow && this._map.slideShow.fullscreen) {
-                       this._map.slideShow._onUserInput(e);
                        return;
                }
                var docLayer = this._map._docLayer;
@@ -288,7 +287,7 @@ L.Map.Keyboard = L.Handler.extend({
                                L.Socket.sendMessage('uno .uno:LeftPara');
                                break;
                        case 80: // p
-                               L.Socket.sendMessage('downloadas name=print.pdf 
id=print part=-1 format=pdf options=');
+                               L.Socket.sendMessage('downloadas name=print.pdf 
id=print format=pdf options=');
                                break;
                        case 82: // r
                                L.Socket.sendMessage('uno .uno:RightPara');
diff --git a/loleaflet/src/map/handler/Map.Mouse.js 
b/loleaflet/src/map/handler/Map.Mouse.js
index d5305cf..c0345a4 100644
--- a/loleaflet/src/map/handler/Map.Mouse.js
+++ b/loleaflet/src/map/handler/Map.Mouse.js
@@ -37,12 +37,7 @@ L.Map.Mouse = L.Handler.extend({
 
        _onMouseEvent: function (e) {
                var docLayer = this._map._docLayer;
-               if (!docLayer) {
-                       // document not yet loaded
-                       return;
-               }
-               if (this._map.slideShow && this._map.slideShow.fullscreen) {
-                       this._map.slideShow._onUserInput(e);
+               if (!docLayer || (this._map.slideShow && 
this._map.slideShow.fullscreen)) {
                        return;
                }
                if (docLayer._graphicMarker && 
docLayer._graphicMarker.isDragged) {
diff --git a/loolwsd/LOOLSession.cpp b/loolwsd/LOOLSession.cpp
index f83ab5d..3296139 100644
--- a/loolwsd/LOOLSession.cpp
+++ b/loolwsd/LOOLSession.cpp
@@ -999,22 +999,20 @@ void ChildProcessSession::sendTile(const char* 
/*buffer*/, int /*length*/, Strin
 bool ChildProcessSession::downloadAs(const char* /*buffer*/, int /*length*/, 
StringTokenizer& tokens)
 {
     std::string name, id, format, filterOptions;
-    int part;
 
-    if (tokens.count() < 6 ||
+    if (tokens.count() < 5 ||
         !getTokenString(tokens[1], "name", name) ||
-        !getTokenString(tokens[2], "id", id),
-        !getTokenInteger(tokens[3], "part", part))
+        !getTokenString(tokens[2], "id", id))
     {
         sendTextFrame("error: cmd=downloadas kind=syntax");
         return false;
     }
 
-    getTokenString(tokens[4], "format", format);
+    getTokenString(tokens[3], "format", format);
 
-    if (getTokenString(tokens[5], "options", filterOptions)) {
-        if (tokens.count() > 6) {
-            filterOptions += Poco::cat(std::string(" "), tokens.begin() + 6, 
tokens.end());
+    if (getTokenString(tokens[4], "options", filterOptions)) {
+        if (tokens.count() > 5) {
+            filterOptions += Poco::cat(std::string(" "), tokens.begin() + 5, 
tokens.end());
         }
     }
 
@@ -1032,16 +1030,12 @@ bool ChildProcessSession::downloadAs(const char* 
/*buffer*/, int /*length*/, Str
     } while (file->exists());
     delete file;
 
-    if (part != -1) {
-        // we need this to export a slide to svg
-        _loKitDocument->pClass->setPart(_loKitDocument, part);
-    }
     _loKitDocument->pClass->saveAs(_loKitDocument, url.c_str(),
             format.size() == 0 ? NULL :format.c_str(),
             filterOptions.size() == 0 ? NULL : filterOptions.c_str());
 
     sendTextFrame("downloadas: jail=" + _childId + " dir=" + tmpDir + " name=" 
+ name +
-            " port=" + std::to_string(LOOLWSD::portNumber) + " id=" + id + " 
part=" + std::to_string(part));
+            " port=" + std::to_string(LOOLWSD::portNumber) + " id=" + id);
     return true;
 }
 
diff --git a/loolwsd/protocol.txt b/loolwsd/protocol.txt
index dbe89fb..bc7c453 100644
--- a/loolwsd/protocol.txt
+++ b/loolwsd/protocol.txt
@@ -17,11 +17,10 @@ canceltiles
     dropped and will not be handled. There is no guarantee of exactly
     which tile: messages might still be sent back to the client.
 
-downloadas downloadas name=<fileName> id=<id> part=<part> format=<document 
format> options=<SkipImages, etc>
+downloadas downloadas name=<fileName> id=<id> format=<document format> 
options=<SkipImages, etc>
 
     Exports the current document to the desired format and returns a download 
URL
     The id identifies the request on the client.
-    The part parameter is used to export a specific part, for example when we 
need to export a slide to svg
 
 gettextselection mimetype=<mimeType>
 
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to