public async Task ExportToFile(BandEventBase eventBase, string filePath)
        {
            if (!(eventBase is UserDailyActivity))
            {
                throw new ArgumentException("eventBase must be of type UserDailyActivity to use the UserDailyActivityToCSVExporter");
            }

            await Task.Run(() =>
            {
                var dataDump = new List <Dictionary <string, object> >();

                foreach (UserDailyActivity info in ((UserDailyActivity)eventBase).Segments)
                {
                    dataDump.Add(new Dictionary <string, object>()
                    {
                        { "Start Time", info.StartTime },
                        { "Day Classification", info.DayClassification },
                        { "Activity Level", info.ActivityLevel },
                        { "Steps Taken", info.StepsTaken },
                        { "Calories Burned", info.CaloriesBurned },
                        { "UV Exposure", info.UvExposure },
                        { "Peak Heart Rate", info.HeartRate.Peak },
                        { "Average Heart Rate", info.HeartRate.Average },
                        { "Lowest Heart Rate", info.HeartRate.Lowest },
                        { "Total Distance", info.TotalDistance },
                        { "It Cal", info.ItCal }
                    });
                }

                CSVExporter.ExportToFile(dataDump, filePath);
            });
        }
        public async Task ExportToFile(BandEventBase eventBase, string filePath)
        {
            await Task.Run(() =>
            {
                var dataDump = new List<Dictionary<string, object>>();

                foreach (var info in eventBase.InfoSegments)
                {
                    dataDump.Add(new Dictionary<string, object>()
                    {
                        {"Time of Day", info.TimeOfDay},
                        {"Day Classification", info.DayClassification},
                        {"Activity Level", info.ActivityLevel},
                        {"Steps Taken", info.StepsTaken},
                        {"Calories Burned", info.CaloriesBurned},
                        {"UV Exposure", info.UvExposure},
                        {"Location", info.Location},
                        {"Peak Heart Rate", info.HeartRate.Peak},
                        {"Average Heart Rate", info.HeartRate.Average},
                        {"Lowest Heart Rate", info.HeartRate.Lowest},
                        {"Total Distance", info.TotalDistance},
                        {"It Cal", info.ItCal}
                    });
                }

                CSVExporter.ExportToFile(dataDump, filePath);
            });
        }
        public async Task ExportToFile(BandEventBase eventBase, string filePath)
        {
            if (!(eventBase is RunEvent))
            {
                throw new ArgumentException("eventBase must be of type SleepEvent to use the RunToCSVExporter");
            }

            var runEvent = eventBase as RunEvent;

            await Task.Run(() =>
            {
                var dataDump = new List<Dictionary<string, object>>();

                foreach (var sequence in runEvent.Sequences)
                {
                    var runSequence = sequence as RunEventSequenceItem;
                    var sequenceData = new Dictionary<string, object>(BaseSequenceDumper.Dump(sequence))
                    {
                        {"Total Distance", runSequence.TotalDistance},
                        {"Split Distance", runSequence.SplitDistance},
                        {"Split Pace", runSequence.SplitPace},
                        {"Overall Pace", runSequence.OverallPace},
                        {"Actual Distance", runSequence.ActualDistance},
                        {"Paused Time", runSequence.PausedTime},
                    };

                    dataDump.Add(sequenceData);
                }

                // TODO: pass through convertDateTimeToLocal
                CSVExporter.ExportToFile(dataDump, filePath);
            });
        }
        public async Task ExportToFile(BandEventBase eventBase, string filePath)
        {
            if (!(eventBase is SleepEvent))
            {
                throw new ArgumentException("eventBase must be of type SleepEvent to use the SleepToCSVExporter");
            }

            var sleepEvent = eventBase as SleepEvent;

            await Task.Run(() =>
            {
                var dataDump = new List<Dictionary<string, object>>();

                foreach (var sequence in sleepEvent.Sequences)
                {
                    var sleepSequence = sequence as SleepEventSequenceItem;
                    var sequenceData = new Dictionary<string, object>(BaseSequenceDumper.Dump(sequence));

                    sequenceData.Add("Sequence Type", sleepSequence.SequenceType);
                    sequenceData.Add("Sleep Time", sleepSequence.SleepTime);
                    sequenceData.Add("Day Id", sleepSequence.DayId);
                    sequenceData.Add("Sleep Type", sleepSequence.SleepType);

                    dataDump.Add(sequenceData);
                }

                // TODO: pass through convertDateTimeToLocal
                CSVExporter.ExportToFile(dataDump, filePath);
            });
        }
