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); }); }
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); }); }
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 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); }); }
public BandEventViewModel(BandEventBase cloudEvent) { Event = cloudEvent; Event.EventDataDownloaded += Event_EventDataDownloaded; }
void Event_EventDataDownloaded(BandEventBase bandEvent) { Loaded = true; }
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); }); }
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); }); }
public BandEventViewModel(BandCloudClient cloud, BandEventBase cloudEvent) { _cloud = cloud; Event = cloudEvent; }