diff --git a/LiftLog.Maui/App.xaml.cs b/LiftLog.Maui/App.xaml.cs index 4b1f7bbd..e0e24687 100644 --- a/LiftLog.Maui/App.xaml.cs +++ b/LiftLog.Maui/App.xaml.cs @@ -40,7 +40,10 @@ protected override Window CreateWindow(IActivationState? activationState) if (session?.LastExercise?.LastRecordedSet?.Set is not null) { var lastSet = session.LastExercise.LastRecordedSet.Set; - var lastSetTime = session.Date.ToDateTime(lastSet.CompletionTime); + var lastSetTime = session.Date.ToDateTime( + lastSet.CompletionTime, + DateTimeKind.Local + ); var timeSinceLastSet = DateTime.Now - lastSetTime; if ( (timeSinceLastSet > TimeSpan.FromMinutes(30) && session.IsComplete) diff --git a/LiftLog.Ui/Models/SessionHistoryDao/SessionHistoryDaoV1.cs b/LiftLog.Ui/Models/SessionHistoryDao/SessionHistoryDaoV1.cs index 6f964639..9b70b246 100644 --- a/LiftLog.Ui/Models/SessionHistoryDao/SessionHistoryDaoV1.cs +++ b/LiftLog.Ui/Models/SessionHistoryDao/SessionHistoryDaoV1.cs @@ -108,7 +108,10 @@ Lib.Models.PotentialSet model ), { Set: { } } completed => new RecordedSetDaoV1( RepsCompleted: model.Set.RepsCompleted, - CompletionTime: sessionDate.ToDateTime(completed.Set.CompletionTime), + CompletionTime: sessionDate.ToDateTime( + completed.Set.CompletionTime, + DateTimeKind.Local + ), Weight: completed.Weight ), _ => null, diff --git a/LiftLog.Ui/Services/ProgressRepository.cs b/LiftLog.Ui/Services/ProgressRepository.cs index 48a2192d..2e719f1e 100644 --- a/LiftLog.Ui/Services/ProgressRepository.cs +++ b/LiftLog.Ui/Services/ProgressRepository.cs @@ -162,7 +162,10 @@ public ValueTask< .SelectMany(x => x.RecordedExercises.Where(x => x.LastRecordedSet?.Set is not null) .Select(ex => new DatedRecordedExercise( - x.Date.ToDateTime(ex.LastRecordedSet!.Set!.CompletionTime), + x.Date.ToDateTime( + ex.LastRecordedSet!.Set!.CompletionTime, + DateTimeKind.Local + ), ex )) .ToAsyncEnumerable() diff --git a/LiftLog.Ui/Shared/Presentation/StatGraphCardContent.razor b/LiftLog.Ui/Shared/Presentation/StatGraphCardContent.razor index b4833427..f7f9aedc 100644 --- a/LiftLog.Ui/Shared/Presentation/StatGraphCardContent.razor +++ b/LiftLog.Ui/Shared/Presentation/StatGraphCardContent.razor @@ -145,7 +145,8 @@ else Style = new() { Colors = new Color(GetColorString(AppState.Value.ColorScheme.OnSurface)), - } + }, + DatetimeUTC = false, }, AxisBorder = new() { diff --git a/LiftLog.Ui/Store/Feed/FeedEffects.FeedItems.cs b/LiftLog.Ui/Store/Feed/FeedEffects.FeedItems.cs index a2600921..209f21b9 100644 --- a/LiftLog.Ui/Store/Feed/FeedEffects.FeedItems.cs +++ b/LiftLog.Ui/Store/Feed/FeedEffects.FeedItems.cs @@ -115,7 +115,10 @@ await Task.WhenAll( .Select(x => x.OrderByDescending(x => x.Timestamp).First()) .OrderByDescending(x => x is SessionFeedItem sessionFeedItem - ? sessionFeedItem.Session.Date.ToDateTime(TimeOnly.MinValue) + ? sessionFeedItem.Session.Date.ToDateTime( + TimeOnly.MinValue, + DateTimeKind.Local + ) : x.Timestamp ) .ThenByDescending(x => x.Timestamp) diff --git a/LiftLog.Ui/Store/Stats/StatsEffects.cs b/LiftLog.Ui/Store/Stats/StatsEffects.cs index c8ae9835..c554209f 100644 --- a/LiftLog.Ui/Store/Stats/StatsEffects.cs +++ b/LiftLog.Ui/Store/Stats/StatsEffects.cs @@ -27,7 +27,8 @@ public async Task HandleFetchStats(FetchOverallStatsAction _, IDispatcher dispat var latestTime = DateOnly.FromDateTime(DateTime.Now); var earliestTime = DateOnly.FromDateTime( - latestTime.ToDateTime(TimeOnly.MinValue) - state.Value.OverallViewTime + latestTime.ToDateTime(TimeOnly.MinValue, DateTimeKind.Local) + - state.Value.OverallViewTime ); var filteringToCurrentSessions = "CURRENT_SESSIONS".Equals( @@ -51,25 +52,29 @@ state.Value.OverallViewSessionName is null && currentSessionNames.Contains(session.Blueprint.Name) ) ) - .Where(x => x.RecordedExercises.Any()) .ToListAsync(); + var sessionsWithExercises = sessions.Where(x => x.RecordedExercises.Any()).ToList(); if (sessions.Count == 0) { dispatcher.Dispatch(new SetStatsIsLoadingAction(false)); + dispatcher.Dispatch(new SetOverallStatsAction(null)); return; } var bodyweightStats = CreateBodyweightStatistic(sessions); - var sessionStats = sessions + var sessionStats = sessionsWithExercises .GroupBy(session => session.Blueprint.Name) .Select(CreateSessionStatistic) .ToImmutableList(); - var exerciseStats = sessions + var exerciseStats = sessionsWithExercises .SelectMany(x => x.RecordedExercises.Where(y => y.LastRecordedSet?.Set is not null) .Select(ex => new DatedRecordedExercise( - x.Date.ToDateTime(ex.LastRecordedSet!.Set!.CompletionTime), + x.Date.ToDateTime( + ex.LastRecordedSet!.Set!.CompletionTime, + DateTimeKind.Local + ), ex )) ) @@ -77,7 +82,7 @@ state.Value.OverallViewSessionName is null .Select(CreateExerciseStatistic) .ToImmutableList(); - var averageTimeBetweenSets = sessions + var averageTimeBetweenSets = sessionsWithExercises .SelectMany(x => x.RecordedExercises) .SelectMany(x => x.PotentialSets.Select(set => set.Set?.CompletionTime.ToTimeSpan()) @@ -91,7 +96,7 @@ state.Value.OverallViewSessionName is null acc => acc.RunningAvg != 0 ? acc.Zero / acc.RunningAvg : TimeSpan.Zero ); - var averageSessionLength = sessions + var averageSessionLength = sessionsWithExercises .Select(session => session.SessionLength) .WhereNotNull() .Aggregate( @@ -100,7 +105,7 @@ state.Value.OverallViewSessionName is null acc => acc.Item2 != 0 ? acc.Zero / acc.Item2 : TimeSpan.Zero ); - var exerciseMostTimeSpent = sessions + var exerciseMostTimeSpent = sessionsWithExercises .SelectMany(x => x.RecordedExercises) .Where(x => x.LastRecordedSet?.Set is not null) .GroupBy(x => new KeyedExerciseBlueprint(x.Blueprint.Name)) @@ -110,7 +115,7 @@ state.Value.OverallViewSessionName is null )) .MaxBy(x => x.TimeSpent); - var heaviestLift = sessions + var heaviestLift = sessionsWithExercises .SelectMany(x => x.RecordedExercises) .Where(x => x.FirstRecordedSet is not null) .MaxBy(x => x.MaxWeightLifted); @@ -141,7 +146,7 @@ private static StatisticOverTime CreateBodyweightStatistic(IEnumerable sessions .Where(x => x.Bodyweight is not null) .Select(session => new TimeTrackedStatistic( - session.Date.ToDateTime(TimeOnly.MinValue), + session.Date.ToDateTime(TimeOnly.MinValue, DateTimeKind.Local), session.Bodyweight!.Value )) .ToImmutableList() @@ -154,7 +159,7 @@ private static StatisticOverTime CreateSessionStatistic(IGrouping new TimeTrackedStatistic( - session.Date.ToDateTime(TimeOnly.MinValue), + session.Date.ToDateTime(TimeOnly.MinValue, DateTimeKind.Local), session.TotalWeightLifted )) .ToImmutableList()