Example #5
0
        public async Task ExportToFile(BandEventBase eventBase, string filePath)
        {
            if (!(eventBase is SleepEvent))
            {
                throw new ArgumentException("eventBase must be of type SleepEvent to use the SleepToCSVExporter");
            }

            var sleepEvent = eventBase as SleepEvent;

            await Task.Run(() =>
            {
                var dataDump = new List <Dictionary <string, object> >();

                foreach (var sequence in sleepEvent.Sequences)
                {
                    var sleepSequence = sequence as SleepEventSequenceItem;
                    var sequenceData  = new Dictionary <string, object>(BaseSequenceDumper.Dump(sequence));

                    sequenceData.Add("Sequence Type", sleepSequence.SequenceType);
                    sequenceData.Add("Sleep Time", sleepSequence.SleepTime);
                    sequenceData.Add("Day Id", sleepSequence.DayId);
                    sequenceData.Add("Sleep Type", sleepSequence.SleepType);

                    dataDump.Add(sequenceData);
                }

                // TODO: pass through convertDateTimeToLocal
                CSVExporter.ExportToFile(dataDump, filePath);
            });
        }
Example #6
0
        public async Task ExportToFile(BandEventBase eventBase, string filePath)
        {
            await Task.Run(() =>
            {
                var dataDump = new List <Dictionary <string, object> >();

                foreach (var info in eventBase.InfoSegments)
                {
                    dataDump.Add(new Dictionary <string, object>()
                    {
                        { "Time of Day", info.TimeOfDay },
                        { "Day Classification", info.DayClassification },
                        { "Activity Level", info.ActivityLevel },
                        { "Steps Taken", info.StepsTaken },
                        { "Calories Burned", info.CaloriesBurned },
                        { "UV Exposure", info.UvExposure },
                        { "Location", info.Location },
                        { "Peak Heart Rate", info.HeartRate.Peak },
                        { "Average Heart Rate", info.HeartRate.Average },
                        { "Lowest Heart Rate", info.HeartRate.Lowest },
                        { "Total Distance", info.TotalDistance },
                        { "It Cal", info.ItCal }
                    });
                }

                CSVExporter.ExportToFile(dataDump, filePath);
            });
        }
        public async Task ExportToFile(BandEventBase eventBase, string filePath)
        {
            if (!(eventBase is RunEvent))
            {
                throw new ArgumentException("eventBase must be of type SleepEvent to use the RunToCSVExporter");
            }

            var runEvent = eventBase as RunEvent;

            await Task.Run(() =>
            {
                var dataDump = new List <Dictionary <string, object> >();

                foreach (var sequence in runEvent.Sequences)
                {
                    var runSequence  = sequence as RunEventSequenceItem;
                    var sequenceData = new Dictionary <string, object>(BaseSequenceDumper.Dump(sequence))
                    {
                        { "Total Distance", runSequence.TotalDistance },
                        { "Split Distance", runSequence.SplitDistance },
                        { "Split Pace", runSequence.SplitPace },
                        { "Overall Pace", runSequence.OverallPace },
                        { "Actual Distance", runSequence.ActualDistance },
                        { "Paused Time", runSequence.PausedTime },
                    };

                    dataDump.Add(sequenceData);
                }

                // TODO: pass through convertDateTimeToLocal
                CSVExporter.ExportToFile(dataDump, filePath);
            });
        }
