From e76d364b1e0e22c1da42bef2188310adfdbd44bb Mon Sep 17 00:00:00 2001 From: Andrew Chin Date: Thu, 6 Sep 2018 22:20:09 -0400 Subject: [PATCH 1/7] NBT: Use a replacement strategy to deal with undecodable data. The NBT spec requires that all strings are UTF-8 encoded. However in practice, non-UTF-8 data can get into a level.dat file (generally via some weird user-supplied characters in signs. This results in the following error: CorruptNBTError: could not parse nbt: 'utf8' codec can't decode byte 0xc0 in position 3: invalid start byte This happens often enough that we should just ignore this error by using the 'replace' strategy to replace the invalid data --- overviewer_core/nbt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/overviewer_core/nbt.py b/overviewer_core/nbt.py index 4e21464..a959b6e 100644 --- a/overviewer_core/nbt.py +++ b/overviewer_core/nbt.py @@ -144,7 +144,7 @@ class NBTFileReader(object): # Read the string string = self._file.read(length) # decode it and return - return string.decode("UTF-8") + return string.decode("UTF-8", 'replace') def _read_tag_list(self): tagid = self._read_tag_byte() From f4e5b5465127f0d9b7067573afc65545807a3f47 Mon Sep 17 00:00:00 2001 From: Leigh Oliver Date: Thu, 13 Sep 2018 11:02:11 +1000 Subject: [PATCH 2/7] Fixed behaviour of 'defaultZoom' property. The initial map view was not affected by the 'defaultZoom' property in the config file. This has been fixed, by passing the value into 'centers' collection, when it is initially created. Additionally, the 'defaultZoom' config property is passed to the first overviewer.map.setView statement, to ensure correct zoom level on the initial page load. --- overviewer_core/data/js_src/util.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/overviewer_core/data/js_src/util.js b/overviewer_core/data/js_src/util.js index f6578d9..12c47f8 100644 --- a/overviewer_core/data/js_src/util.js +++ b/overviewer_core/data/js_src/util.js @@ -324,9 +324,9 @@ overviewer.util = { if (typeof(obj.spawn) == "object") { var latlng = overviewer.util.fromWorldToLatLng(obj.spawn[0], obj.spawn[1], obj.spawn[2], obj); - overviewer.collections.centers[obj.world] = [ latlng, 1 ]; + overviewer.collections.centers[obj.world] = [ latlng, obj.defaultZoom ]; } else { - overviewer.collections.centers[obj.world] = [ [0, 0], 1 ]; + overviewer.collections.centers[obj.world] = [ [0, 0], obj.defaultZoom ]; } }); @@ -339,7 +339,7 @@ overviewer.util = { overviewer.current_world = overviewerConfig.worlds[0]; //myLayer.addTo(overviewer.map); - overviewer.map.setView(overviewer.util.fromWorldToLatLng(tset.spawn[0], tset.spawn[1], tset.spawn[2], tset), 1); + overviewer.map.setView(overviewer.util.fromWorldToLatLng(tset.spawn[0], tset.spawn[1], tset.spawn[2], tset), tset.defaultZoom); if (!overviewer.util.initHash()) { overviewer.worldCtrl.onChange({target: {value: overviewer.current_world}}); From 3cceaf586944821092d3d745b9eed480e472e45e Mon Sep 17 00:00:00 2001 From: Andrew Chin Date: Mon, 17 Sep 2018 17:48:29 -0400 Subject: [PATCH 3/7] Disable IRC notifications from travis --- .travis.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index ad6acd8..42483d9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,11 +21,6 @@ script: - python overviewer.py ~/mcoa/exmaple ~/test-output --rendermodes=smooth-lighting -p1 notifications: email: false - irc: - channels: - - "chat.freenode.net#overviewer" - template: - - "\x0313Minecraft-Overviewer\x03/\x0306%{branch}\x03 \x0314%{commit}\x03 %{build_url} %{message}" # matrix: # allow_failures: # - python: "3.2" From 3cc184a7512dd7a52eac6663f98d8f6b0bf52d83 Mon Sep 17 00:00:00 2001 From: Willem Mulder Date: Sat, 6 Oct 2018 18:12:17 +0200 Subject: [PATCH 4/7] Use cached center for initial view. Fixes #1453. --- overviewer_core/data/js_src/util.js | 4 ++-- overviewer_core/tileset.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/overviewer_core/data/js_src/util.js b/overviewer_core/data/js_src/util.js index f6578d9..26e3615 100644 --- a/overviewer_core/data/js_src/util.js +++ b/overviewer_core/data/js_src/util.js @@ -338,8 +338,8 @@ overviewer.util = { .addTo(overviewer.map); overviewer.current_world = overviewerConfig.worlds[0]; - //myLayer.addTo(overviewer.map); - overviewer.map.setView(overviewer.util.fromWorldToLatLng(tset.spawn[0], tset.spawn[1], tset.spawn[2], tset), 1); + let center = overviewer.collections.centers[overviewer.current_world]; + overviewer.map.setView(center[0], center[1]); if (!overviewer.util.initHash()) { overviewer.worldCtrl.onChange({target: {value: overviewer.current_world}}); diff --git a/overviewer_core/tileset.py b/overviewer_core/tileset.py index c3de7f6..741bac1 100644 --- a/overviewer_core/tileset.py +++ b/overviewer_core/tileset.py @@ -589,7 +589,7 @@ class TileSet(object): if (self.regionset.get_type() == None and self.options.get("showspawn", True)): d.update({"spawn": self.options.get("spawn")}) else: - d.update({"spawn": "false"}); + d.update({"spawn": False}) try: d['north_direction'] = self.regionset.north_dir From 4efb9f2d898a5e67c7c1a0c7e236fb49a48774b9 Mon Sep 17 00:00:00 2001 From: Willem Mulder Date: Mon, 8 Oct 2018 19:35:37 +0200 Subject: [PATCH 5/7] 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(): From 2918637539458fd855e433cbcef88897a626d87f Mon Sep 17 00:00:00 2001 From: Nicolas F Date: Sun, 18 Nov 2018 09:10:54 +0100 Subject: [PATCH 6/7] web: fix marker icon position Shoutouts to 14mRh4X0r for finding the right CSS properties that work for centering the marker icons. Fixes #1481. --- overviewer_core/data/js_src/util.js | 6 ++++-- overviewer_core/data/web_assets/overviewer.css | 6 ++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/overviewer_core/data/js_src/util.js b/overviewer_core/data/js_src/util.js index 2f6d485..b4cced1 100644 --- a/overviewer_core/data/js_src/util.js +++ b/overviewer_core/data/js_src/util.js @@ -334,7 +334,8 @@ overviewer.util = { for (var mkidx = 0; mkidx < markers[obj.path].length; mkidx++) { var marker_group = new L.layerGroup(); var marker_entry = markers[obj.path][mkidx]; - var icon = L.icon({iconUrl: marker_entry.icon}); + var icon = L.icon({iconUrl: marker_entry.icon, + className: "ov-marker"}); console.log("marker group:", marker_entry.displayName, marker_entry.groupName); for (var dbidx = 0; dbidx < markersDB[marker_entry.groupName].raw.length; dbidx++) { @@ -342,7 +343,8 @@ overviewer.util = { var latlng = overviewer.util.fromWorldToLatLng(db.x, db.y, db.z, obj); var m_icon; if (db.icon != undefined) { - m_icon = L.icon({iconUrl: db.icon}); + m_icon = L.icon({iconUrl: db.icon, + className: "ov-marker"}); } else { m_icon = icon; } diff --git a/overviewer_core/data/web_assets/overviewer.css b/overviewer_core/data/web_assets/overviewer.css index 59eb37c..ac5358e 100644 --- a/overviewer_core/data/web_assets/overviewer.css +++ b/overviewer_core/data/web_assets/overviewer.css @@ -173,3 +173,9 @@ div.worldcontrol select { padding: 0 5px; color: #333; } + +.ov-marker { + position:relative; + margin-left:-50%; + margin-top:-50%; +} From bde265a8ac7a27b51fd8b7764e12c7b2ccc3d90d Mon Sep 17 00:00:00 2001 From: Nicolas F Date: Sun, 18 Nov 2018 09:18:55 +0100 Subject: [PATCH 7/7] web: fix createInfoWindow not having any effect Fixes #1494. --- overviewer_core/data/js_src/util.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/overviewer_core/data/js_src/util.js b/overviewer_core/data/js_src/util.js index b4cced1..5a00763 100644 --- a/overviewer_core/data/js_src/util.js +++ b/overviewer_core/data/js_src/util.js @@ -349,7 +349,9 @@ overviewer.util = { m_icon = icon; } let new_marker = new L.marker(latlng, {icon: m_icon, title: db.hovertext}); - new_marker.bindPopup(db.text); + if (marker_entry.createInfoWindow) { + new_marker.bindPopup(db.text); + } marker_group.addLayer(new_marker); } obj.marker_groups[marker_entry.displayName] = marker_group;