diff options
Diffstat (limited to 'src')
3 files changed, 39 insertions, 22 deletions
diff --git a/src/Enmarcha.Backend/Services/Processors/SantiagoRealTimeProcessor.cs b/src/Enmarcha.Backend/Services/Processors/SantiagoRealTimeProcessor.cs index 28b38a9..b941c6e 100644 --- a/src/Enmarcha.Backend/Services/Processors/SantiagoRealTimeProcessor.cs +++ b/src/Enmarcha.Backend/Services/Processors/SantiagoRealTimeProcessor.cs @@ -1,3 +1,4 @@ +using Enmarcha.Backend.Helpers; using Enmarcha.Sources.OpenTripPlannerGql.Queries; using Enmarcha.Sources.TranviasCoruna; using Enmarcha.Backend.Types; @@ -41,15 +42,12 @@ public class SantiagoRealTimeProcessor : AbstractRealTimeProcessor { var bestMatch = context.Arrivals .Where(a => !usedTripIds.Contains(a.TripId)) - .Where(a => a.Route.RouteIdInGtfs.Trim() == estimate.RouteId.Trim()) - .Select(a => + .Where(a => a.Route.RouteIdInGtfs.Trim() == estimate.Id.ToString()) + .Select(a => new { - return new - { - Arrival = a, - TimeDiff = estimate.Minutes - a.Estimate.Minutes, // RealTime - Schedule - RouteMatch = true - }; + Arrival = a, + TimeDiff = estimate.MinutesToArrive - a.Estimate.Minutes, // RealTime - Schedule + RouteMatch = true }) .Where(x => x.RouteMatch) // Strict route matching .Where(x => x.TimeDiff >= -7 && x.TimeDiff <= 75) // Allow 7m early (RealTime < Schedule) or 75m late (RealTime > Schedule) @@ -58,17 +56,38 @@ public class SantiagoRealTimeProcessor : AbstractRealTimeProcessor if (bestMatch == null) { - continue; + context.Arrivals.Add(new Arrival + { + TripId = $"tussa:rt:{estimate.Id}:{estimate.MinutesToArrive}", + Route = new RouteInfo + { + GtfsId = $"tussa:{estimate.Id}", + ShortName = estimate.Sinoptico, + Colour = estimate.Colour, + TextColour = ContrastHelper.GetBestTextColour(estimate.Colour) + }, + Headsign = new HeadsignInfo + { + Badge = "T.REAL", + Destination = estimate.Name + }, + Estimate = new ArrivalDetails + { + Minutes = estimate.MinutesToArrive, + Precision = ArrivalPrecision.Confident + } + + }); } var arrival = bestMatch.Arrival; var scheduledMinutes = arrival.Estimate.Minutes; - arrival.Estimate.Minutes = estimate.Minutes; + arrival.Estimate.Minutes = estimate.MinutesToArrive; arrival.Estimate.Precision = ArrivalPrecision.Confident; // Calculate delay badge - var delayMinutes = estimate.Minutes - scheduledMinutes; + var delayMinutes = estimate.MinutesToArrive - scheduledMinutes; if (delayMinutes != 0) { arrival.Delay = new DelayBadge { Minutes = delayMinutes }; diff --git a/src/Enmarcha.Sources.Tussa/Response.cs b/src/Enmarcha.Sources.Tussa/Response.cs index df941b9..cbb1573 100644 --- a/src/Enmarcha.Sources.Tussa/Response.cs +++ b/src/Enmarcha.Sources.Tussa/Response.cs @@ -4,7 +4,7 @@ namespace Enmarcha.Sources.Tussa; public class MaisbusResponse { - [JsonPropertyName("id")] public string Id { get; set; } + [JsonPropertyName("id")] public int Id { get; set; } [JsonPropertyName("codigo")] public string Code { get; set; } [JsonPropertyName("nombre")] public string Name { get; set; } [JsonPropertyName("coordenadas")] public Coordinates Coordinates { get; set; } @@ -21,7 +21,7 @@ public class Coordinates public class Route { - [JsonPropertyName("id")] public string Id { get; set; } + [JsonPropertyName("id")] public int Id { get; set; } [JsonPropertyName("sinoptico")] public string Sinoptico { get; set; } [JsonPropertyName("nombre")] public string Name { get; set; } [JsonPropertyName("estilo")] public string Colour { get; set; } diff --git a/src/Enmarcha.Sources.Tussa/SantiagoRealtimeEstimatesProvider.cs b/src/Enmarcha.Sources.Tussa/SantiagoRealtimeEstimatesProvider.cs index 7437a05..6ef79a3 100644 --- a/src/Enmarcha.Sources.Tussa/SantiagoRealtimeEstimatesProvider.cs +++ b/src/Enmarcha.Sources.Tussa/SantiagoRealtimeEstimatesProvider.cs @@ -11,10 +11,14 @@ public class SantiagoRealtimeEstimatesProvider _http = http; } - public async Task<List<SantiagoEstimate>> GetEstimatesForStop(int stopId) + public async Task<List<Route>> GetEstimatesForStop(int stopId) { var url = GetRequestUrl(stopId.ToString()); + var request = new HttpRequestMessage(HttpMethod.Get, url); + request.Headers.Add("Accept", "application/json"); + request.Headers.Add("User-Agent", "Mozilla/5.0 (compatible; EnMarcha/0.1; https://enmarcha.app)"); + var response = await _http.GetAsync(url); var maisbusResponse = await response.Content.ReadFromJsonAsync<MaisbusResponse>(); @@ -24,17 +28,11 @@ public class SantiagoRealtimeEstimatesProvider throw new Exception("Error parsing maisbus response: " + responseString); } - return maisbusResponse.Routes.Select(r => new SantiagoEstimate - ( - r.Id.ToString(), - r.MinutesToArrive - )).OrderBy(a => a.Minutes).ToList(); + return maisbusResponse.Routes.ToList(); } private static string GetRequestUrl(string stopId) { - return $"https://tussa.gal/maisbus/api/stop/{stopId}"; + return $"https://app.tussa.org/tussa/api/paradas/{stopId}"; } } - -public record SantiagoEstimate(string RouteId, int Minutes); |
