commit be347104ff68803ce8106d4c7d3b634ab31bb393
parent 7f8d14c398fcafa1de62685d87ae33aaf079996a
Author: myadzel <myadzel@gmail.com>
Date: Fri, 7 Aug 2020 09:05:28 +0300
fix messages for strava private and non-existed activities #502
Diffstat:
1 file changed, 17 insertions(+), 12 deletions(-)
diff --git a/src/lib/leaflet.control.track-list/lib/services/strava.js b/src/lib/leaflet.control.track-list/lib/services/strava.js
@@ -12,30 +12,37 @@ class Strava extends BaseService {
requestOptions() {
const m = this.urlRe.exec(this.origUrl);
const trackId = this.trackId = m[1];
+ function isResponseSuccess(response) {
+ return [200, 401, 404].includes(response.status);
+ }
return [
{
url: urlViaCorsProxy(`https://www.strava.com/activities/${trackId}?hl=en-GB`),
options: {
responseType: 'binarystring',
- isResponseSuccess: (xhr) => (xhr.status === 200 || xhr.status === 404)
+ isResponseSuccess
}
},
{
url: urlViaCorsProxy(`https://www.strava.com/stream/${trackId}?streams%5B%5D=latlng`),
options: {
responseType: 'binarystring',
- isResponseSuccess: (xhr) => (xhr.status === 200 || xhr.status === 401)
+ isResponseSuccess
}
}
];
}
parseResponse(responses) {
- let data;
+ const statusMessages = {
+ 401: 'Requested Strava activity marked as private',
+ 404: 'Requested Strava activity could not be found'
+ };
const [pageResponse, trackResponse] = responses;
- if (trackResponse.status === 401) {
- return [{error: 'Strava user disabled viewing this track (track is private)'}];
+ if (trackResponse.status !== 200) {
+ return [{error: statusMessages[trackResponse.status]}];
}
+ let data;
let name = `Strava ${this.trackId}`;
try {
data = JSON.parse(trackResponse.responseBinaryText);
@@ -46,28 +53,26 @@ class Strava extends BaseService {
return [{name, error: 'UNSUPPORTED'}];
}
const tracks = [data.latlng.map((p) => ({lat: p[0], lng: p[1]}))];
-
try {
- let name2;
- const dom = (new DOMParser()).parseFromString(pageResponse.responseBinaryText, "text/html");
+ let altName;
+ const dom = (new DOMParser()).parseFromString(pageResponse.responseBinaryText, 'text/html');
let title = dom.querySelector('meta[property=og\\:title]').content;
title = utf8_decode(title);
// name and description
const m = title.match(/^(.+) - ([^-]+)/u);
if (m) {
// reverse name and description
- name2 = `${m[2]} ${m[1]}`;
+ altName = `${m[2]} ${m[1]}`;
title = dom.querySelector('title').text;
let date = title.match(/ (on \d{1,2} \w+ \d{4}) /u)[1];
if (date) {
- name2 += ' ' + date;
+ altName += ' ' + date;
}
}
- name = name2;
+ name = altName;
} catch (e) {
// use previously constructed name
}
-
return [{
name,
tracks