commit 776a0f1ec3dead7a3fb44e660ea873f36be816e4
parent c24a60f41b0354dd1fed17929b6c574b2d6bbafe
Author: Sergej Orlov <wladimirych@gmail.com>
Date: Fri, 23 Nov 2018 08:28:42 +0100
Merge branch 'gpslib-tracks' of git://github.com/sikmir/nakarte into sikmir-gpslib-tracks
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';
@@ -624,6 +625,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>