From 05ba3c9dc7731dd8c00929b5e8eeb2f598403e86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20M=C3=A9a?= Date: Thu, 9 Apr 2026 16:51:23 -0400 Subject: [PATCH 1/4] GTFS-RT > trip IDs oudated -> require direction match --- .../GTFSRealTimeVehiclePositionsProvider.kt | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/mtransit/android/commons/provider/vehiclelocations/GTFSRealTimeVehiclePositionsProvider.kt b/src/main/java/org/mtransit/android/commons/provider/vehiclelocations/GTFSRealTimeVehiclePositionsProvider.kt index 42303ebb..6000a2e8 100644 --- a/src/main/java/org/mtransit/android/commons/provider/vehiclelocations/GTFSRealTimeVehiclePositionsProvider.kt +++ b/src/main/java/org/mtransit/android/commons/provider/vehiclelocations/GTFSRealTimeVehiclePositionsProvider.kt @@ -110,13 +110,9 @@ object GTFSRealTimeVehiclePositionsProvider : MTLog.Loggable { getCachedVehicleLocationsS(targetUUIDs.keys, tripIds = it) }?.takeIf { it.isNotEmpty() } // 2 - fallback to: ignore TRIP IDS (outdated?) and try using primary target UUID only - // - only works if Route (& Direction) provided - // -> can show vehicle in wrong direction - ?: filter.getPrimaryTargetUUIDs(this@getCached, ignoreDirection = ignoreDirection)?.let { (providerTargetUUID, _) -> - getCachedVehicleLocationsS(setOf(providerTargetUUID), tripIds = null) - }?.takeIf { it.isNotEmpty() } - // 3 - fallback to: for ignore direction - ?: if (ignoreDirection) null else filter.getPrimaryTargetUUIDs(this@getCached, ignoreDirection = true)?.let { (providerTargetUUID, _) -> + // - only works if Route & Direction! provided + // -> can NOT show vehicle in wrong direction + ?: filter.getPrimaryTargetUUIDs(this@getCached, ignoreDirection = false)?.let { (providerTargetUUID, _) -> getCachedVehicleLocationsS(setOf(providerTargetUUID), tripIds = null) }?.takeIf { it.isNotEmpty() } ) From 5161a337692d46131b3843ab3752f2900ff3025a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20M=C3=A9a?= Date: Thu, 9 Apr 2026 18:40:40 -0400 Subject: [PATCH 2/4] fix --- .../GTFSRealTimeServiceAlertsProvider.kt | 20 +++++++++++++------ .../GTFSRealTimeVehiclePositionsProvider.kt | 3 ++- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/mtransit/android/commons/provider/serviceupdate/GTFSRealTimeServiceAlertsProvider.kt b/src/main/java/org/mtransit/android/commons/provider/serviceupdate/GTFSRealTimeServiceAlertsProvider.kt index b0e085ea..22d21218 100644 --- a/src/main/java/org/mtransit/android/commons/provider/serviceupdate/GTFSRealTimeServiceAlertsProvider.kt +++ b/src/main/java/org/mtransit/android/commons/provider/serviceupdate/GTFSRealTimeServiceAlertsProvider.kt @@ -18,8 +18,10 @@ import org.mtransit.android.commons.provider.gtfs.GtfsRealtimeExt.optRouteType import org.mtransit.android.commons.provider.gtfs.GtfsRealtimeExt.optTrip import org.mtransit.android.commons.provider.gtfs.GtfsRealtimeExt.toStringExt import org.mtransit.android.commons.provider.gtfs.agencyTag +import org.mtransit.android.commons.provider.gtfs.getPrimaryTargetUUIDs import org.mtransit.android.commons.provider.gtfs.getTargetUUIDs import org.mtransit.android.commons.provider.gtfs.getTripIds +import org.mtransit.android.commons.provider.gtfs.ignoreDirection import org.mtransit.android.commons.provider.gtfs.parseRouteId import org.mtransit.android.commons.provider.gtfs.parseStopId import org.mtransit.android.commons.provider.gtfs.parseTripId @@ -42,14 +44,20 @@ object GTFSRealTimeServiceAlertsProvider : MTLog.Loggable { } targetUUIDs to tripIds?.takeIf { it.isNotEmpty() } // trip IDs not required for GTFS Alerts }?.let { (targetUUIDs, tripIds) -> - getCached(targetUUIDs, tripIds) + getCached(filter, targetUUIDs, tripIds) } - fun GTFSRealTimeProvider.getCached(targetUUIDs: Map, tripIds: List?) = buildList { - // trip IDs preferred for all result filtered correctly - (tripIds?.let { getCachedServiceUpdatesS(targetUUIDs.keys, tripIds = it) }?.takeIf { it.isNotEmpty() } - // fallback to showing all w/o filtering trip IDs (main issue would be RDS UI showing other Direction alerts) - ?: getCachedServiceUpdatesS(targetUUIDs.keys, tripIds = null)) + fun GTFSRealTimeProvider.getCached(filter: ServiceUpdateProviderContract.Filter, targetUUIDs: Map, tripIds: List?) = buildList { + ( + // 1 - trip IDs preferred for all result filtered correctly + tripIds?.let { getCachedServiceUpdatesS(targetUUIDs.keys, tripIds = it) }?.takeIf { it.isNotEmpty() } + // 2 - fallback to: ignore TRIP IDS (outdated?) and try using primary target UUID only + // - only works if Route & Direction! provided + // -> can NOT show vehicle in wrong direction + ?: if (ignoreDirection) null + else filter.getPrimaryTargetUUIDs(this@getCached, ignoreDirection = false, includeStopTags = true)?.let { (providerTargetUUID, _) -> + getCachedServiceUpdatesS(setOf(providerTargetUUID), tripIds = null) + }?.takeIf { it.isNotEmpty() } ?.let { addAll(it) } diff --git a/src/main/java/org/mtransit/android/commons/provider/vehiclelocations/GTFSRealTimeVehiclePositionsProvider.kt b/src/main/java/org/mtransit/android/commons/provider/vehiclelocations/GTFSRealTimeVehiclePositionsProvider.kt index 6000a2e8..2339eab5 100644 --- a/src/main/java/org/mtransit/android/commons/provider/vehiclelocations/GTFSRealTimeVehiclePositionsProvider.kt +++ b/src/main/java/org/mtransit/android/commons/provider/vehiclelocations/GTFSRealTimeVehiclePositionsProvider.kt @@ -112,7 +112,8 @@ object GTFSRealTimeVehiclePositionsProvider : MTLog.Loggable { // 2 - fallback to: ignore TRIP IDS (outdated?) and try using primary target UUID only // - only works if Route & Direction! provided // -> can NOT show vehicle in wrong direction - ?: filter.getPrimaryTargetUUIDs(this@getCached, ignoreDirection = false)?.let { (providerTargetUUID, _) -> + ?: if (ignoreDirection) null + else filter.getPrimaryTargetUUIDs(this@getCached, ignoreDirection = false)?.let { (providerTargetUUID, _) -> getCachedVehicleLocationsS(setOf(providerTargetUUID), tripIds = null) }?.takeIf { it.isNotEmpty() } ) From b13406abd8a021b26a0c8d83175af6715bd3d519 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20M=C3=A9a?= Date: Thu, 9 Apr 2026 18:46:06 -0400 Subject: [PATCH 3/4] Update src/main/java/org/mtransit/android/commons/provider/serviceupdate/GTFSRealTimeServiceAlertsProvider.kt Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../provider/serviceupdate/GTFSRealTimeServiceAlertsProvider.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/mtransit/android/commons/provider/serviceupdate/GTFSRealTimeServiceAlertsProvider.kt b/src/main/java/org/mtransit/android/commons/provider/serviceupdate/GTFSRealTimeServiceAlertsProvider.kt index 22d21218..0c71dce0 100644 --- a/src/main/java/org/mtransit/android/commons/provider/serviceupdate/GTFSRealTimeServiceAlertsProvider.kt +++ b/src/main/java/org/mtransit/android/commons/provider/serviceupdate/GTFSRealTimeServiceAlertsProvider.kt @@ -53,7 +53,7 @@ object GTFSRealTimeServiceAlertsProvider : MTLog.Loggable { tripIds?.let { getCachedServiceUpdatesS(targetUUIDs.keys, tripIds = it) }?.takeIf { it.isNotEmpty() } // 2 - fallback to: ignore TRIP IDS (outdated?) and try using primary target UUID only // - only works if Route & Direction! provided - // -> can NOT show vehicle in wrong direction + // -> can NOT show service alerts for the wrong direction ?: if (ignoreDirection) null else filter.getPrimaryTargetUUIDs(this@getCached, ignoreDirection = false, includeStopTags = true)?.let { (providerTargetUUID, _) -> getCachedServiceUpdatesS(setOf(providerTargetUUID), tripIds = null) From b50b2153314c7159e7d4b35b6f736d6229b3170d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20M=C3=A9a?= Date: Thu, 9 Apr 2026 18:46:35 -0400 Subject: [PATCH 4/4] missing --- .../provider/serviceupdate/GTFSRealTimeServiceAlertsProvider.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/org/mtransit/android/commons/provider/serviceupdate/GTFSRealTimeServiceAlertsProvider.kt b/src/main/java/org/mtransit/android/commons/provider/serviceupdate/GTFSRealTimeServiceAlertsProvider.kt index 22d21218..3505e11f 100644 --- a/src/main/java/org/mtransit/android/commons/provider/serviceupdate/GTFSRealTimeServiceAlertsProvider.kt +++ b/src/main/java/org/mtransit/android/commons/provider/serviceupdate/GTFSRealTimeServiceAlertsProvider.kt @@ -58,6 +58,7 @@ object GTFSRealTimeServiceAlertsProvider : MTLog.Loggable { else filter.getPrimaryTargetUUIDs(this@getCached, ignoreDirection = false, includeStopTags = true)?.let { (providerTargetUUID, _) -> getCachedServiceUpdatesS(setOf(providerTargetUUID), tripIds = null) }?.takeIf { it.isNotEmpty() } + ) ?.let { addAll(it) }