nakarte

Source code of https://map.sikmir.ru (fork)
git clone git://git.sikmir.ru/nakarte
Log | Files | Refs | LICENSE

commit 6d9e6aece553cd16278ce487994a9ef815ba571f
parent 95e510d260b78168ac2d6321f947db43cc2b1213
Author: Sergej Orlov <wladimirych@gmail.com>
Date:   Wed,  8 May 2024 13:06:53 +0200

tracks: update loading tracks from Tracedetrail

Diffstat:
Msrc/lib/leaflet.control.track-list/lib/services/tracedetrail.js | 38++++++++++++++++++++++----------------
Mtest/track_load_data/testcases/tracedetrail_not_exists.json | 5++---
Mtest/track_load_data/testcases/tracedetrail_private.json | 38+-------------------------------------
Mtest/track_load_data/testcases/tracedetrail_with_title.json | 10+---------
4 files changed, 26 insertions(+), 65 deletions(-)

diff --git a/src/lib/leaflet.control.track-list/lib/services/tracedetrail.js b/src/lib/leaflet.control.track-list/lib/services/tracedetrail.js @@ -10,21 +10,33 @@ class Tracedetrail extends BaseService { } requestOptions() { - const m = this.urlRe.exec(this.origUrl); - const trackId = this.trackId = m[1]; - return [{ - url: urlViaCorsProxy(`https://tracedetrail.com/en/trace/geomSections/${trackId}`), - options: {responseType: 'json'} + url: urlViaCorsProxy(this.origUrl), }]; } parseResponse(responses) { - const response = responses[0]; - let name = `Tracedetrail track ${this.trackId}`; + const trackId = this.urlRe.exec(this.origUrl)[1]; + let name = `Tracedetrail track ${trackId}`; + const documentText = responses[0].responseText; try { - name = response.responseJSON.nom_fr || name; - const geometry = JSON.parse(response.responseJSON.geometry); + const geometryMatch = /geometry\s*:\s*"(.+)",\n/u.exec(documentText); + if (!geometryMatch) { + let error = 'UNSUPPORTED'; + if (documentText.includes("track doesn't exist")) { + error = '{name} was deleted or did not exist'; + } else if (documentText.includes('Private track')) { + error = '{name} is private'; + } + return [{name, error}]; + } + const encodedGeometry = geometryMatch[1]; + const titleMatch = /<title>.+:\s*(.+)<\/title>/u.exec(documentText); + if (titleMatch) { + name = titleMatch[1]; + } + + const geometry = JSON.parse(encodedGeometry.replaceAll('\\"', '"')); const proj = L.CRS.EPSG3857; const points = geometry.map((item) => proj.unproject(L.point(item.lon, item.lat))); @@ -33,13 +45,7 @@ class Tracedetrail extends BaseService { tracks: [points] }]; } catch (e) { - let error = 'UNSUPPORTED'; - - if (response.status === 200) { - error = `Track with id ${this.trackId} was deleted or did not exist`; - } - - return [{name, error}]; + return [{name, error: 'UNSUPPORTED'}]; } } } diff --git a/test/track_load_data/testcases/tracedetrail_not_exists.json b/test/track_load_data/testcases/tracedetrail_not_exists.json @@ -1,4 +1,4 @@ { "query": ["https://tracedetrail.fr/en/trace/trace/1253951"], - "geodata": [{"name":"Tracedetrail track 1253951","error":"Track with id 1253951 was deleted or did not exist"}] -} -\ No newline at end of file + "geodata": [{"name":"Tracedetrail track 1253951","error":"{name} was deleted or did not exist"}] +} diff --git a/test/track_load_data/testcases/tracedetrail_private.json b/test/track_load_data/testcases/tracedetrail_private.json @@ -1,40 +1,4 @@ { "query": ["https://tracedetrail.fr/en/trace/trace/125397"], - "geodata": [ - { - "name": "Test private track", - "tracks": [ - [ - { - "lat": 50.772619071646034, - "lng": 15.42623387659049 - }, - { - "lat": 50.772574192183, - "lng": 15.426215910284808 - }, - { - "lat": 50.772545219342206, - "lng": 15.426256334472594 - }, - { - "lat": 50.77257191980398, - "lng": 15.426481811608909 - }, - { - "lat": 50.772621344022795, - "lng": 15.426616558901527 - }, - { - "lat": 50.772704285697884, - "lng": 15.426681237601983 - }, - { - "lat": 50.772660542503985, - "lng": 15.426912104630002 - } - ] - ] - } - ] + "geodata": [{"name":"Tracedetrail track 125397","error":"{name} is private"}] } diff --git a/test/track_load_data/testcases/tracedetrail_with_title.json b/test/track_load_data/testcases/tracedetrail_with_title.json @@ -1,14 +1,6 @@ { "query": [ - "https://tracedetrail.fr/en/trace/trace/125395", - "http://tracedetrail.fr/en/trace/trace/125395", - "https://www.tracedetrail.fr/en/trace/trace/125395", - "https://tracedetrail.fr/en/trace/trace/125395/", - "https://tracedetrail.fr/en/trace/trace/125395?a=1", - "https://tracedetrail.com/en/trace/trace/125395", - "https://tracedetrail.com/trace/trace/125395", - "https://tracedetrail.fr/trace/trace/125395", - "https://tracedetrail.com/index.php/en/trace/trace/125395" + "https://tracedetrail.fr/en/trace/trace/125395" ], "geodata": [ {