loleaflet/src/layer/tile/TileLayer.js |   34 ++++++++++++++++++++++++----------
 loleaflet/src/map/Map.js              |   10 ++++++++--
 loolwsd/LOOLSession.cpp               |    6 ++++--
 loolwsd/LOOLWSD.cpp                   |    2 +-
 loolwsd/tsqueue.h                     |    9 +++++++++
 5 files changed, 46 insertions(+), 15 deletions(-)

New commits:
commit 8f48dabf28076fc448ff76ec5da1cdd59990c5b1
Author: Mihai Varga <mihai.va...@collabora.com>
Date:   Tue Jul 21 11:08:08 2015 +0300

    loolwsd: discard requests that are in the queue already

diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp
index 0670876..4bccf72 100644
--- a/loolwsd/LOOLWSD.cpp
+++ b/loolwsd/LOOLWSD.cpp
@@ -243,7 +243,7 @@ public:
                                 // Also forward the "canceltiles" to the child 
process, if any
                                 session->handleInput(buffer, n);
                             }
-                            else
+                            else if (!queue.alreadyInQueue(firstLine))
                             {
                                 queue.put(firstLine);
                             }
diff --git a/loolwsd/tsqueue.h b/loolwsd/tsqueue.h
index 9511efb..25c2ac2 100644
--- a/loolwsd/tsqueue.h
+++ b/loolwsd/tsqueue.h
@@ -54,6 +54,15 @@ public:
                      _queue.end());
     }
 
+    bool alreadyInQueue(std::string cmd) {
+        for (auto it = _queue.cbegin(); it != _queue.cend(); ++it) {
+            if (cmd == *it) {
+                return true;
+            }
+        }
+        return false;
+    }
+
 private:
     std::mutex _mutex;
     std::condition_variable _cv;
commit 47790d9d5dc5b5131a0934080086f94845ef51a9
Author: Mihai Varga <mihai.va...@collabora.com>
Date:   Mon Jul 20 20:10:13 2015 +0300

    loolwsd: use the new invalidate x y widht height command

