diff --git a/src/main/java/org/mtransit/parser/DefaultAgencyTools.java b/src/main/java/org/mtransit/parser/DefaultAgencyTools.java index b23120d..923dd69 100644 --- a/src/main/java/org/mtransit/parser/DefaultAgencyTools.java +++ b/src/main/java/org/mtransit/parser/DefaultAgencyTools.java @@ -966,13 +966,22 @@ public void forgetOriginalTripId(@NotNull String gOriginalTripId) { this.tripIdToCleanupTripId.remove(gOriginalTripId); } + private boolean directionSplitterUseful = false; // opt-in feature + @Override - public boolean directionSplitterEnabled() { - return Configs.getRouteConfig().isDirectionSplitterEnabled(getTodayDateInt()); + public void setDirectionSplitterUseful(boolean enabled) { + this.directionSplitterUseful = enabled; } @Override public boolean directionSplitterEnabled(long routeId) { + if (Configs.getRouteConfig().getDirectionSplitterEnabled() == null // not set + && !Configs.getRouteConfig().getDirectionSplitterDisabledUntil().containsKey(routeId) // not disabled for this route + ) { + if (this.directionSplitterUseful) { + return true; + } + } return Configs.getRouteConfig().isDirectionSplitterEnabled(getTodayDateInt(), routeId); } diff --git a/src/main/java/org/mtransit/parser/config/gtfs/data/RouteConfig.kt b/src/main/java/org/mtransit/parser/config/gtfs/data/RouteConfig.kt index 5263b90..6fbb04f 100644 --- a/src/main/java/org/mtransit/parser/config/gtfs/data/RouteConfig.kt +++ b/src/main/java/org/mtransit/parser/config/gtfs/data/RouteConfig.kt @@ -99,7 +99,7 @@ data class RouteConfig( @SerialName("direction_headsign_ignore_trip_headsign") val directionHeadsignIgnoreTripHeadsign: Boolean = false, // OPT-IN feature @SerialName("direction_splitter_enabled") - val directionSplitterEnabled: Boolean = false, // OPT-IN feature + val directionSplitterEnabled: Boolean? = null, // OPT-IN feature @SerialName("direction_splitter_disabled_until") val directionSplitterDisabledUntil: Map = emptyMap(), // OPT-IN feature @SerialName("direction_finder_enabled") @@ -475,7 +475,7 @@ data class RouteConfig( @JvmOverloads fun isDirectionSplitterEnabled(todayDate: Int, routeId: Long? = null) = - directionSplitterEnabled && !isAllowedUntil(directionSplitterDisabledUntil[routeId], todayDate) + directionSplitterEnabled == true && !isAllowedUntil(directionSplitterDisabledUntil[routeId], todayDate) fun isDirectionIdOverrideEnabled(todayDate: Int, routeId: Long) = directionIdOverrideEnabled[routeId] == true || isAllowedUntil(directionIdOverrideEnabledUntil[routeId], todayDate) diff --git a/src/main/java/org/mtransit/parser/gtfs/GAgencyTools.java b/src/main/java/org/mtransit/parser/gtfs/GAgencyTools.java index d24a5c9..db0a7b5 100644 --- a/src/main/java/org/mtransit/parser/gtfs/GAgencyTools.java +++ b/src/main/java/org/mtransit/parser/gtfs/GAgencyTools.java @@ -202,7 +202,7 @@ public interface GAgencyTools { void forgetOriginalTripId(@NotNull String gTripOriginalId); - boolean directionSplitterEnabled(); + void setDirectionSplitterUseful(boolean enabled); boolean directionSplitterEnabled(long routeId); diff --git a/src/main/java/org/mtransit/parser/gtfs/GReader.java b/src/main/java/org/mtransit/parser/gtfs/GReader.java index a085c0e..c00953d 100644 --- a/src/main/java/org/mtransit/parser/gtfs/GReader.java +++ b/src/main/java/org/mtransit/parser/gtfs/GReader.java @@ -106,8 +106,13 @@ public static GSpec readGtfsZipFile( if (!calendarsOnly) { GTFSDataBase.setAutoCommit(false); final PreparedStatement insertTripsPrepared = USE_PREPARED_STATEMENT ? GTFSDataBase.prepareInsertTrip(agencyTools.allowDuplicateKeyError()) : null; - readFile(gtfsDir, GTrip.FILENAME, true, line -> - processTrip(agencyTools, gSpec, line, insertTripsPrepared, skipDataCleanup) + readFile(gtfsDir, GTrip.FILENAME, true, + line -> processTrip(agencyTools, gSpec, line, insertTripsPrepared, skipDataCleanup), + columnNames -> { + if (!columnNames.contains(GTrip.DIRECTION_ID)) { + agencyTools.setDirectionSplitterUseful(true); // direction IDs not provided + } + } ); if (insertTripsPrepared != null) { GTFSDataBase.executePreparedStatement(insertTripsPrepared); diff --git a/src/main/java/org/mtransit/parser/gtfs/data/GTrip.kt b/src/main/java/org/mtransit/parser/gtfs/data/GTrip.kt index 9fdd85b..9cd08bc 100644 --- a/src/main/java/org/mtransit/parser/gtfs/data/GTrip.kt +++ b/src/main/java/org/mtransit/parser/gtfs/data/GTrip.kt @@ -136,7 +136,7 @@ data class GTrip( internal const val SERVICE_ID = "service_id" private const val TRIP_HEADSIGN = "trip_headsign" private const val TRIP_SHORT_NAME = "trip_short_name" - private const val DIRECTION_ID = "direction_id" + internal const val DIRECTION_ID = "direction_id" private const val BLOCK_ID = "block_id" private const val SHAPE_ID = "shape_id" private const val WHEELCHAIR_ACCESSIBLE = "wheelchair_accessible"