Example #8
0
        public BandEventViewModel(BandCloudClient cloud, BandEventBase cloudEvent)
        {
            _cloud = cloud;

            Event = cloudEvent;

            if (Event is UserDailyActivity)
            {
                // this event type is considered "Loaded" already since we get all of the information
                // from the initial API call
                Loaded = true;
            }
        }
		public async Task ExportToFile(BandEventBase eventBase, string filePath)
		{
			var golfEvent = eventBase as GolfEvent;
			if (golfEvent == null)
			{
				throw new ArgumentException("eventBase must be of type GolfEvent to use the RunToCSVExporter");
			}

			await Task.Run(() =>
			{
				var dataDump = golfEvent.Sequences
					.Select(sequence => sequence as GolfEventHoleSequenceItem)
					.Select(GolfEventHoleSequenceDumper.Dump).ToList();

				// TODO: pass through convertDateTimeToLocal
				CSVExporter.ExportToFile(dataDump, filePath);
			});
		}
        public async Task ExportToFile(BandEventBase eventBase, string filePath)
        {
            if (!(eventBase is RunEvent))
            {
                throw new ArgumentException("eventBase must be of type SleepEvent to use the RunToCSVExporter");
            }

            var runEvent = eventBase as RunEvent;

            await Task.Run(() =>
            {
                var dataDump = new List<Dictionary<string, object>>();

                foreach (var sequence in runEvent.Sequences)
                {
                    var exerciseSequence = sequence as ExerciseEventSequenceItem;
                    
                    dataDump.Add(ExerciseSequenceDumper.Dump(exerciseSequence));
                }

                // TODO: pass through convertDateTimeToLocal
                CSVExporter.ExportToFile(dataDump, filePath);
            });
        }
        public async Task ExportToFile(BandEventBase eventBase, string filePath)
        {
            if (!(eventBase is RunEvent))
            {
                throw new ArgumentException("eventBase must be of type SleepEvent to use the RunToCSVExporter");
            }

            var runEvent = eventBase as RunEvent;

            await Task.Run(() =>
            {
                var dataDump = new List <Dictionary <string, object> >();

                foreach (var sequence in runEvent.Sequences)
                {
                    var exerciseSequence = sequence as ExerciseEventSequenceItem;

                    dataDump.Add(ExerciseSequenceDumper.Dump(exerciseSequence));
                }

                // TODO: pass through convertDateTimeToLocal
                CSVExporter.ExportToFile(dataDump, filePath);
            });
        }
Example #12
0
 public BandEventViewModel(BandEventBase cloudEvent)
 {
     Event = cloudEvent;
     Event.EventDataDownloaded += Event_EventDataDownloaded;
 }
Example #13
0
 void Event_EventDataDownloaded(BandEventBase bandEvent)
 {
     Loaded = true;
 }
Example #14
0
        public async Task ExportToFile(BandEventBase eventBase, string filePath)
        {
            if (!(eventBase is IBandEventWithMapPoints))
            {
                throw new ArgumentException("eventBase must implement IBandEventWithMapPoints to use the GPXExporter");
            }

            var eventWithMapPoints = eventBase as IBandEventWithMapPoints;

            if (!eventWithMapPoints.HasGPSPoints)
            {
                // nothing to do here, no point in piping out an empty file
                return;
            }

            await Task.Run(() =>
            {

                var gpxtpx = XNamespace.Get("http://www.garmin.com/xmlschemas/TrackPointExtension/v1");
                var gpxx = XNamespace.Get("http://www.garmin.com/xmlschemas/GpxExtensions/v3");
                var xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance");
                var nsRoot = XNamespace.Get("http://www.topografix.com/GPX/1/1");
                var xsiSchemaLocation = XNamespace.Get("http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd");

                var doc = new XDocument(new XDeclaration("1.0", "utf-8", null));

                var xroot = new XElement(nsRoot + "gpx",
                    new XAttribute(XNamespace.Xmlns + "xsi", xsi),
                    new XAttribute(xsi + "schemaLocation", xsiSchemaLocation),
                    new XAttribute("xmlns", nsRoot),
                    new XAttribute(XNamespace.Xmlns + "gpxx", gpxx),
                    new XAttribute(XNamespace.Xmlns + "gpxtpx", gpxtpx),
                    new XAttribute("creator", "unBand - http://unband.nachmore.com/"),
                    new XAttribute("version", "1.1"),
                    new XElement(nsRoot + "metadata",
                        new XElement(nsRoot + "name", eventBase.Name),
                        new XElement(nsRoot + "description", eventBase.EventID),
                        new XElement(nsRoot + "time", eventBase.StartTime.ToUniversalTime().ToString("o"))
                    ),
                    new XElement(nsRoot + "trk",
                        new XElement(nsRoot + "src", "Microsoft Band"),
                        new XElement(nsRoot + "trkseg")
                    )
                );

                foreach (var mp in eventWithMapPoints.MapPoints)
                {
                    xroot.Element(nsRoot + "trk").Element(nsRoot + "trkseg").Add(
                        new XElement(nsRoot + "trkpt",
                            new XElement(nsRoot + "ele", mp.Altitude.ToString("0.0000000000000000", new CultureInfo("en-US", false))),
                            new XElement(nsRoot + "time", eventBase.StartTime.AddSeconds(mp.SecondsSinceStart).ToUniversalTime().ToString("o")),
                            new XElement(nsRoot + "geoidheight", mp.Altitude.ToString("0.0000000000000000", new CultureInfo("en-US", false))),
                            new XElement(nsRoot + "extensions",
                                new XElement(gpxtpx + "TrackPointExtension",
                                    new XElement(gpxtpx + "hr", mp.HeartRate)
                                )
                            ),
                            new XAttribute("lat", mp.Latitude.ToString("0.00000000", new CultureInfo("en-US", false))),
                            new XAttribute("lon", mp.Longitude.ToString("0.00000000", new CultureInfo("en-US", false)))
                        )
                    );
                }

                doc.Add(xroot);

                xroot.Save(filePath);
            });
        }
