nakarte

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

commit 746c52b931e33da0fdbec3e1bcf95b91627b74bb
parent 80d5c77c1d29dc4c6e747edbbdd40d6917ab7da1
Author: Sergey Orlov <wladimirych@gmail.com>
Date:   Wed, 26 Aug 2020 22:51:28 +0200

tracks: restore getting user and activity name for strava.

Fixes #189

Diffstat:
Msrc/lib/leaflet.control.track-list/lib/services/strava.js | 32+++++++++++++-------------------
Mtest/track_load_data/testcases/strava_with_title.json | 2+-
Mtest/track_load_data/testcases/strava_without_title.json | 2+-
3 files changed, 15 insertions(+), 21 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 @@ -1,6 +1,5 @@ import BaseService from './baseService'; import urlViaCorsProxy from '~/lib/CORSProxy'; -import {decode as utf8_decode} from 'utf8'; class Strava extends BaseService { urlRe = /^https?:\/\/(?:.+\.)?strava\.com\/activities\/(\d+)/u; @@ -19,7 +18,6 @@ class Strava extends BaseService { { url: urlViaCorsProxy(`https://www.strava.com/activities/${trackId}?hl=en-GB`), options: { - responseType: 'binarystring', isResponseSuccess } }, @@ -53,25 +51,21 @@ class Strava extends BaseService { return [{name, error: 'UNSUPPORTED'}]; } const tracks = [data.latlng.map((p) => ({lat: p[0], lng: p[1]}))]; + let dom; try { - 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 - 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) { - altName += ' ' + date; - } - } - name = altName; + dom = (new DOMParser()).parseFromString(pageResponse.response, 'text/html'); } catch (e) { - // use previously constructed name + // will use default name + } + if (dom) { + const userName = (dom.querySelector('span.athlete-name')?.textContent ?? '').trim(); + const activityTitle = (dom.querySelector('h1.activity-name')?.textContent ?? '').trim(); + let date = dom.querySelector('time')?.textContent ?? ''; + date = date.split(',')[1] ?? ''; + date = date.trim(); + if (userName && activityTitle && date) { + name = `${userName} - ${activityTitle} ${date}`; + } } return [{ name, diff --git a/test/track_load_data/testcases/strava_with_title.json b/test/track_load_data/testcases/strava_with_title.json @@ -8,7 +8,7 @@ ], "geodata": [ { - "name": "Strava 3873704997", + "name": "fsdfas sdafas - Test - Тест - Zkouška 9 May 2012", "tracks": [ [ {"lat": 56.526946, "lng": 28.962483}, diff --git a/test/track_load_data/testcases/strava_without_title.json b/test/track_load_data/testcases/strava_without_title.json @@ -2,7 +2,7 @@ "query": ["https://www.strava.com/activities/3873768093"], "geodata": [ { - "name": "Strava 3873768093", + "name": "fsdfas sdafas - Дневной забег 5 July 2014", "tracks": [ [ {"lat": 39.148949, "lng": 68.298787},