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