Example #15
0
        public async Task ExportToFile(BandEventBase eventBase, string filePath)
        {
            await Task.Run(() =>
            {
                var xsiSchemaLocation = XNamespace.Get("http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd");
                var ns5    = XNamespace.Get("http://www.garmin.com/xmlschemas/ActivityGoals/v1");
                var ns3    = XNamespace.Get("http://www.garmin.com/xmlschemas/ActivityExtension/v2");
                var ns2    = XNamespace.Get("http://www.garmin.com/xmlschemas/UserProfile/v2");
                var nsRoot = XNamespace.Get("http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2");
                var xsi    = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance");
                var ns4    = XNamespace.Get("http://www.garmin.com/xmlschemas/ProfileExtension/v1");

                var doc = new XDocument(new XDeclaration("1.0", "utf-8", null));

                var xroot = new XElement(nsRoot + "TrainingCenterDatabase",
                                         new XAttribute(XNamespace.Xmlns + "xsi", xsi),
                                         new XAttribute(xsi + "schemaLocation", xsiSchemaLocation),
                                         new XAttribute("xmlns", nsRoot),
                                         new XAttribute(XNamespace.Xmlns + "ns5", ns5),
                                         new XAttribute(XNamespace.Xmlns + "ns3", ns3),
                                         new XAttribute(XNamespace.Xmlns + "ns2", ns2),
                                         new XAttribute(XNamespace.Xmlns + "ns4", ns4),
                                         new XAttribute("creator", "unBand - http://unband.nachmore.com/"),
                                         new XAttribute("version", "1.0"),
                                         new XElement(nsRoot + "Activities",
                                                      new XElement(nsRoot + "Activity",
                                                                   new XAttribute("Sport", "Running"),
                                                                   new XElement(nsRoot + "Id", eventBase.EventID),
                                                                   new XElement(nsRoot + "Lap",
                                                                                new XAttribute("StartTime", eventBase.StartTime.ToUniversalTime().ToString("o")),
                                                                                new XElement(nsRoot + "TotalTimeSeconds", eventBase.Duration),
                                                                                new XElement(nsRoot + "Calories", eventBase.CaloriesBurned),
                                                                                new XElement(nsRoot + "AverageHeartRateBpm",
                                                                                             new XElement(nsRoot + "Value", eventBase.HeartRate.Average)
                                                                                             ),
                                                                                new XElement(nsRoot + "MaximumHeartRateBpm",
                                                                                             new XElement(nsRoot + "Value", eventBase.HeartRate.Peak)
                                                                                             ),
                                                                                new XElement(nsRoot + "TriggerMethod", "manual")
                                                                                )
                                                                   )
                                                      )
                                         );

                //Add run specific data. TCX could be also used for basic workout data (future implementation).
                if (eventBase is RunEvent)
                {
                    var runEvent = eventBase as RunEvent;

                    xroot.Element(nsRoot + "Activities").Element(nsRoot + "Activity").Element(nsRoot + "Lap").Add(
                        new XElement(nsRoot + "DistanceMeters", runEvent.TotalDistance / 100),
                        new XElement(nsRoot + "Track")
                        );

                    foreach (var mp in runEvent.MapPoints)
                    {
                        var trackpoint = new XElement(nsRoot + "Trackpoint",
                                                      new XElement(nsRoot + "Time", runEvent.StartTime.AddSeconds(mp.SecondsSinceStart).ToUniversalTime().ToString("o")),
                                                      new XElement(nsRoot + "HeartRateBpm",
                                                                   new XElement(nsRoot + "Value", mp.HeartRate)
                                                                   )
                                                      );

                        if (mp.Latitude != 0 && mp.Latitude != 0)
                        {
                            trackpoint.Add(
                                new XElement(nsRoot + "AltitudeMeters", mp.Altitude.ToString("0.0000000000000000", new CultureInfo("en-US", false))),
                                new XElement(nsRoot + "Position",
                                             new XElement(nsRoot + "LatitudeDegrees", mp.Latitude.ToString("0.00000000", new CultureInfo("en-US", false))),
                                             new XElement(nsRoot + "LongitudeDegrees", mp.Longitude.ToString("0.00000000", new CultureInfo("en-US", false)))
                                             )
                                );
                        }

                        xroot.Element(nsRoot + "Activities").Element(nsRoot + "Activity").Element(nsRoot + "Lap").Element(nsRoot + "Track").Add(
                            trackpoint
                            );
                    }
                }

                doc.Add(xroot);

                xroot.Save(filePath);
            });
        }
