diff --git a/src/main/java/org/mtransit/android/commons/provider/GTFSRealTimeProvider.java b/src/main/java/org/mtransit/android/commons/provider/GTFSRealTimeProvider.java index 2516d7dd..69b10a60 100644 --- a/src/main/java/org/mtransit/android/commons/provider/GTFSRealTimeProvider.java +++ b/src/main/java/org/mtransit/android/commons/provider/GTFSRealTimeProvider.java @@ -313,6 +313,20 @@ private static String getROUTE_ID_CLEANUP_REGEX(@NonNull Context context) { return routeIdCleanupRegex; } + @Nullable + private static String tripIdCleanupRegex = null; + + /** + * Override if multiple {@link GTFSRealTimeProvider} implementations in same app. + */ + @NonNull + private static String getTRIP_ID_CLEANUP_REGEX(@NonNull Context context) { + if (tripIdCleanupRegex == null) { + tripIdCleanupRegex = context.getResources().getString(R.string.gtfs_rts_trip_id_cleanup_regex); + } + return tripIdCleanupRegex; + } + @Nullable private static String stopIdCleanupRegex = null; @@ -1041,6 +1055,20 @@ private Pattern getRouteIdCleanupPattern(@NonNull Context context) { return this.routeIdCleanupPattern; } + @Nullable + private Pattern tripIdCleanupPattern = null; + + private boolean tripIdCleanupPatternSet = false; + + @Nullable + private Pattern getTripIdCleanupPattern(@NonNull Context context) { + if (this.tripIdCleanupPattern == null && !tripIdCleanupPatternSet) { + this.tripIdCleanupPattern = GTFSCommons.makeIdCleanupPattern(getTRIP_ID_CLEANUP_REGEX(context)); + this.tripIdCleanupPatternSet = true; + } + return this.tripIdCleanupPattern; + } + @Nullable private Pattern stopIdCleanupPattern = null; @@ -1074,7 +1102,11 @@ private String parseTargetUUID(@NonNull Context context, String agencyTag, @NonN } else if (gEntitySelector.hasAgencyId()) { return getAgencyTargetUUID(agencyTag); } else if (gEntitySelector.hasTrip()) { - MTLog.w(this, "parseTargetUUID() > unsupported TRIP entity selector: %s (IGNORED)", GtfsRealtimeExt.toStringExt(gEntitySelector.getTrip())); + final String tripIdHash = GtfsRealtimeExt.getTripIdHash(gEntitySelector, getTripIdCleanupPattern(context)); + MTLog.w(this, "parseTargetUUID() > unsupported TRIP entity selector: %s (%s) (IGNORED)", + GtfsRealtimeExt.toStringExt(gEntitySelector.getTrip()), + tripIdHash + ); return null; } MTLog.w(this, "parseTargetUUID() > unexpected entity selector: %s (IGNORED)", GtfsRealtimeExt.toStringExt(gEntitySelector)); diff --git a/src/main/java/org/mtransit/android/commons/provider/gtfs/GtfsRealtimeExt.kt b/src/main/java/org/mtransit/android/commons/provider/gtfs/GtfsRealtimeExt.kt index 16a710d2..4383ce77 100644 --- a/src/main/java/org/mtransit/android/commons/provider/gtfs/GtfsRealtimeExt.kt +++ b/src/main/java/org/mtransit/android/commons/provider/gtfs/GtfsRealtimeExt.kt @@ -60,6 +60,14 @@ object GtfsRealtimeExt { return this.routeId.originalIdToHash(idCleanupRegex) } + @JvmStatic + fun GtfsRealtime.EntitySelector.getTripIdHash(idCleanupRegex: Pattern?): String { + if (!FeatureFlags.F_USE_GTFS_ID_HASH_INT) { + return this.trip.tripId + } + return this.trip.tripId.originalIdToHash(idCleanupRegex) + } + @JvmStatic fun GtfsRealtime.EntitySelector.getStopIdHash(idCleanupRegex: Pattern?): String { if (!FeatureFlags.F_USE_GTFS_ID_HASH_INT) { diff --git a/src/main/res/values/gtfs_rts_values.xml b/src/main/res/values/gtfs_rts_values.xml index 3890b40c..c0b0c1a4 100644 --- a/src/main/res/values/gtfs_rts_values.xml +++ b/src/main/res/values/gtfs_rts_values.xml @@ -17,6 +17,7 @@ + -1 -1