From 4efb9f2d898a5e67c7c1a0c7e236fb49a48774b9 Mon Sep 17 00:00:00 2001 From: Willem Mulder Date: Mon, 8 Oct 2018 19:35:37 +0200 Subject: [PATCH] Make JSObserver work with Leaflet. Fixes #1451. --- overviewer_core/data/js_src/overviewer.js | 1 + overviewer_core/data/js_src/util.js | 44 +++++++++++++++++++ .../data/web_assets/overviewer.css | 2 +- overviewer_core/observer.py | 2 +- 4 files changed, 47 insertions(+), 2 deletions(-) diff --git a/overviewer_core/data/js_src/overviewer.js b/overviewer_core/data/js_src/overviewer.js index 9a9370b..559376b 100644 --- a/overviewer_core/data/js_src/overviewer.js +++ b/overviewer_core/data/js_src/overviewer.js @@ -15,6 +15,7 @@ overviewer.worldCtrl = null; overviewer.layerCtrl = null; overviewer.compass = null; overviewer.coord_box = null; +overviewer.progress = null; overviewer.current_world = null; /// Records the current layer by name (if any) of each world diff --git a/overviewer_core/data/js_src/util.js b/overviewer_core/data/js_src/util.js index f6578d9..5990f7e 100644 --- a/overviewer_core/data/js_src/util.js +++ b/overviewer_core/data/js_src/util.js @@ -67,6 +67,48 @@ overviewer.util = { return this.coord_box; } }); + overviewer.progressClass = L.Control.extend({ + options: { + position: 'bottomright' + }, + initialize: function() { + this.progress = L.DomUtil.create("div", "progress"); + this.progress.innerHTML = 'Current render progress'; + this.progress.style.visibility = 'hidden'; + }, + update: function() { + fetch("progress.json") + .then(response => { + if (!response.ok) { + throw new Error('Response was not ok'); + } + return response.json(); + }) + .then(data => { + this.progress.innerHTML = data.message; + if (data.update > 0) { + setTimeout(this.update.bind(this), data.update); + this.progress.style.visibility = ''; + } else { + setTimeout(this.update.bind(this), 60000); + this.progress.innerHTML = 'Hidden - data.update < 0'; + this.progress.style.visibility = 'hidden'; + } + }) + .catch(error => { + this.progress.innerHtml = 'Hidden - no data'; + this.progress.style.visibility = 'hidden'; + console.info('Error getting progress; hiding control', error); + }); + }, + onAdd: function() { + // Not all browsers may have this + if ('fetch' in window) { + setTimeout(this.update.bind(this), 0); + } + return this.progress; + } + }); overviewer.compassClass = L.Control.extend({ initialize: function(imagedict, options) { L.Util.setOptions(this, options); @@ -247,6 +289,7 @@ overviewer.util = { overviewer.compass = new overviewer.compassClass( overviewerConfig.CONST.image.compass); overviewer.coord_box = new overviewer.coordBoxClass(); + overviewer.progress = new overviewer.progressClass(); overviewerConfig.worlds.forEach(function(world_name, idx) { @@ -258,6 +301,7 @@ overviewer.util = { overviewer.compass.addTo(overviewer.map); overviewer.worldCtrl.addTo(overviewer.map); overviewer.coord_box.addTo(overviewer.map); + overviewer.progress.addTo(overviewer.map); overviewer.map.on('mousemove', function(ev) { overviewer.coord_box.render(ev.latlng); diff --git a/overviewer_core/data/web_assets/overviewer.css b/overviewer_core/data/web_assets/overviewer.css index 4d3f94a..59eb37c 100644 --- a/overviewer_core/data/web_assets/overviewer.css +++ b/overviewer_core/data/web_assets/overviewer.css @@ -165,7 +165,7 @@ div.worldcontrol select { font-size: 1.2em; } -.leaflet-container .coordbox { +.leaflet-container .coordbox, .leaflet-container .progress { box-shadow: none; font-size: 11px; background: rgba(255, 255, 255, 0.7); diff --git a/overviewer_core/observer.py b/overviewer_core/observer.py index 0e9bcd9..2c5bde7 100644 --- a/overviewer_core/observer.py +++ b/overviewer_core/observer.py @@ -294,7 +294,7 @@ class JSObserver(Observer): """ self._current_value = current_value if self._need_update(): - refresh = max(1500*(time.time() - self.last_update_time), self.minrefresh) // 1 + refresh = max(1500*(time.time() - max(self.start_time, self.last_update_time)), self.minrefresh) // 1 self.logfile.seek(0) self.logfile.truncate() if self.get_current_value():