Example #16
0
        public async Task ExportToFile(BandEventBase eventBase, string filePath)
        {
            if (!(eventBase is IBandEventWithMapPoints))
            {
                throw new ArgumentException("eventBase must implement IBandEventWithMapPoints to use the GPXExporter");
            }

            var eventWithMapPoints = eventBase as IBandEventWithMapPoints;

            if (!eventWithMapPoints.HasGPSPoints)
            {
                // nothing to do here, no point in piping out an empty file
                return;
            }

            await Task.Run(() =>
            {
                var gpxtpx            = XNamespace.Get("http://www.garmin.com/xmlschemas/TrackPointExtension/v1");
                var gpxx              = XNamespace.Get("http://www.garmin.com/xmlschemas/GpxExtensions/v3");
                var xsi               = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance");
                var nsRoot            = XNamespace.Get("http://www.topografix.com/GPX/1/1");
                var xsiSchemaLocation = XNamespace.Get("http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd");

                var doc = new XDocument(new XDeclaration("1.0", "utf-8", null));

                var xroot = new XElement(nsRoot + "gpx",
                                         new XAttribute(XNamespace.Xmlns + "xsi", xsi),
                                         new XAttribute(xsi + "schemaLocation", xsiSchemaLocation),
                                         new XAttribute("xmlns", nsRoot),
                                         new XAttribute(XNamespace.Xmlns + "gpxx", gpxx),
                                         new XAttribute(XNamespace.Xmlns + "gpxtpx", gpxtpx),
                                         new XAttribute("creator", "unBand - http://unband.nachmore.com/"),
                                         new XAttribute("version", "1.1"),
                                         new XElement(nsRoot + "metadata",
                                                      new XElement(nsRoot + "name", eventBase.Name),
                                                      new XElement(nsRoot + "description", eventBase.EventID),
                                                      new XElement(nsRoot + "time", eventBase.StartTime.ToUniversalTime().ToString("o"))
                                                      ),
                                         new XElement(nsRoot + "trk",
                                                      new XElement(nsRoot + "src", "Microsoft Band"),
                                                      new XElement(nsRoot + "trkseg")
                                                      )
                                         );

                foreach (var mp in eventWithMapPoints.MapPoints)
                {
                    xroot.Element(nsRoot + "trk").Element(nsRoot + "trkseg").Add(
                        new XElement(nsRoot + "trkpt",
                                     new XElement(nsRoot + "ele", mp.Altitude.ToString("0.0000000000000000", new CultureInfo("en-US", false))),
                                     new XElement(nsRoot + "time", eventBase.StartTime.AddSeconds(mp.SecondsSinceStart).ToUniversalTime().ToString("o")),
                                     new XElement(nsRoot + "geoidheight", mp.Altitude.ToString("0.0000000000000000", new CultureInfo("en-US", false))),
                                     new XElement(nsRoot + "extensions",
                                                  new XElement(gpxtpx + "TrackPointExtension",
                                                               new XElement(gpxtpx + "hr", mp.HeartRate)
                                                               )
                                                  ),
                                     new XAttribute("lat", mp.Latitude.ToString("0.00000000", new CultureInfo("en-US", false))),
                                     new XAttribute("lon", mp.Longitude.ToString("0.00000000", new CultureInfo("en-US", false)))
                                     )
                        );
                }

                doc.Add(xroot);

                xroot.Save(filePath);
            });
        }
