[Libreoffice-commits] online.git: 3 commits - loleaflet/src loolwsd/LOOLSession.cpp

Mihai Varga mihai.varga at collabora.com
Wed Jul 29 01:40:58 PDT 2015


 loleaflet/src/layer/tile/GridLayer.js     |   31 ++++++++++++++++++-----
 loleaflet/src/layer/tile/TileLayer.js     |   39 +++++++++++++-----------------
 loleaflet/src/map/handler/Map.Keyboard.js |    1 
 loleaflet/src/map/handler/Map.Mouse.js    |    1 
 loolwsd/LOOLSession.cpp                   |    9 +++---
 5 files changed, 48 insertions(+), 33 deletions(-)

New commits:
commit a6091f9f6bb20a72b0f7e6e985e172c0790e8252
Author: Mihai Varga <mihai.varga at collabora.com>
Date:   Wed Jul 29 11:39:35 2015 +0300

    loolwsd: don't decode the url in the saveAs command

diff --git a/loolwsd/LOOLSession.cpp b/loolwsd/LOOLSession.cpp
index 737435a..7e029f8 100644
--- a/loolwsd/LOOLSession.cpp
+++ b/loolwsd/LOOLSession.cpp
@@ -982,10 +982,7 @@ bool ChildProcessSession::saveAs(const char *buffer, int length, StringTokenizer
         return false;
     }
 
-    URI::decode(url, url, true);
-    if (getTokenString(tokens[2], "format", format)) {
-        URI::decode(format, format, true);
-    }
+    getTokenString(tokens[2], "format", format);
 
     if (getTokenString(tokens[3], "options", filterOptions)) {
         if (tokens.count() > 4) {
@@ -993,7 +990,9 @@ bool ChildProcessSession::saveAs(const char *buffer, int length, StringTokenizer
         }
     }
 
-    _loKitDocument->pClass->saveAs(_loKitDocument, url.c_str(), format.c_str(), filterOptions.c_str());
+    _loKitDocument->pClass->saveAs(_loKitDocument, url.c_str(),
+            format.size() == 0 ? NULL :format.c_str(),
+            filterOptions.size() == 0 ? NULL : filterOptions.c_str());
 
     return true;
 }
commit 932ffaad68cb2934b7e5e3460c5b7b46b6352736
Author: Mihai Varga <mihai.varga at collabora.com>
Date:   Tue Jul 28 12:11:56 2015 +0300

    loleaflet: delete invalid tiles outside of the visible area

