aboutsummaryrefslogtreecommitdiff
path: root/src/Enmarcha.Backend/Services/Processors/Normalisation
diff options
context:
space:
mode:
Diffstat (limited to 'src/Enmarcha.Backend/Services/Processors/Normalisation')
-rw-r--r--src/Enmarcha.Backend/Services/Processors/Normalisation/ColourProcessor.cs34
-rw-r--r--src/Enmarcha.Backend/Services/Processors/Normalisation/TranviasNormalizationProcessor.cs17
-rw-r--r--src/Enmarcha.Backend/Services/Processors/Normalisation/VitrasaNormalizationProcessor.cs77
-rw-r--r--src/Enmarcha.Backend/Services/Processors/Normalisation/XuntaNormalizationProcessor.cs24
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;
+ }
+}