commit 1a62c5b3297283f6404fa1fb538eda9d7e33732e
parent 664f44a437e5384d1298741e49044c443421e5fb
Author: Nikolay Korotkiy <sikmir@gmail.com>
Date: Wed, 21 Nov 2018 09:59:52 +0300
[tracks] load tracks from gpslib url #177
Diffstat:
3 files changed, 36 insertions(+), 1 deletion(-)
diff --git a/src/lib/leaflet.control.track-list/lib/geo_file_formats.js b/src/lib/leaflet.control.track-list/lib/geo_file_formats.js
@@ -6,6 +6,7 @@ import {decode as utf8_decode} from 'utf8';
import {fetch} from 'lib/xhr-promise';
import urlViaCorsProxy from 'lib/CORSProxy';
import {isGpsiesUrl, gpsiesRequestOptions, gpsiesParser} from './gpsies';
+import {isGpslibUrl, gpslibRequestOptions, gpslibParser} from './gpslib';
import {isStravaUrl, stravaRequestOptions, stravaParser} from './strava';
import {isEndomondoUrl, endomondoRequestOptions, endomondoParser} from './endomondo';
import {parseTrackUrlData, parseNakarteUrl, isNakarteLinkUrl, nakarteLinkRequestOptions, nakarteLinkParser} from './nktk';
@@ -623,6 +624,9 @@ async function loadFromUrl(url) {
if (isGpsiesUrl(url)) {
requestOptionsGetter = gpsiesRequestOptions;
parser = gpsiesParser;
+ } else if (isGpslibUrl(url)) {
+ requestOptionsGetter = gpslibRequestOptions;
+ parser = gpslibParser;
} else if (isEndomondoUrl(url)) {
requestOptionsGetter = endomondoRequestOptions;
parser = endomondoParser;
diff --git a/src/lib/leaflet.control.track-list/lib/gpslib.js b/src/lib/leaflet.control.track-list/lib/gpslib.js
@@ -0,0 +1,31 @@
+import urlViaCorsProxy from 'lib/CORSProxy';
+import {parseGpx} from './geo_file_formats'
+
+const re = /^https?:\/\/(?:.*\.)?gpslib\.[^.]+\/tracks\/info\/(\d+)/;
+
+function isGpslibUrl(url) {
+ return re.test(url);
+}
+
+function gpslibRequestOptions(url) {
+ const m = re.exec(url);
+ if (!m) {
+ throw new Error('Invalid gpslib url');
+ }
+ const trackId = m[1];
+ const requestOptions = [
+ {
+ url: urlViaCorsProxy(`https://www.gpslib.ru/tracks/download/${trackId}.gpx`),
+ options: {responseType: 'binarystring'}
+ }];
+ return {requestOptions};
+}
+
+function gpslibParser(name, responses) {
+ if (responses.length !== 1) {
+ throw new Error(`Invalid responses array length ${responses.length}`);
+ }
+ return parseGpx(responses[0].responseBinaryText, name, true);
+}
+
+export {gpslibRequestOptions, isGpslibUrl, gpslibParser}
diff --git a/src/lib/leaflet.control.track-list/track-list.js b/src/lib/leaflet.control.track-list/track-list.js
@@ -71,7 +71,7 @@ L.Control.TrackList = L.Control.extend({
<div class="leaflet-control-content">
<div class="header">
<div class="hint">
- gpx kml Ozi zip YandexMaps GPSies Strava endomondo
+ gpx kml Ozi zip YandexMaps GPSies GPSLib Strava endomondo
</div>
<div class="button-minimize" data-bind="click: setMinimized"></div>
</div>