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:
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": [
{