nakarte

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

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:
Msrc/lib/leaflet.control.track-list/lib/services/strava.js | 29+++++++++++++++++------------
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