diff options
| author | Ariel Costas Guerrero <ariel@costas.dev> | 2026-03-24 21:01:38 +0100 |
|---|---|---|
| committer | Ariel Costas Guerrero <ariel@costas.dev> | 2026-03-24 21:01:38 +0100 |
| commit | 6671f34a2503cd29aa3bf15216f3a0e2c7af73cf (patch) | |
| tree | dae6a15f6f6c4c9abcc518d604d835d9021f4fcf | |
| parent | bae7939f4cf1a6c23b9ac1aaae898911f776b94c (diff) | |
Enhance NextStopsProcessor to include stop names in marquee and improve stop description parsing
| -rw-r--r-- | src/Enmarcha.Backend/Services/Processors/NextStopsProcessor.cs | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/src/Enmarcha.Backend/Services/Processors/NextStopsProcessor.cs b/src/Enmarcha.Backend/Services/Processors/NextStopsProcessor.cs index 517faae..1db215b 100644 --- a/src/Enmarcha.Backend/Services/Processors/NextStopsProcessor.cs +++ b/src/Enmarcha.Backend/Services/Processors/NextStopsProcessor.cs @@ -31,7 +31,7 @@ public class NextStopsProcessor : IArrivalsProcessor arrival.NextStops = otpArrival.Trip.Stoptimes .Where(s => s.ScheduledDeparture > currentStopDeparture) .OrderBy(s => s.ScheduledDeparture) - .Select(s => s.Stop.Description) + .Select(s => $"{s.Stop.Name} -- {s.Stop.Description}") .Distinct() .ToList(); } @@ -71,11 +71,22 @@ public class NextStopsProcessor : IArrivalsProcessor .Select(SplitXuntaStopDescription) .ToList(); - List<string> seenConcellos = new(); - List<string> seenParroquias = new(); + List<string> seenConcellos = []; + List<string> seenParroquias = []; List<string> items = []; - foreach (var (parroquia, concello) in points) + var maxPointsPerCouncil = points.GroupBy(p => p.concello) + .Select(g => g.Count()) + .DefaultIfEmpty(0) + .Max(); + + if (maxPointsPerCouncil == 1) + { + // If there's only one stop per council, we can simplify the marquee to just show the council names + return string.Join(" - ", points.Select(p => p.nombre).Distinct()); + } + + foreach (var (nombre, parroquia, concello) in points) { // Santiago de Compostela -- Santiago de Compostela > Conxo -- Santiago de Compostela > BiduĂdo -- Ames > Calo -- Teo > Bugallido -- Ames // Santiago de Compostela -> Conxo -> Bidueiro (Ames) -> Calo (Teo) -> Bugallido @@ -94,7 +105,7 @@ public class NextStopsProcessor : IArrivalsProcessor if (!seenConcellos.Contains(concello)) { seenConcellos.Add(concello); - item = $"({concello}) {item}"; + item = $"{item} ({concello})"; } items.Add(item); @@ -112,14 +123,14 @@ public class NextStopsProcessor : IArrivalsProcessor }; } - private static (string parroquia, string concello) SplitXuntaStopDescription(string stopName) + private static (string nombre, string parroquia, string concello) SplitXuntaStopDescription(string stopName) { - var parts = stopName.Split(" -- ", 2); - if (parts.Length != 2) + var parts = stopName.Split(" -- ", 3); + if (parts.Length != 3) { - return ("", ""); // TODO: Throw + return ("", "", ""); // TODO: Throw } - return (parts[0], parts[1]); + return (parts[0], parts[1], parts[2]); } } |