diff --git a/loolwsd/LOOLSession.cpp b/loolwsd/LOOLSession.cpp
index 69dccc7..cddf845 100644
--- a/loolwsd/LOOLSession.cpp
+++ b/loolwsd/LOOLSession.cpp
@@ -682,7 +682,6 @@ extern "C"
             {
                 int curPart = 
srv->_loKitDocument->pClass->getPart(srv->_loKitDocument);
                 srv->sendTextFrame("curpart: part=" + std::to_string(curPart));
-                srv->sendTextFrame("invalidatetiles: " + 
std::string(pPayload));
                 StringTokenizer tokens(std::string(pPayload), " ", 
StringTokenizer::TOK_IGNORE_EMPTY | StringTokenizer::TOK_TRIM);
                 if (tokens.count() == 4)
                 {
@@ -690,13 +689,16 @@ extern "C"
                     int y(std::stoi(tokens[1]));
                     int width(std::stoi(tokens[2]));
                     int height(std::stoi(tokens[3]));
-                    srv->sendTextFrame("invalidate:"
+                    srv->sendTextFrame("invalidatetiles:"
                                        " part=" + std::to_string(curPart) +
                                        " x=" + std::to_string(x) +
                                        " y=" + std::to_string(y) +
                                        " width=" + std::to_string(width) +
                                        " height=" + std::to_string(height));
                 }
+                else {
+                    srv->sendTextFrame("invalidatetiles: " + 
std::string(pPayload));
+                }
             }
             break;
         case LOK_CALLBACK_INVALIDATE_VISIBLE_CURSOR:
commit 596ee77d5a267ebcc39da09d9f603713c5bdbefb
Author: Mihai Varga <mihai.va...@collabora.com>
Date:   Mon Jul 20 20:09:37 2015 +0300

    loleaflet: use the new invalidate x y widht height command

diff --git a/loleaflet/src/layer/tile/TileLayer.js 
b/loleaflet/src/layer/tile/TileLayer.js
index ba76534..b4d8024 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -249,18 +249,26 @@ L.TileLayer = L.GridLayer.extend({
                        this._onUpdateGraphicSelection();
                }
                else if (textMsg.startsWith('invalidatetiles:') && 
!textMsg.match('EMPTY')) {
-                       strTwips = textMsg.match(/\d+/g);
-                       topLeftTwips = new L.Point(parseInt(strTwips[0]), 
parseInt(strTwips[1]));
-                       offset = new L.Point(parseInt(strTwips[2]), 
parseInt(strTwips[3]));
+                       command = this._parseServerCmd(textMsg);
+                       if (command.x === undefined || command.y === undefined 
|| command.part === undefined) {
+                               strTwips = textMsg.match(/\d+/g);
+                               command.x = parseInt(strTwips[0]);
+                               command.y = parseInt(strTwips[1]);
+                               command.width = parseInt(strTwips[2]);
+                               command.height = parseInt(strTwips[3]);
+                               command.part = this._currentPart;
+                       }
+                       topLeftTwips = new L.Point(command.x, command.y);
+                       offset = new L.Point(command.width, command.height);
                        bottomRightTwips = topLeftTwips.add(offset);
                        var invalidBounds = new L.Bounds(topLeftTwips, 
bottomRightTwips);
 
                        for (var key in this._tiles) {
                                var coords = this._tiles[key].coords;
-                               var point1 = this._coordsToTwips(coords);
-                               var point2 = new L.Point(point1.x + 
this._tileWidthTwips, point1.y + this._tileHeightTwips);
-                               var bounds = new L.Bounds(point1, point2);
-                               if (invalidBounds.intersects(bounds)) {
+                               var tileTopLeft = this._coordsToTwips(coords);
+                               var tileBottomRight = new 
L.Point(this._tileWidthTwips, this._tileHeightTwips);
+                               var bounds = new L.Bounds(tileTopLeft, 
tileTopLeft.add(tileBottomRight));
+                               if (invalidBounds.intersects(bounds) && 
coords.part === command.part) {
                                        if (this._tiles[key]._invalidCount) {
                                                this._tiles[key]._invalidCount 
+= 1;
                                        }
@@ -271,8 +279,8 @@ L.TileLayer = L.GridLayer.extend({
                                                                        'part=' 
+ coords.part + ' ' +
                                                                        
'width=' + this._tileSize + ' ' +
                                                                        
'height=' + this._tileSize + ' ' +
-                                                                       
'tileposx=' + point1.x + ' '    +
-                                                                       
'tileposy=' + point1.y + ' ' +
+                                                                       
'tileposx=' + tileTopLeft.x + ' '    +
+                                                                       
'tileposy=' + tileTopLeft.y + ' ' +
                                                                        
'tilewidth=' + this._tileWidthTwips + ' ' +
                                                                        
'tileheight=' + this._tileHeightTwips, key);
                                }
@@ -281,7 +289,7 @@ L.TileLayer = L.GridLayer.extend({
                                // compute the rectangle that each tile covers 
in the document based
                                // on the zoom level
                                coords = this._keyToTileCoords(key);
-                               if (coords.part !== this._currentPart) {
+                               if (coords.part !== command.part) {
                                        continue;
                                }
                                var scale = this._map.getZoomScale(coords.z);
@@ -476,6 +484,12 @@ L.TileLayer = L.GridLayer.extend({
                        else if (tokens[i].substring(0, 9) === 'tileposy=') {
                                command.y = parseInt(tokens[i].substring(9));
                        }
+                       else if (tokens[i].substring(0, 2) === 'x=') {
+                               command.x = parseInt(tokens[i].substring(2));
+                       }
+                       else if (tokens[i].substring(0, 2) === 'y=') {
+                               command.y = parseInt(tokens[i].substring(2));
+                       }
                        else if (tokens[i].substring(0, 10) === 'tilewidth=') {
                                command.tileWidth = 
parseInt(tokens[i].substring(10));
                        }
commit 7fe1c2707fc7b6ddba50abf8a71bdf320791b4a9
Author: Mihai Varga <mihai.va...@collabora.com>
Date:   Mon Jul 20 12:59:33 2015 +0300

    loleaflet: notify when the connection dropped

diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js
index 3e299f9..d47c8d7 100644
--- a/loleaflet/src/map/Map.js
+++ b/loleaflet/src/map/Map.js
@@ -443,7 +443,8 @@ L.Map = L.Evented.extend({
                        vex.dialog.alert('Socket connection error');
                        return;
                }
-               this.socket.onerror = L.bind(this._socketError, this);
+               this.socket.onerror = L.bind(this._onSocketError, this);
+               this.socket.onclose = L.bind(this._onSocketClose, this);
                this.socket.binaryType = 'arraybuffer';
        },
 
@@ -756,9 +757,14 @@ L.Map = L.Evented.extend({
                return Math.max(min, Math.min(max, zoom));
        },
 
-       _socketError: function (e) {
+       _onSocketError: function (e) {
                console.log(e);
                vex.dialog.alert('Socket connection error');
+       },
+
+       _onSocketClose: function (e) {
+               console.log(e);
+               vex.dialog.alert('Socket connection closed');
        }
 });
 
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to