nakarte

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

commit 4c153aad29aab7f3e1f9dc6ffdffbcfb0ee5e40c
parent acc50f8b4e23c1e6370d31100d3b0e6b1fef2f53
Author: myadzel <myadzel@gmail.com>
Date:   Mon, 29 Apr 2019 12:11:34 +0300

parsing tracks from sports tracker #241

Diffstat:
Msrc/lib/leaflet.control.track-list/lib/services/index.js | 2++
Asrc/lib/leaflet.control.track-list/lib/services/sportstracker.js | 68++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Msrc/lib/leaflet.control.track-list/track-list.js | 2+-
3 files changed, 71 insertions(+), 1 deletion(-)

diff --git a/src/lib/leaflet.control.track-list/lib/services/index.js b/src/lib/leaflet.control.track-list/lib/services/index.js @@ -9,6 +9,7 @@ import Tracedetrail from './tracedetrail'; import {YandexRuler} from './yandex'; import {NakarteTrack, NakarteUrl} from './nakarte'; import {MovescountMove, MovescountRoute} from './movescount'; +import {SportsTrackerActivity} from './sportstracker'; export default [ YandexRuler, @@ -23,5 +24,6 @@ export default [ Tracedetrail, MovescountMove, MovescountRoute, + SportsTrackerActivity, SimpleService ] \ No newline at end of file diff --git a/src/lib/leaflet.control.track-list/lib/services/sportstracker.js b/src/lib/leaflet.control.track-list/lib/services/sportstracker.js @@ -0,0 +1,67 @@ +import BaseService from './baseService'; +import urlViaCorsProxy from 'lib/CORSProxy'; +import utf8 from 'utf8'; + +class SportsTrackerBase extends BaseService { + isOurUrl() { + return this.urlRe.test(this.origUrl); + } +} + +class SportsTrackerActivity extends SportsTrackerBase { + urlRe = /^https?:\/\/(www.)?sports-tracker.com\/workout\/([^/]+)\/([a-z0-9]+)/; + + requestOptions() { + const m = this.urlRe.exec(this.origUrl); + const activityId = m[3]; + return [ + { + url: urlViaCorsProxy(`https://www.sports-tracker.com/apiserver/v1/workouts/${activityId}/data?samples=100000`), + options: { + responseType: 'binarystring', + isResponseSuccess: (xhr) => xhr.status === 200 || xhr.status === 403 + } + }, + { + url: urlViaCorsProxy(`https://www.sports-tracker.com/apiserver/v1/workouts/${activityId}/combined`), + options: { + responseType: 'binarystring', + isResponseSuccess: (xhr) => xhr.status === 200 || xhr.status === 403 + } + } + ] + } + + parseResponse(responses) { + const [dataResponse, metadataResponse] = responses; + if (dataResponse.status === 403) { + return [{error: 'Sports Tracker user disabled viewing this activity'}]; + } + let data, metadata; + let name = `Sports Tracker activity`; + try { + data = JSON.parse(utf8.decode(dataResponse.responseBinaryText)); + metadata = JSON.parse(utf8.decode(metadataResponse.responseBinaryText)); + } catch (e) { + return [{name, error: 'UNSUPPORTED'}]; + } + const track = data.payload.locations.map(location => ({ + lat: location.la, + lng: location.ln + }) + ); + if (data.payload.description) { + name = data.payload.description; + } else { + const startTime = new Date(metadata.payload.startTime).toDateString(); + name = `${metadata.payload.fullname} on ${startTime}`; + } + + return [{ + name, + tracks: [track] + }]; + } +} + +export {SportsTrackerActivity}; +\ No newline at end of file diff --git a/src/lib/leaflet.control.track-list/track-list.js b/src/lib/leaflet.control.track-list/track-list.js @@ -74,7 +74,7 @@ L.Control.TrackList = L.Control.extend({ <div class="leaflet-control-content"> <div class="header"> <div class="hint" - title="gpx kml Ozi zip YandexMaps GPSies Strava GPSLib Endomondo Etomesto Movescount OSM Tracedetrail"> + title="gpx kml Ozi zip YandexMaps GPSies Strava GPSLib Endomondo Etomesto Movescount SportsTracker OSM Tracedetrail"> gpx kml Ozi zip YandexMaps GPSies Strava <span class="formats-hint-more">&hellip;</span> </div>