commit f28d3f9538135291ecd82f3a10da7eb9e56c40cb
parent 7534e576ce84bc5da0750c31be6a9e233b3ed404
Author: Sergej Orlov <wladimirych@gmail.com>
Date: Thu, 1 Mar 2018 01:34:24 +0300
[tracks] changed proto file
Diffstat:
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);
};