Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }