nikeplus-client
Version:
Simple Nike+ client
162 lines (141 loc) • 7.15 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Tcx = undefined;
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _xmlHelper = require('./xmlHelper');
var _xmlHelper2 = _interopRequireDefault(_xmlHelper);
var _nikeHelper = require('./nikeHelper');
var _geolib = require('geolib');
var _geolib2 = _interopRequireDefault(_geolib);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var Tcx = exports.Tcx = function () {
function Tcx() {
_classCallCheck(this, Tcx);
}
_createClass(Tcx, null, [{
key: 'ConvertFromNikeActivity',
value: function ConvertFromNikeActivity(res) {
var data = res.data;
var elevations = _nikeHelper.NikeHelper.GetMetric(data, 'elevation');
var latitudes = _nikeHelper.NikeHelper.GetMetric(data, 'latitude');
var longitudes = _nikeHelper.NikeHelper.GetMetric(data, 'longitude');
var speeds = _nikeHelper.NikeHelper.GetMetric(data, 'speed');
var distances = _nikeHelper.NikeHelper.GetMetric(data, 'distance');
var heartRates = _nikeHelper.NikeHelper.GetMetric(data, 'heart_rate');
var result = {
TrainingCenterDatabase: {
'@xsi:schemaLocation': 'http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd',
'@xmlns:ns5': 'http://www.garmin.com/xmlschemas/ActivityGoals/v1',
'@xmlns:ns4': 'http://www.garmin.com/xmlschemas/ProfileExtension/v1',
'@xmlns:ns3': 'http://www.garmin.com/xmlschemas/ActivityExtension/v2',
'@xmlns:ns2': 'http://www.garmin.com/xmlschemas/UserProfile/v2',
'@xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance',
'@xmlns': 'http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2',
Activities: {
Activity: {
'@Sport': 'Running',
'Notes': 'Generated on : nike.bullrox.net',
Id: new Date(data.start_epoch_ms).toISOString(),
Lap: {
'@StartTime': new Date(data.start_epoch_ms).toISOString(),
TotalTimeSeconds: (data.active_duration_ms / 1000.0).toString(),
DistanceMeters: !!_nikeHelper.NikeHelper.GetSummary(data, 'distance') ? _nikeHelper.NikeHelper.GetSummary(data, 'distance').value * 1000 : null,
MaximumSpeed: !!speeds ? speeds.map(function (s) {
return s.value;
}).reduce(function (prev, next) {
return Math.max(prev, next);
}) * 0.277778 : null, //km/h --> m/s
Calories: !!_nikeHelper.NikeHelper.GetSummary(data, 'calories') ? _nikeHelper.NikeHelper.GetSummary(data, 'calories').value : null,
Intensity: 'Active',
TriggerMethod: 'Manual',
AverageHeartRateBpm: null,
MaximumHeartRateBpm: null,
Track: {
Trackpoint: []
}
}
}
},
Author: {
'@xsi:type': 'Application_t',
Name: 'Paul du Pavillon - https://nike.bullrox.net',
Build: {
Version: {
VersionMajor: 1,
VersionMinor: 0,
BuildMajor: 1,
BuildMinor: 0
}
},
LangID: 'en'
}
}
};
var trackPoints = [];
if (!!_nikeHelper.NikeHelper.GetSummary(data, 'heart_rate')) {
result.TrainingCenterDatabase.Activities.Activity.Lap.AverageHeartRateBpm = { Value: _nikeHelper.NikeHelper.GetSummary(data, 'heart_rate').value };
}
if (heartRates) {
result.TrainingCenterDatabase.Activities.Activity.Lap.MaximumHeartRateBpm = { Value: heartRates.map(function (h) {
return h.value;
}).reduce(function (prev, next) {
return Math.max(prev, next);
}) };
}
(latitudes || []).forEach(function (item, index) {
return trackPoints.push({
Time: item.end_epoch_ms,
Position: {
LatitudeDegrees: latitudes[index].value,
LongitudeDegrees: longitudes[index].value
//AltitudeMeters: elevations && elevations.length > 0 && elevations.length > index ? elevations[index].value : null //Elevation is not altitude
} });
});
// (distances || []).forEach((d)=> {
// const matches = trackPoints.filter((t)=> t.Time >= d.start_epoch_ms && t.Time <= d.end_epoch_ms && t.DistanceMeters === undefined)
// matches.forEach((m) => m.DistanceMeters = ((d.value * 1000) / matches.length))
// });
trackPoints.forEach(function (t, i) {
if (i - 1 >= 0) {
t.DistanceMeters = _geolib2.default.getDistance({ latitude: trackPoints[i - 1].Position.LatitudeDegrees, longitude: trackPoints[i - 1].Position.LongitudeDegrees }, { latitude: t.Position.LatitudeDegrees, longitude: t.Position.LongitudeDegrees }, 1, 3);
}
});
//cumulative distance
var sum = 0;
trackPoints.forEach(function (t) {
sum += t.DistanceMeters >= 0 ? t.DistanceMeters : 0;
t.DistanceMeters = t.DistanceMeters >= 0 ? sum : null;
});
(speeds || []).forEach(function (d) {
var matches = trackPoints.filter(function (t) {
return t.Time >= d.start_epoch_ms && t.Time <= d.end_epoch_ms;
});
matches.forEach(function (m) {
return m.Extensions = {
TPX: {
'@xmlns': 'http://www.garmin.com/xmlschemas/ActivityExtension/v2',
Speed: d.value * 0.277778 //km/h --> m/s
}
};
});
});
(heartRates || []).forEach(function (d) {
var matches = trackPoints.filter(function (t) {
return t.Time >= d.start_epoch_ms && t.Time <= d.end_epoch_ms || t.Time <= d.end_epoch_ms && t.HeartRateBpm === undefined;
}); //sometimes heartRates datetime are out of bound of lat/lng records
matches.forEach(function (m) {
return m.HeartRateBpm = { Value: d.value };
});
});
trackPoints.forEach(function (t) {
return t.Time = new Date(t.Time).toISOString();
});
result.TrainingCenterDatabase.Activities.Activity.Lap.Track.Trackpoint = trackPoints;
return _xmlHelper2.default.ConvertFromObj(result);
}
}]);
return Tcx;
}();