Example #17
0
        public async Task ExportToFile(BandEventBase eventBase, string filePath)
        {
            await Task.Run(() =>
            {
                var xsiSchemaLocation = XNamespace.Get("http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd");
                var ns5 = XNamespace.Get("http://www.garmin.com/xmlschemas/ActivityGoals/v1");
                var ns3 = XNamespace.Get("http://www.garmin.com/xmlschemas/ActivityExtension/v2");
                var ns2 = XNamespace.Get("http://www.garmin.com/xmlschemas/UserProfile/v2");
                var nsRoot = XNamespace.Get("http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2");
                var xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance");
                var ns4 = XNamespace.Get("http://www.garmin.com/xmlschemas/ProfileExtension/v1");

                var doc = new XDocument(new XDeclaration("1.0", "utf-8", null));

                var xroot = new XElement(nsRoot + "TrainingCenterDatabase",
                    new XAttribute(XNamespace.Xmlns + "xsi", xsi),
                    new XAttribute(xsi + "schemaLocation", xsiSchemaLocation),
                    new XAttribute("xmlns", nsRoot),
                    new XAttribute(XNamespace.Xmlns + "ns5", ns5),
                    new XAttribute(XNamespace.Xmlns + "ns3", ns3),
                    new XAttribute(XNamespace.Xmlns + "ns2", ns2),
                    new XAttribute(XNamespace.Xmlns + "ns4", ns4),
                    new XAttribute("creator", "unBand - http://unband.nachmore.com/"),
                    new XAttribute("version", "1.0"),
                    new XElement(nsRoot + "Activities",
                        new XElement(nsRoot + "Activity",
                            new XAttribute("Sport", "Running"),
                            new XElement(nsRoot + "Id", eventBase.EventID),
                            new XElement(nsRoot + "Lap",
                                new XAttribute("StartTime", eventBase.StartTime.ToUniversalTime().ToString("o")),
                                new XElement(nsRoot + "TotalTimeSeconds", eventBase.Duration),
                                new XElement(nsRoot + "Calories", eventBase.CaloriesBurned),
                                new XElement(nsRoot + "AverageHeartRateBpm",
                                    new XElement(nsRoot + "Value", eventBase.HeartRate.Average)
                                ),
                                new XElement(nsRoot + "MaximumHeartRateBpm",
                                    new XElement(nsRoot + "Value", eventBase.HeartRate.Peak)
                                ),
                                new XElement(nsRoot + "TriggerMethod", "manual")
                            )
                        )
                    )
                );

                //Add run specific data. TCX could be also used for basic workout data (future implementation).
                if (eventBase is RunEvent)
                {
                    var runEvent = eventBase as RunEvent;

                    xroot.Element(nsRoot + "Activities").Element(nsRoot + "Activity").Element(nsRoot + "Lap").Add(
                        new XElement(nsRoot + "DistanceMeters", runEvent.TotalDistance / 100),
                        new XElement(nsRoot + "Track")
                    );

                    foreach (var mp in runEvent.MapPoints)
                    {
                        var trackpoint = new XElement(nsRoot + "Trackpoint",
                            new XElement(nsRoot + "Time", runEvent.StartTime.AddSeconds(mp.SecondsSinceStart).ToUniversalTime().ToString("o")),
                            new XElement(nsRoot + "HeartRateBpm",
                                new XElement(nsRoot + "Value", mp.HeartRate)
                            )
                        );

                        if (mp.Latitude != 0 && mp.Latitude != 0)
                        {
                            trackpoint.Add(
                                new XElement(nsRoot + "AltitudeMeters", mp.Altitude.ToString("0.0000000000000000", new CultureInfo("en-US", false))),
                                new XElement(nsRoot + "Position",
                                    new XElement(nsRoot + "LatitudeDegrees", mp.Latitude.ToString("0.00000000", new CultureInfo("en-US", false))),
                                    new XElement(nsRoot + "LongitudeDegrees", mp.Longitude.ToString("0.00000000", new CultureInfo("en-US", false)))
                                )
                            );
                        }

                        xroot.Element(nsRoot + "Activities").Element(nsRoot + "Activity").Element(nsRoot + "Lap").Element(nsRoot + "Track").Add(
                            trackpoint
                        );
                    }
                }

                doc.Add(xroot);

                xroot.Save(filePath);
            });
        }
Example #18
0
        public BandEventViewModel(BandCloudClient cloud, BandEventBase cloudEvent)
        {
            _cloud = cloud;

            Event = cloudEvent;
        }