private static WorkoutInterval TransformWorkoutInterval(WorkoutIntervalXml intervalXml) { var interval = new WorkoutInterval { //Lengths = lengths, TimeOffset = intervalXml.TimeOffset }; //var lengths = new List<WorkoutIntervalLength>(); for (int i = 0; i < intervalXml.Lengths?.Length; ++i) { var lengthXml = intervalXml.Lengths[i]; var length = TransformWorkoutIntervalLength(lengthXml); length.LengthNo = i + 1; interval.Lengths.Add(length); //lengths.Add(length); } //interval.Lengths.AddRange(lengths); if (interval.Lengths.Count > 0) { interval.Distance = interval.Lengths.Sum(l => l.Distance); interval.Duration = Math.Round(interval.Lengths.Sum(l => l.Duration), 1); interval.StrokeCount = interval.Lengths.Sum(l => l.StrokeCount) / (double)interval.Lengths.Count; } return(interval); }
internal static WorkoutInterval CreateInterval(IntervalDisplayData inputInterval) { var interval = new WorkoutInterval { Id = inputInterval.IntervalId, IntervalNo = inputInterval.IntervalNo, Duration = ParseDuration(inputInterval.DurationFormatted), Distance = ParseDistance(inputInterval.DistanceFormatted), TimeOffset = ParseDuration(inputInterval.StartTime), WorkoutIntervalTypeId = inputInterval.IntervalTypeId, StrokeCount = double.Parse(inputInterval.StrokeCountFormatted, NumberFormatInfo.InvariantInfo) }; foreach (var length in inputInterval.Lengths) { var duration = ParseDuration(length.DurationFormatted); var distance = ParseDistance(length.DistanceFormatted); interval.Lengths.Add(new WorkoutIntervalLength { WorkoutIntervalId = inputInterval.IntervalId, LengthNo = length.LengthNo, Distance = distance, StrokeTypeId = length.StrokeTypeId, StrokeCount = length.StrokeCount, Duration = duration, WorkoutInterval = interval }); } return(interval); }
internal static IntervalDisplayData CreateIntervalDisplayData(WorkoutInterval interval) { var pace = interval.Distance == 0 ? 0 : interval.Duration * 100 / interval.Distance; var swolf = interval.Distance == 0 ? 0 : interval.Duration * 50 / interval.Distance + interval.StrokeCount; var result = new IntervalDisplayData { IntervalId = interval.Id, IntervalNo = interval.IntervalNo.GetValueOrDefault(), DistanceFormatted = interval.Distance > 0 ? interval.Distance.ToStringInvariant() + " m" : "-", DurationFormatted = DisplayValuesFormatter.FormatDuration(interval.Duration, true), StartTime = DisplayValuesFormatter.FormatDuration(interval.TimeOffset, false), StrokeCountFormatted = interval.StrokeCount > 0 ? interval.StrokeCount.ToStringInvariant("0.#") : "-", PaceFormatted = interval.Distance > 0 ? DisplayValuesFormatter.FormatDuration(pace, true) : "-", SwolfFormatted = interval.StrokeTypeId != StrokeType.Drill && interval.StrokeCount > 0 ? swolf.ToStringInvariant("0.#") : "-", IntervalTypeId = interval.WorkoutIntervalTypeId.GetValueOrDefault(), IntervalTypeName = interval.WorkoutIntervalType?.Name }; foreach (var length in interval.Lengths) { result.Lengths.Add(new IntervalLengthDisplayData { LengthNo = length.LengthNo.GetValueOrDefault(), DurationFormatted = DisplayValuesFormatter.FormatDuration(length.Duration, true), DistanceFormatted = $"{length.Distance} m", PaceFormatted = length.Distance > 0 ? DisplayValuesFormatter.FormatDuration(length.Duration * 100 / length.Distance, true) : "-", StrokeCount = length.StrokeCount, StrokeTypeId = length.StrokeTypeId, StrokeTypeName = length.StrokeTypeId.GetDisplayName() }); } return(result); }
private static int GetFreestyleIntervalType(WorkoutInterval interval, WorkoutInterval[] orderedIntervals) { var prevIntervalType = interval.IntervalNo.GetValueOrDefault() > 1 ? orderedIntervals[interval.IntervalNo.Value - 2].WorkoutIntervalTypeId.GetValueOrDefault() : 0; if (interval.Distance == 100) { if (interval.Duration > 120) { if (interval.IntervalNo == 1 || prevIntervalType == WorkoutIntervalTypes.PreWarmUpId) { return(WorkoutIntervalTypes.WarmUpId); } } else { // interval.Duration <= 120 if (interval.IntervalNo > 1 && prevIntervalType == WorkoutIntervalTypes.WarmUpId) { return(WorkoutIntervalTypes.FirstQuickFreestyleId); } if (interval.IntervalNo > 2 && orderedIntervals.Any(i => i.WorkoutIntervalTypeId == WorkoutIntervalTypes.FirstQuickFreestyleId)) { return(WorkoutIntervalTypes.SecondQuickFreestyleId); } if (interval.IntervalNo >= orderedIntervals.Length - 1) { return(orderedIntervals.Any(i => i.WorkoutIntervalTypeId == WorkoutIntervalTypes.FinalQuickFreestyleId) ? WorkoutIntervalTypes.FinalQuickFreestyle2Id : WorkoutIntervalTypes.FinalQuickFreestyleId); } } } if (interval.Distance >= 400) { if (!orderedIntervals.Any(i => i.WorkoutIntervalTypeId == WorkoutIntervalTypes.FreestyleSeriesId)) { return(WorkoutIntervalTypes.FreestyleSeriesId); } } return(0); }