src/App/ViewModels/Panels/VasttrafikPanelViewModel.cs
+2
-0
diff --git a/src/App/ViewModels/Panels/VasttrafikPanelViewModel.cs b/src/App/ViewModels/Panels/VasttrafikPanelViewModel.cs
index 403133b..a8905f6 100644
@@ -51,11 +51,13 @@ public partial class VasttrafikPanelViewModel : ViewModelBase
private void OnSecondTick(object? sender, EventArgs e)
{
CurrentTime = timeProvider.GetLocalNow();
var displayCutoff = CurrentTime.AddMinutes(VasttrafikClient.DisplayWindowMinutes);
Departures =
[
.. Departures
.Where(d => CurrentTime < d.Next || (d.NextNext.HasValue && CurrentTime < d.NextNext.Value))
.Select(d => CurrentTime < d.Next ? d : d with { Next = d.NextNext!.Value, NextNext = null })
.Where(d => CurrentTime < d.Next && d.Next <= displayCutoff)
.OrderBy(d => d.Next),
];
}
src/Integrations/Vasttrafik/VasttrafikClient.cs
+6
-3
diff --git a/src/Integrations/Vasttrafik/VasttrafikClient.cs b/src/Integrations/Vasttrafik/VasttrafikClient.cs
index c3c5e45..aa87249 100644
@@ -9,17 +9,20 @@ namespace MMirror.Integrations.Vasttrafik;
public sealed class VasttrafikClient(HttpClient httpClient, TimeProvider timeProvider)
{
public const int DisplayWindowMinutes = 30;
public async Task<Departure[]> GetDeparturesFrom(string id, string[] platforms, CancellationToken cancellationToken)
{
var platformsParameter = platforms.Length is 0 ? "" : $"&platforms={string.Join(",", platforms)}";
var response =
await httpClient.GetFromJsonAsync(
$"/pr/v4/stop-areas/{id}/departures?timeSpanInMinutes=60&maxDeparturesPerLineAndDirection=2&limit=32{platformsParameter}",
$"/pr/v4/stop-areas/{id}/departures?timeSpanInMinutes=60&maxDeparturesPerLineAndDirection=2&limit=128{platformsParameter}",
VasttrafikJsonSerializerContext.Default.DeparturesResponse,
cancellationToken
) ?? throw new Exception("Received literal null from Vasttrafik departures endpoint.");
var currentTime = timeProvider.GetLocalNow();
var displayCutoff = currentTime.AddMinutes(DisplayWindowMinutes);
return
[
.. response
@@ -39,8 +42,8 @@ public sealed class VasttrafikClient(HttpClient httpClient, TimeProvider timePro
departures[0].StopPoint.Platform
);
})
.OrderBy(d => d.Next)
.Take(8),
.Where(d => d.Next <= displayCutoff)
.OrderBy(d => d.Next),
];
}