nakarte

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

commit f28d3f9538135291ecd82f3a10da7eb9e56c40cb
parent 7534e576ce84bc5da0750c31be6a9e233b3ed404
Author: Sergej Orlov <wladimirych@gmail.com>
Date:   Thu,  1 Mar 2018 01:34:24 +0300

[tracks] changed proto file

Diffstat:
Msrc/lib/leaflet.control.track-list/lib/nktk.js | 38+++++++++++++++++++++++---------------
Msrc/lib/leaflet.control.track-list/lib/nktk.proto | 12++++++++----
Msrc/lib/leaflet.control.track-list/lib/nktk_pb.js | 32+++++++++++++++++++++++---------
3 files changed, 54 insertions(+), 28 deletions(-)

diff --git a/src/lib/leaflet.control.track-list/lib/nktk.js b/src/lib/leaflet.control.track-list/lib/nktk.js @@ -121,9 +121,11 @@ function deltaDecodeSegment(deltaLats, deltaLons) { function saveNktk(segments, name, color, measureTicksShown, waypoints, trackHidden) { const trackView = { - color, - shown: !trackHidden, - ticksShown: measureTicksShown, + view: { + color, + shown: !trackHidden, + ticksShown: measureTicksShown, + } }; const track = trackView.track = {name}; if (segments && segments.length) { @@ -285,23 +287,29 @@ function parseNktkOld(s, version) { function parseNktkProtobuf(s) { const pbf = new Pbf(stringToArrayBuffer(s)); - const data = TrackView.read(pbf); + let trackView; + try { + trackView = TrackView.read(pbf); + } catch (e) { + return [{name: 'Text encoded track', error: ['CORRUPT']}]; + } const geoData = { - name: data.track.name || "Text encoded track", - color: data.color, - trackHidden: !data.shown, - measureTicksShown: data.ticksShown, + name: trackView.track.name || "Text encoded track", + color: trackView.view.color, + trackHidden: !trackView.view.shown, + measureTicksShown: trackView.view.ticksShown, }; - if (data.track.segments && data.track.segments.length) { - geoData.tracks = data.track.segments.map((segment) => deltaDecodeSegment(segment.lats, segment.lons)); + const segments = trackView.track.segments; + if (segments && segments.length) { + geoData.tracks = segments.map((segment) => deltaDecodeSegment(segment.lats, segment.lons)); } - if (data.track.waypoints && data.track.waypoints.waypoints.length) { + if (trackView.track.waypoints && trackView.track.waypoints.waypoints.length) { const waypoints = geoData.points = []; - for (let waypoint of data.track.waypoints.waypoints) { + for (let waypoint of trackView.track.waypoints.waypoints) { waypoints.push({ name: waypoint.name, - lat: (waypoint.lat + data.track.waypoints.midLat) / arcUnit, - lng: (waypoint.lon + data.track.waypoints.midLon) / arcUnit + lat: (waypoint.lat + trackView.track.waypoints.midLat) / arcUnit, + lng: (waypoint.lon + trackView.track.waypoints.midLon) / arcUnit }); } } @@ -318,7 +326,7 @@ function parseNktk(s) { let version = reader.readNumber(); if (version === 1 || version === 2 || version === 3) { return parseNktkOld(s.substring(reader.position), version); - } else if (version == 4) { + } else if (version === 4) { return parseNktkProtobuf(s.substring(reader.position)); } else { return [{name: 'Text encoded track', error: ['CORRUPT']}]; diff --git a/src/lib/leaflet.control.track-list/lib/nktk.proto b/src/lib/leaflet.control.track-list/lib/nktk.proto @@ -23,11 +23,15 @@ message Track { Waypoints waypoints = 3; } +message View { + int32 color = 1; + bool shown = 2; + bool ticksShown = 3; +} + message TrackView { - Track track = 1; - int32 color = 2; - bool shown = 3; - bool ticksShown = 4; + View view = 1; + Track track = 2; } diff --git a/src/lib/leaflet.control.track-list/lib/nktk_pb.js b/src/lib/leaflet.control.track-list/lib/nktk_pb.js @@ -72,22 +72,36 @@ Track.write = function (obj, pbf) { if (obj.waypoints) pbf.writeMessage(3, Waypoints.write, obj.waypoints); }; +// View ======================================== + +var View = self.View = {}; + +View.read = function (pbf, end) { + return pbf.readFields(View._readField, {color: 0, shown: false, ticksShown: false}, end); +}; +View._readField = function (tag, obj, pbf) { + if (tag === 1) obj.color = pbf.readVarint(true); + else if (tag === 2) obj.shown = pbf.readBoolean(); + else if (tag === 3) obj.ticksShown = pbf.readBoolean(); +}; +View.write = function (obj, pbf) { + if (obj.color) pbf.writeVarintField(1, obj.color); + if (obj.shown) pbf.writeBooleanField(2, obj.shown); + if (obj.ticksShown) pbf.writeBooleanField(3, obj.ticksShown); +}; + // TrackView ======================================== var TrackView = self.TrackView = {}; TrackView.read = function (pbf, end) { - return pbf.readFields(TrackView._readField, {track: null, color: 0, shown: false, ticksShown: false}, end); + return pbf.readFields(TrackView._readField, {view: null, track: null}, end); }; TrackView._readField = function (tag, obj, pbf) { - if (tag === 1) obj.track = Track.read(pbf, pbf.readVarint() + pbf.pos); - else if (tag === 2) obj.color = pbf.readVarint(true); - else if (tag === 3) obj.shown = pbf.readBoolean(); - else if (tag === 4) obj.ticksShown = pbf.readBoolean(); + if (tag === 1) obj.view = View.read(pbf, pbf.readVarint() + pbf.pos); + else if (tag === 2) obj.track = Track.read(pbf, pbf.readVarint() + pbf.pos); }; TrackView.write = function (obj, pbf) { - if (obj.track) pbf.writeMessage(1, Track.write, obj.track); - if (obj.color) pbf.writeVarintField(2, obj.color); - if (obj.shown) pbf.writeBooleanField(3, obj.shown); - if (obj.ticksShown) pbf.writeBooleanField(4, obj.ticksShown); + if (obj.view) pbf.writeMessage(1, View.write, obj.view); + if (obj.track) pbf.writeMessage(2, Track.write, obj.track); };