diff --git a/loleaflet/src/layer/tile/GridLayer.js b/loleaflet/src/layer/tile/GridLayer.js
index aa1bca6..70f3c10 100644
--- a/loleaflet/src/layer/tile/GridLayer.js
+++ b/loleaflet/src/layer/tile/GridLayer.js
@@ -576,6 +576,9 @@ L.GridLayer = L.Layer.extend({
 			this._tileCache[key] = tile.el.src;
 		}
 
+		if (!tile.loaded && this._emptyTilesCount > 0) {
+			this._emptyTilesCount -= 1;
+		}
 		L.DomUtil.remove(tile.el);
 		delete this._tiles[key];
 
diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js
index 36534c3..83d489c 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -265,6 +265,9 @@ L.TileLayer = L.GridLayer.extend({
 			offset = new L.Point(command.width, command.height);
 			bottomRightTwips = topLeftTwips.add(offset);
 			var invalidBounds = new L.Bounds(topLeftTwips, bottomRightTwips);
+			var visibleTopLeft = this._latLngToTwips(this._map.getBounds().getNorthWest());
+			var visibleBottomRight = this._latLngToTwips(this._map.getBounds().getSouthEast());
+			var visibleArea = new L.Bounds(visibleTopLeft, visibleBottomRight);
 
 			for (var key in this._tiles) {
 				var coords = this._tiles[key].coords;
@@ -278,14 +281,21 @@ L.TileLayer = L.GridLayer.extend({
 					else {
 						this._tiles[key]._invalidCount = 1;
 					}
-					this.sendMessage('tile ' +
-									'part=' + coords.part + ' ' +
-									'width=' + this._tileSize + ' ' +
-									'height=' + this._tileSize + ' ' +
-									'tileposx=' + tileTopLeft.x + ' '    +
-									'tileposy=' + tileTopLeft.y + ' ' +
-									'tilewidth=' + this._tileWidthTwips + ' ' +
-									'tileheight=' + this._tileHeightTwips, key);
+					if (visibleArea.intersects(bounds)) {
+						this.sendMessage('tile ' +
+										'part=' + coords.part + ' ' +
+										'width=' + this._tileSize + ' ' +
+										'height=' + this._tileSize + ' ' +
+										'tileposx=' + tileTopLeft.x + ' '    +
+										'tileposy=' + tileTopLeft.y + ' ' +
+										'tilewidth=' + this._tileWidthTwips + ' ' +
+										'tileheight=' + this._tileHeightTwips, key);
+					}
+					else {
+						// tile outside of the visible area, just remove it
+						this._preFetchBorder = null;
+						this._removeTile(key);
+					}
 				}
 			}
 			for (key in this._tileCache) {
@@ -391,9 +401,6 @@ L.TileLayer = L.GridLayer.extend({
 				}
 				tile.el.src = img;
 			}
-			else {
-				this._tileCache[key] = img;
-			}
 			L.Log.log(textMsg, L.INCOMING, key);
 		}
 		else if (textMsg.startsWith('textselection:')) {
commit f36431571e88e258ca807955b801ea4d111bbc08
Author: Mihai Varga <mihai.varga at collabora.com>
Date:   Tue Jul 28 10:31:51 2015 +0300

    loleaflet: start prefetching after 5s of inactivity
    
    After 5s of inactivity request new tiles every 0.75s

diff --git a/loleaflet/src/layer/tile/GridLayer.js b/loleaflet/src/layer/tile/GridLayer.js
index b8c5e53..aa1bca6 100644
--- a/loleaflet/src/layer/tile/GridLayer.js
+++ b/loleaflet/src/layer/tile/GridLayer.js
@@ -434,16 +434,12 @@ L.GridLayer = L.Layer.extend({
 	},
 
 	_moveStart: function () {
-		clearInterval(this._tilesPrefetcher);
-		this._tilesPrefetcher = null;
-		this._preFetchBorder = null;
+		this._resetPreFetching();
 	},
 
 	_move: function () {
 		this._update();
-		if (!this._tilesPreFetcher) {
-			this._tilesPreFetcher = setInterval(L.bind(this._preFetchTiles, this), 2000);
-		}
+		this._resetPreFetching(true);
 	},
 
 	_update: function (center, zoom) {
@@ -746,7 +742,7 @@ L.GridLayer = L.Layer.extend({
 	},
 
 	_preFetchTiles: function () {
-		if (this._permission === 'edit' || this._emptyTilesCount > 0) {
+		if (this._emptyTilesCount > 0) {
 			return;
 		}
 		var center = this._map.getCenter();
@@ -754,6 +750,11 @@ L.GridLayer = L.Layer.extend({
 		var tilesToFetch = 10;
 		var maxBorderWidth = 5;
 
+		if (this._permission === 'edit') {
+			tilesToFetch = 5;
+			maxBorderWidth = 3;
+		}
+
 		if (!this._preFetchBorder) {
 			var pixelBounds = this._map.getPixelBounds(center, zoom),
 				tileBorder = this._pxBoundsToTileRange(pixelBounds);
@@ -873,6 +874,19 @@ L.GridLayer = L.Layer.extend({
 			}
 			this._level.el.appendChild(fragment);
 		}
+	},
+
+	_resetPreFetching: function (resetBorder) {
+		clearInterval(this._tilesPreFetcher);
+		clearTimeout(this._preFetchIdle);
+		if (resetBorder) {
+			this._preFetchBorder = null;
+		}
+		var interval = 750;
+		var idleTime = 5000;
+		this._preFetchIdle = setTimeout(L.bind( function () {
+			this._tilesPreFetcher = setInterval(L.bind(this._preFetchTiles, this), interval);
+		}, this), idleTime);
 	}
 });
 
diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js
index 423a1c2..36534c3 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -106,7 +106,6 @@ L.TileLayer = L.GridLayer.extend({
 		this._map.on('zoomstart zoomend', this._onZoom, this);
 		this._map.on('clearselection', this._clearSelections, this);
 		this._map.on('copy', this._onCopy, this);
-		this._map.on('alltilesloaded', this._preFetchTiles, this);
 		this._startMarker.on('drag dragend', this._onSelectionHandleDrag, this);
 		this._endMarker.on('drag dragend', this._onSelectionHandleDrag, this);
 		this._textArea = this._map._textArea;
@@ -342,9 +341,6 @@ L.TileLayer = L.GridLayer.extend({
 					this._preFetchPart = this._currentPart;
 					this._preFetchBorder = null;
 				}
-				if (!this._tilesPreFetcher) {
-					this._tilesPreFetcher = setInterval(L.bind(this._preFetchTiles, this), 2000);
-				}
 			}
 		}
 		else if (textMsg.startsWith('statusindicatorstart:')) {
@@ -693,15 +689,9 @@ L.TileLayer = L.GridLayer.extend({
 
 	_onZoom: function (e) {
 		if (e.type === 'zoomstart') {
-			clearInterval(this._tilesPrefetcher);
-			this._tilesPrefetcher = null;
-			this._preFetchBorder = null;
 		}
 		else if (e.type === 'zoomend') {
 			this._onUpdateCursor();
-			if (!this._tilesPreFetcher) {
-				this._tilesPreFetcher = setInterval(L.bind(this._preFetchTiles, this), 2000);
-			}
 		}
 	}
 });
diff --git a/loleaflet/src/map/handler/Map.Keyboard.js b/loleaflet/src/map/handler/Map.Keyboard.js
index f1454b5..7217c5e 100644
--- a/loleaflet/src/map/handler/Map.Keyboard.js
+++ b/loleaflet/src/map/handler/Map.Keyboard.js
@@ -177,6 +177,7 @@ L.Map.Keyboard = L.Handler.extend({
 		}
 
 		if (docLayer._permission === 'edit') {
+			docLayer._resetPreFetching();
 			var charCode = e.originalEvent.charCode;
 			var keyCode = e.originalEvent.keyCode;
 			if (e.type === 'keydown' && this.handleOnKeyDown[keyCode] && charCode === 0) {
diff --git a/loleaflet/src/map/handler/Map.Mouse.js b/loleaflet/src/map/handler/Map.Mouse.js
index ddd4d8d..ba15651 100644
--- a/loleaflet/src/map/handler/Map.Mouse.js
+++ b/loleaflet/src/map/handler/Map.Mouse.js
@@ -29,6 +29,7 @@ L.Map.Mouse = L.Handler.extend({
 		}
 
 		if (e.type === 'mousedown') {
+			docLayer._resetPreFetching();
 			this._mouseDown = true;
 			if (this._holdMouseEvent) {
 				clearTimeout(this._holdMouseEvent);


More information about the Libreoffice-commits mailing list