From 22cdf8f6f51ae94e12ee593330be1c4ad62497f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20M=C3=A9a?= Date: Thu, 15 Jan 2026 10:02:14 -0500 Subject: [PATCH 1/5] Pre-vehicle cleanup --- .../org/mtransit/commons/CollectionExt.kt | 3 + .../java/org/mtransit/commons/Constants.kt | 4 +- .../java/org/mtransit/commons/GTFSCommons.kt | 68 +++---------------- .../org/mtransit/commons/StringsCleaner.kt | 6 +- 4 files changed, 16 insertions(+), 65 deletions(-) diff --git a/src/main/java/org/mtransit/commons/CollectionExt.kt b/src/main/java/org/mtransit/commons/CollectionExt.kt index 8f97507..1212632 100644 --- a/src/main/java/org/mtransit/commons/CollectionExt.kt +++ b/src/main/java/org/mtransit/commons/CollectionExt.kt @@ -58,3 +58,6 @@ inline fun Iterable.dropWhile(minSize: Int = 0, predicate: (T) -> Boolean } return list } + +inline fun Map.mapNotNullToMap(transform: (Map.Entry) -> Pair?): Map = + this.mapNotNull(transform).toMap() diff --git a/src/main/java/org/mtransit/commons/Constants.kt b/src/main/java/org/mtransit/commons/Constants.kt index 9117990..85f88ad 100644 --- a/src/main/java/org/mtransit/commons/Constants.kt +++ b/src/main/java/org/mtransit/commons/Constants.kt @@ -3,8 +3,8 @@ package org.mtransit.commons @Suppress("unused") object Constants { - // const val DEBUG = true // DEBUG - const val DEBUG = false + const val DEBUG = true // DEBUG + // const val DEBUG = false const val NEW_LINE = '\n' const val SPACE = ' ' diff --git a/src/main/java/org/mtransit/commons/GTFSCommons.kt b/src/main/java/org/mtransit/commons/GTFSCommons.kt index 471f839..fc24074 100644 --- a/src/main/java/org/mtransit/commons/GTFSCommons.kt +++ b/src/main/java/org/mtransit/commons/GTFSCommons.kt @@ -63,21 +63,6 @@ object GTFSCommons { @JvmField val T_DIRECTION_STRINGS_COLUMN_IDX = intArrayOf(2) - @Deprecated("use T_DIRECTION instead", ReplaceWith("T_DIRECTION")) - const val T_TRIP = T_DIRECTION - - @Deprecated("use T_DIRECTION_K_ID instead", ReplaceWith("T_DIRECTION_K_ID")) - const val T_TRIP_K_ID = T_DIRECTION_K_ID - - @Deprecated("use T_DIRECTION_K_HEADSIGN_TYPE instead", ReplaceWith("T_DIRECTION_K_HEADSIGN_TYPE")) - const val T_TRIP_K_HEADSIGN_TYPE = T_DIRECTION_K_HEADSIGN_TYPE - - @Deprecated("use T_DIRECTION_K_HEADSIGN_VALUE instead", ReplaceWith("T_DIRECTION_K_HEADSIGN_VALUE")) - const val T_TRIP_K_HEADSIGN_VALUE = T_DIRECTION_K_HEADSIGN_VALUE - - @Deprecated("use T_DIRECTION_K_ROUTE_ID instead", ReplaceWith("T_DIRECTION_K_ROUTE_ID")) - const val T_TRIP_K_ROUTE_ID = T_DIRECTION_K_ROUTE_ID - @JvmStatic val T_DIRECTION_SQL_CREATE = SQLCreateBuilder.getNew(T_DIRECTION).apply { appendColumn(T_DIRECTION_K_ID, SQLUtils.INT_PK) @@ -87,10 +72,6 @@ object GTFSCommons { appendForeignKey(T_DIRECTION_K_ROUTE_ID, T_ROUTE, T_ROUTE_K_ID) }.build() - @Deprecated("use T_DIRECTION_SQL_CREATE instead", ReplaceWith("T_DIRECTION_SQL_CREATE")) - @JvmStatic - val T_TRIP_SQL_CREATE = T_DIRECTION_SQL_CREATE - @JvmStatic val T_DIRECTION_SQL_INSERT = SQLInsertBuilder.getNew(T_DIRECTION).apply { appendColumn(T_DIRECTION_K_ID) @@ -99,17 +80,9 @@ object GTFSCommons { appendColumn(T_DIRECTION_K_ROUTE_ID) }.build() - @Deprecated("use T_DIRECTION_SQL_INSERT instead", ReplaceWith("T_DIRECTION_SQL_INSERT")) - @JvmStatic - val T_TRIP_SQL_INSERT = T_DIRECTION_SQL_INSERT - @JvmStatic val T_DIRECTION_SQL_DROP = SQLUtils.getSQLDropIfExistsQuery(T_DIRECTION) - @Deprecated("use T_DIRECTION_SQL_DROP instead", ReplaceWith("T_DIRECTION_SQL_DROP")) - @JvmStatic - val T_TRIP_SQL_DROP = T_DIRECTION_SQL_DROP - // endregion Direction // region Trip IDs @@ -185,24 +158,6 @@ object GTFSCommons { const val T_DIRECTION_STOPS_K_STOP_SEQUENCE = "stop_sequence" const val T_DIRECTION_STOPS_K_NO_PICKUP = "decent_only" - @Deprecated("use T_DIRECTION_STOPS instead", ReplaceWith("T_DIRECTION_STOPS")) - const val T_TRIP_STOPS = T_DIRECTION_STOPS - - @Deprecated("use T_DIRECTION_STOPS_K_ID instead", ReplaceWith("T_DIRECTION_STOPS_K_ID")) - const val T_TRIP_STOPS_K_ID = T_DIRECTION_STOPS_K_ID - - @Deprecated("use T_DIRECTION_STOPS_K_DIRECTION_ID instead", ReplaceWith("T_DIRECTION_STOPS_K_DIRECTION_ID")) - const val T_TRIP_STOPS_K_TRIP_ID = T_DIRECTION_STOPS_K_DIRECTION_ID - - @Deprecated("use T_DIRECTION_STOPS_K_STOP_ID instead", ReplaceWith("T_DIRECTION_STOPS_K_STOP_ID")) - const val T_TRIP_STOPS_K_STOP_ID = T_DIRECTION_STOPS_K_STOP_ID - - @Deprecated("use T_DIRECTION_STOPS_K_STOP_SEQUENCE instead", ReplaceWith("T_DIRECTION_STOPS_K_STOP_SEQUENCE")) - const val T_TRIP_STOPS_K_STOP_SEQUENCE = T_DIRECTION_STOPS_K_STOP_SEQUENCE - - @Deprecated("use T_DIRECTION_STOPS_K_NO_PICKUP instead", ReplaceWith("T_DIRECTION_STOPS_K_NO_PICKUP")) - const val T_TRIP_STOPS_K_NO_PICKUP = T_DIRECTION_STOPS_K_NO_PICKUP - @JvmStatic val T_DIRECTION_STOPS_SQL_CREATE = SQLCreateBuilder.getNew(T_DIRECTION_STOPS).apply { appendColumn(T_DIRECTION_STOPS_K_ID, SQLUtils.INT_PK_AUTO) @@ -214,10 +169,6 @@ object GTFSCommons { appendForeignKey(T_DIRECTION_STOPS_K_STOP_ID, T_STOP, T_STOP_K_ID) }.build() - @Deprecated("use T_DIRECTION_STOPS_SQL_CREATE instead", ReplaceWith("T_DIRECTION_STOPS_SQL_CREATE")) - @JvmStatic - val T_TRIP_STOPS_SQL_CREATE = T_DIRECTION_STOPS_SQL_CREATE - @JvmStatic val T_DIRECTION_STOPS_SQL_INSERT = SQLInsertBuilder.getNew(T_DIRECTION_STOPS).apply { appendColumn(T_DIRECTION_STOPS_K_DIRECTION_ID) @@ -226,17 +177,9 @@ object GTFSCommons { appendColumn(T_DIRECTION_STOPS_K_NO_PICKUP) }.build() - @Deprecated("use T_DIRECTION_STOPS_SQL_INSERT instead", ReplaceWith("T_DIRECTION_STOPS_SQL_INSERT")) - @JvmStatic - val T_TRIP_STOPS_SQL_INSERT = T_DIRECTION_STOPS_SQL_INSERT - @JvmStatic val T_DIRECTION_STOPS_SQL_DROP = SQLUtils.getSQLDropIfExistsQuery(T_DIRECTION_STOPS) - @Deprecated("use T_DIRECTION_STOPS_SQL_DROP instead", ReplaceWith("T_DIRECTION_STOPS_SQL_DROP")) - @JvmStatic - val T_TRIP_STOPS_SQL_DROP = T_DIRECTION_STOPS_SQL_DROP - // endregion Direction Stops // region Service IDs @@ -335,10 +278,15 @@ object GTFSCommons { @JvmStatic @JvmOverloads - fun stringIdToHash(originalId: String, idCleanupRegex: Pattern? = null): Int { - return CleanUtils.cleanMergedID( + fun originalIdToId(originalId: String, idCleanupRegex: Pattern? = null) = + CleanUtils.cleanMergedID( cleanOriginalId(originalId, idCleanupRegex) - ).hashCode() + ) + + @JvmStatic + @JvmOverloads + fun stringIdToHash(originalId: String, idCleanupRegex: Pattern? = null): Int { + return originalIdToId(originalId, idCleanupRegex).hashCode() } @JvmStatic diff --git a/src/main/java/org/mtransit/commons/StringsCleaner.kt b/src/main/java/org/mtransit/commons/StringsCleaner.kt index 74abe33..f747d05 100644 --- a/src/main/java/org/mtransit/commons/StringsCleaner.kt +++ b/src/main/java/org/mtransit/commons/StringsCleaner.kt @@ -20,10 +20,10 @@ object StringsCleaner { ): String { var tripHeadsign = originalTripHeadsign if (languages?.contains(Locale.ENGLISH) == true) { - tripHeadsign = if (removeVia) { - CleanUtils.keepToAndRemoveVia(tripHeadsign) + if (removeVia) { + tripHeadsign = CleanUtils.keepToAndRemoveVia(tripHeadsign) } else { - CleanUtils.keepTo(tripHeadsign) + tripHeadsign = CleanUtils.keepTo(tripHeadsign) } } if (languages?.contains(Locale.FRENCH) == true) { From ec244410c0353d2b9cad90b10120ba3bcc990b67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20M=C3=A9a?= Date: Thu, 15 Jan 2026 10:03:11 -0500 Subject: [PATCH 2/5] cleanup --- src/main/java/org/mtransit/commons/Constants.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/mtransit/commons/Constants.kt b/src/main/java/org/mtransit/commons/Constants.kt index 85f88ad..9117990 100644 --- a/src/main/java/org/mtransit/commons/Constants.kt +++ b/src/main/java/org/mtransit/commons/Constants.kt @@ -3,8 +3,8 @@ package org.mtransit.commons @Suppress("unused") object Constants { - const val DEBUG = true // DEBUG - // const val DEBUG = false + // const val DEBUG = true // DEBUG + const val DEBUG = false const val NEW_LINE = '\n' const val SPACE = ' ' From 8d5a8f134beba1bed33556d94a35fb26c8371be2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20M=C3=A9a?= Date: Thu, 15 Jan 2026 10:12:34 -0500 Subject: [PATCH 3/5] ff --- src/main/java/org/mtransit/commons/FeatureFlags.kt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/org/mtransit/commons/FeatureFlags.kt b/src/main/java/org/mtransit/commons/FeatureFlags.kt index adcb5f7..e2d499f 100644 --- a/src/main/java/org/mtransit/commons/FeatureFlags.kt +++ b/src/main/java/org/mtransit/commons/FeatureFlags.kt @@ -31,11 +31,17 @@ object FeatureFlags { const val F_EXPORT_SERVICE_ID_INTS = false // const val F_EXPORT_SERVICE_ID_INTS = true // WIP // only marginal gains in APK size because of Android optimizations + const val F_EXPORT_FLATTEN_SERVICE_DATES = false + // const val F_EXPORT_FLATTEN_SERVICE_DATES = true // WIP + const val F_EXPORT_STRINGS = false // const val F_EXPORT_STRINGS = true // WIP // only marginal gains in APK size because of Android optimizations // region Schedule + const val F_EXPORT_SCHEDULE_SORTED_BY_ROUTE_DIRECTION = false + // const val F_EXPORT_SCHEDULE_SORTED_BY_ROUTE_DIRECTION = true // WIP + const val F_EXPORT_SCHEDULE_STRINGS = false // const val F_EXPORT_SCHEDULE_STRINGS = true // WIP From 2021566cbb99c8e49a4b6a49cbf4f10820601b7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20M=C3=A9a?= Date: Thu, 15 Jan 2026 11:30:12 -0500 Subject: [PATCH 4/5] trip --- .../java/org/mtransit/commons/GTFSCommons.kt | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/src/main/java/org/mtransit/commons/GTFSCommons.kt b/src/main/java/org/mtransit/commons/GTFSCommons.kt index fc24074..ada5fef 100644 --- a/src/main/java/org/mtransit/commons/GTFSCommons.kt +++ b/src/main/java/org/mtransit/commons/GTFSCommons.kt @@ -85,6 +85,70 @@ object GTFSCommons { // endregion Direction + // region Trip + + const val T_TRIP = "path" // do not change to avoid breaking compat w/ old modules + const val T_TRIP_K_ROUTE_ID = "route_id" + private const val T_TRIP_K_SERVICE_ID = "service_id" + private const val T_TRIP_K_SERVICE_ID_INT = "service_id_int" + + @JvmStatic + val T_TRIP_K_SERVICE_ID_OR_INT = if (FeatureFlags.F_EXPORT_SERVICE_ID_INTS) T_TRIP_K_SERVICE_ID_INT else T_TRIP_K_SERVICE_ID + private const val T_TRIP_K_TRIP_ID = "trip_id" + private const val T_TRIP_K_TRIP_ID_INT = "trip_id_int" + + @JvmStatic + val T_TRIP_K_TRIP_ID_OR_INT = if (FeatureFlags.F_EXPORT_TRIP_ID_INTS) T_TRIP_K_TRIP_ID_INT else T_TRIP_K_TRIP_ID + const val T_TRIP_K_DIRECTION_ID = "direction_id" + + const val T_TRIP_SAME_COLUMNS_COUNT = 3 + const val T_TRIP_OTHER_COLUMNS_COUNT = 1 + + @JvmStatic + val T_TRIP_SQL_CREATE = SQLCreateBuilder.getNew(T_TRIP).apply { + if (FeatureFlags.F_EXPORT_TRIP_ID_INTS) { + appendColumn(T_TRIP_K_TRIP_ID_INT, SQLUtils.INT) + } else { + appendColumn(T_TRIP_K_TRIP_ID, SQLUtils.TXT) + } + appendColumn(T_TRIP_K_ROUTE_ID, SQLUtils.INT) + if (FeatureFlags.F_EXPORT_SERVICE_ID_INTS) { + appendColumn(T_TRIP_K_SERVICE_ID_INT, SQLUtils.INT) + } else { + appendColumn(T_TRIP_K_SERVICE_ID, SQLUtils.TXT) + } + appendColumn(T_TRIP_K_DIRECTION_ID, SQLUtils.INT) + appendForeignKey(T_TRIP_K_ROUTE_ID, T_ROUTE, T_ROUTE_K_ID) + appendForeignKey(T_TRIP_K_DIRECTION_ID, T_DIRECTION, T_DIRECTION_K_ID) + if (FeatureFlags.F_EXPORT_TRIP_ID_INTS) { + appendForeignKey(T_TRIP_K_TRIP_ID_INT, T_TRIP_IDS, T_TRIP_IDS_K_ID_INT) + } + if (FeatureFlags.F_EXPORT_SERVICE_ID_INTS) { + appendForeignKey(T_TRIP_K_SERVICE_ID_INT, T_SERVICE_IDS, T_SERVICE_IDS_K_ID_INT) + } + }.build() + + @JvmStatic + val T_TRIP_SQL_INSERT = SQLInsertBuilder.getNew(T_TRIP).apply { + appendColumn(T_TRIP_K_ROUTE_ID) + appendColumn(T_TRIP_K_DIRECTION_ID) + if (FeatureFlags.F_EXPORT_SERVICE_ID_INTS) { + appendColumn(T_TRIP_K_SERVICE_ID_INT) + } else { + appendColumn(T_TRIP_K_SERVICE_ID) + } + if (FeatureFlags.F_EXPORT_TRIP_ID_INTS) { + appendColumn(T_TRIP_K_TRIP_ID_INT) + } else { + appendColumn(T_TRIP_K_TRIP_ID) + } + }.build() + + @JvmStatic + val T_TRIP_SQL_DROP = SQLUtils.getSQLDropIfExistsQuery(T_TRIP) + + // endregion Trip + // region Trip IDs const val T_TRIP_IDS = "trip_ids" @@ -213,6 +277,12 @@ object GTFSCommons { const val T_SERVICE_DATES_K_DATE = "date" const val T_SERVICE_DATES_K_EXCEPTION_TYPE = "exception_type" + @JvmStatic + val T_SERVICE_DATES_SAME_COLUMNS_COUNT = if (FeatureFlags.F_EXPORT_FLATTEN_SERVICE_DATES) 1 else 0 + + @JvmStatic + val T_SERVICE_DATES_OTHER_COLUMNS_COUNT = if (FeatureFlags.F_EXPORT_FLATTEN_SERVICE_DATES) 2 else 0 + // https://gtfs.org/documentation/schedule/reference/#calendar_datestxt const val EXCEPTION_TYPE_DEFAULT = 0 // default schedule // added by MT const val EXCEPTION_TYPE_ADDED = 1 From 3d6e89b89d02d34ccc641a193c3f33098f905b64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20M=C3=A9a?= Date: Fri, 16 Jan 2026 08:35:19 -0500 Subject: [PATCH 5/5] PR comments --- src/main/java/org/mtransit/commons/GTFSCommons.kt | 12 ++---------- src/main/java/org/mtransit/commons/StringsCleaner.kt | 6 +++--- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/mtransit/commons/GTFSCommons.kt b/src/main/java/org/mtransit/commons/GTFSCommons.kt index ada5fef..3b42ad1 100644 --- a/src/main/java/org/mtransit/commons/GTFSCommons.kt +++ b/src/main/java/org/mtransit/commons/GTFSCommons.kt @@ -132,16 +132,8 @@ object GTFSCommons { val T_TRIP_SQL_INSERT = SQLInsertBuilder.getNew(T_TRIP).apply { appendColumn(T_TRIP_K_ROUTE_ID) appendColumn(T_TRIP_K_DIRECTION_ID) - if (FeatureFlags.F_EXPORT_SERVICE_ID_INTS) { - appendColumn(T_TRIP_K_SERVICE_ID_INT) - } else { - appendColumn(T_TRIP_K_SERVICE_ID) - } - if (FeatureFlags.F_EXPORT_TRIP_ID_INTS) { - appendColumn(T_TRIP_K_TRIP_ID_INT) - } else { - appendColumn(T_TRIP_K_TRIP_ID) - } + appendColumn(T_TRIP_K_SERVICE_ID_OR_INT) + appendColumn(T_TRIP_K_TRIP_ID_OR_INT) }.build() @JvmStatic diff --git a/src/main/java/org/mtransit/commons/StringsCleaner.kt b/src/main/java/org/mtransit/commons/StringsCleaner.kt index f747d05..74abe33 100644 --- a/src/main/java/org/mtransit/commons/StringsCleaner.kt +++ b/src/main/java/org/mtransit/commons/StringsCleaner.kt @@ -20,10 +20,10 @@ object StringsCleaner { ): String { var tripHeadsign = originalTripHeadsign if (languages?.contains(Locale.ENGLISH) == true) { - if (removeVia) { - tripHeadsign = CleanUtils.keepToAndRemoveVia(tripHeadsign) + tripHeadsign = if (removeVia) { + CleanUtils.keepToAndRemoveVia(tripHeadsign) } else { - tripHeadsign = CleanUtils.keepTo(tripHeadsign) + CleanUtils.keepTo(tripHeadsign) } } if (languages?.contains(Locale.FRENCH) == true) {