aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Enmarcha.Backend/Services/Processors/SantiagoRealTimeProcessor.cs41
-rw-r--r--src/Enmarcha.Sources.Tussa/Response.cs4
-rw-r--r--src/Enmarcha.Sources.Tussa/SantiagoRealtimeEstimatesProvider.cs16
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);