diff options
Diffstat (limited to 'src/Enmarcha.Backend/Services/Processors/Normalisation')
4 files changed, 152 insertions, 0 deletions
diff --git a/src/Enmarcha.Backend/Services/Processors/Normalisation/ColourProcessor.cs b/src/Enmarcha.Backend/Services/Processors/Normalisation/ColourProcessor.cs new file mode 100644 index 0000000..ee4379b --- /dev/null +++ b/src/Enmarcha.Backend/Services/Processors/Normalisation/ColourProcessor.cs @@ -0,0 +1,34 @@ +using Enmarcha.Backend.Helpers; + +namespace Enmarcha.Backend.Services.Processors.Normalisation; + +public class ColourProcessor : IArrivalsProcessor +{ + private readonly FeedService _feedService; + + public ColourProcessor(FeedService feedService) + { + _feedService = feedService; + } + + public Task ProcessAsync(ArrivalsContext context) + { + var feedId = context.StopId.Split(':')[0]; + var (fallbackColor, fallbackTextColor) = _feedService.GetFallbackColourForFeed(feedId); + + foreach (var arrival in context.Arrivals) + { + if (string.IsNullOrEmpty(arrival.Route.Colour) || arrival.Route.Colour == "FFFFFF") + { + arrival.Route.Colour = fallbackColor; + arrival.Route.TextColour = fallbackTextColor; + } + else if (string.IsNullOrEmpty(arrival.Route.TextColour) || arrival.Route.TextColour == "000000") + { + arrival.Route.TextColour = ContrastHelper.GetBestTextColour(arrival.Route.Colour); + } + } + + return Task.CompletedTask; + } +} diff --git a/src/Enmarcha.Backend/Services/Processors/Normalisation/TranviasNormalizationProcessor.cs b/src/Enmarcha.Backend/Services/Processors/Normalisation/TranviasNormalizationProcessor.cs new file mode 100644 index 0000000..3d17a37 --- /dev/null +++ b/src/Enmarcha.Backend/Services/Processors/Normalisation/TranviasNormalizationProcessor.cs @@ -0,0 +1,17 @@ +namespace Enmarcha.Backend.Services.Processors.Normalisation; + +public class TranviasNormalizationProcessor : IArrivalsProcessor +{ + public Task ProcessAsync(ArrivalsContext context) + { + if (context.StopId.Split(':')[0] != "tranvias") + return Task.CompletedTask; + + foreach (var arrival in context.Arrivals) + { + arrival.Shift = FeedService.GetShiftBadge("tranvias", arrival.TripId); + } + + return Task.CompletedTask; + } +} diff --git a/src/Enmarcha.Backend/Services/Processors/Normalisation/VitrasaNormalizationProcessor.cs b/src/Enmarcha.Backend/Services/Processors/Normalisation/VitrasaNormalizationProcessor.cs new file mode 100644 index 0000000..2cca672 --- /dev/null +++ b/src/Enmarcha.Backend/Services/Processors/Normalisation/VitrasaNormalizationProcessor.cs @@ -0,0 +1,77 @@ +using Enmarcha.Backend.Types.Arrivals; + +namespace Enmarcha.Backend.Services.Processors.Normalisation; + +public class VitrasaNormalizationProcessor : IArrivalsProcessor +{ + public Task ProcessAsync(ArrivalsContext context) + { + if (context.StopId.Split(':')[0] != "vitrasa") + return Task.CompletedTask; + + foreach (var arrival in context.Arrivals) + { + arrival.Headsign.Destination = FeedService.NormalizeStopName("vitrasa", arrival.Headsign.Destination); + FormatVitrasaLine(arrival); + arrival.Shift = FeedService.GetShiftBadge("vitrasa", arrival.TripId); + } + + return Task.CompletedTask; + } + + private static void FormatVitrasaLine(Arrival arrival) + { + arrival.Headsign.Destination = arrival.Headsign.Destination.Replace("*", ""); + + var destinationTrimmed = arrival.Headsign.Destination.TrimStart(); + + if (arrival.Headsign.Destination == "FORA DE SERVIZO.G.B.") + { + arrival.Headsign.Destination = "García Barbón, 7 (fora de servizo)"; + return; + } + + switch (arrival.Route.ShortName) + { + case "A" when destinationTrimmed.StartsWith("\"1\"", StringComparison.Ordinal) || + (destinationTrimmed.Length >= 1 && destinationTrimmed[0] == '1' && + (destinationTrimmed.Length == 1 || !char.IsDigit(destinationTrimmed[1]))): + arrival.Route.ShortName = "A1"; + // NormalizeStopName() removes quotes for Vitrasa, so handle both "\"1\"" and leading "1". + if (destinationTrimmed.StartsWith("\"1\"", StringComparison.Ordinal)) + { + destinationTrimmed = destinationTrimmed.Substring(3); + } + else + { + destinationTrimmed = destinationTrimmed.Substring(1); + } + + arrival.Headsign.Destination = destinationTrimmed.TrimStart(' ', '-', '.', ':'); + break; + case "6": + arrival.Headsign.Destination = arrival.Headsign.Destination.Replace("\"", ""); + break; + case "FUT": + if (arrival.Headsign.Destination == "CASTELAO-CAMELIAS-G.BARBÓN.M.GARRIDO") + { + arrival.Route.ShortName = "MAR"; + arrival.Headsign.Destination = "MARCADOR ⚽: CASTELAO-CAMELIAS-G.BARBÓN.M.GARRIDO"; + } + else if (arrival.Headsign.Destination == "P. ESPAÑA-T.VIGO-S.BADÍA") + { + arrival.Route.ShortName = "RIO"; + arrival.Headsign.Destination = "RÍO ⚽: P. ESPAÑA-T.VIGO-S.BADÍA"; + } + else if (arrival.Headsign.Destination == "NAVIA-BOUZAS-URZAIZ-G. ESPINO") + { + arrival.Route.ShortName = "GOL"; + arrival.Headsign.Destination = "GOL ⚽: NAVIA-BOUZAS-URZAIZ-G. ESPINO"; + } + + arrival.Route.Colour = "6CACE4"; + arrival.Route.TextColour = "000000"; + break; + } + } +} diff --git a/src/Enmarcha.Backend/Services/Processors/Normalisation/XuntaNormalizationProcessor.cs b/src/Enmarcha.Backend/Services/Processors/Normalisation/XuntaNormalizationProcessor.cs new file mode 100644 index 0000000..9b7e498 --- /dev/null +++ b/src/Enmarcha.Backend/Services/Processors/Normalisation/XuntaNormalizationProcessor.cs @@ -0,0 +1,24 @@ +namespace Enmarcha.Backend.Services.Processors.Normalisation; + +public class XuntaNormalizationProcessor : IArrivalsProcessor +{ + private readonly FeedService _feedService; + + public XuntaNormalizationProcessor(FeedService feedService) + { + _feedService = feedService; + } + + public Task ProcessAsync(ArrivalsContext context) + { + if (context.StopId.Split(':')[0] != "xunta") + return Task.CompletedTask; + + foreach (var arrival in context.Arrivals) + { + arrival.Route.ShortName = _feedService.NormalizeRouteShortName("xunta", arrival.Route.ShortName); + } + + return Task.CompletedTask; + } +} |
