Skip to content

Commit 1ffe9f4

Browse files
authored
Schedule.Timestamp KT ext (#191)
1 parent dd6d1f9 commit 1ffe9f4

6 files changed

Lines changed: 55 additions & 45 deletions

File tree

src/main/java/org/mtransit/android/commons/data/Schedule.java

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -469,7 +469,7 @@ public String getLogTag() {
469469
private String tripId = null; // cleaned trip ID (string) // initial used to store trip id INT but replaced after
470470
private int stopSequence = -1;
471471
@Nullable
472-
private Long arrivalDiffMs = null;
472+
private Long departureArrivalDiffMs = null;
473473
private long originalArrivalDelayMs = 0L;
474474

475475
@VisibleForTesting
@@ -505,28 +505,28 @@ public void setOriginalDepartureDelayMs(long originalDepartureDelayMs) {
505505
}
506506

507507
public long getArrivalT() {
508-
return getDepartureT() - (arrivalDiffMs == null ? 0L : arrivalDiffMs);
508+
return getDepartureT() - (departureArrivalDiffMs == null ? 0L : departureArrivalDiffMs);
509509
}
510510

511511
@Nullable
512512
public Long getArrivalTIfDifferent() {
513-
return arrivalDiffMs == null ? null : getDepartureT() - arrivalDiffMs;
513+
return departureArrivalDiffMs == null ? null : getDepartureT() - departureArrivalDiffMs;
514514
}
515515

516516
public void setArrivalT(long arrivalT) {
517-
setArrivalDiffMs(getDepartureT() - arrivalT);
517+
setDepartureArrivalDiffMs(getDepartureT() - arrivalT);
518518
}
519519

520-
public void setArrivalDiffMs(@Nullable Long arrivalDiffMs) {
521-
if (arrivalDiffMs != null && arrivalDiffMs == 0L) {
522-
arrivalDiffMs = null;
520+
private void setDepartureArrivalDiffMs(@Nullable Long departureArrivalDiffMs) {
521+
if (departureArrivalDiffMs != null && departureArrivalDiffMs == 0L) {
522+
departureArrivalDiffMs = null;
523523
}
524-
this.arrivalDiffMs = arrivalDiffMs;
524+
this.departureArrivalDiffMs = departureArrivalDiffMs;
525525
}
526526

527527
@Nullable
528-
public Long getArrivalDiffMs() {
529-
return arrivalDiffMs;
528+
protected Long getDepartureArrivalDiffMs() {
529+
return departureArrivalDiffMs;
530530
}
531531

532532
public long getOriginalArrivalDelayMs() {
@@ -730,7 +730,7 @@ public boolean equals(Object o) {
730730
if (!Objects.equals(cancelled, timestamp.cancelled)) return false;
731731
if (!Objects.equals(tripId, timestamp.tripId)) return false;
732732
if (stopSequence != timestamp.stopSequence) return false;
733-
if (!Objects.equals(arrivalDiffMs, timestamp.arrivalDiffMs)) return false;
733+
if (!Objects.equals(departureArrivalDiffMs, timestamp.departureArrivalDiffMs)) return false;
734734
if (originalArrivalDelayMs != timestamp.originalArrivalDelayMs) return false;
735735
// if (!Objects.equals(heading, timestamp.heading)) return false; // LAZY
736736
return true;
@@ -749,7 +749,7 @@ public int hashCode() {
749749
result = 31 * result + (cancelled != null ? cancelled.hashCode() : 0);
750750
result = 31 * result + (tripId != null ? tripId.hashCode() : 0);
751751
result = 31 * result + stopSequence;
752-
result = 31 * result + (arrivalDiffMs != null ? arrivalDiffMs.hashCode() : 0);
752+
result = 31 * result + (departureArrivalDiffMs != null ? departureArrivalDiffMs.hashCode() : 0);
753753
result = 31 * result + Long.hashCode(originalArrivalDelayMs);
754754
// result = 31 * result + (heading != null ? heading.hashCode() : 0); // LAZY
755755
return result;
@@ -764,8 +764,8 @@ public String toString() {
764764
if (this.originalDepartureDelayMs != 0L) {
765765
sb.append(", oDd:").append(this.originalDepartureDelayMs);
766766
}
767-
if (arrivalDiffMs != null) {
768-
sb.append(", aD:").append(arrivalDiffMs);
767+
if (departureArrivalDiffMs != null) {
768+
sb.append(", aD:").append(departureArrivalDiffMs);
769769
}
770770
if (this.originalArrivalDelayMs != 0L) {
771771
sb.append(", oAd:").append(this.originalArrivalDelayMs);
@@ -803,7 +803,7 @@ public String toString() {
803803

804804
private static final String JSON_DEPARTURE = "t";
805805
private static final String JSON_ORIGINAL_DEPARTURE_DELAY = "tOD";
806-
private static final String JSON_ARRIVAL_DIFF = "tDiffA";
806+
private static final String JSON_DEPARTURE_ARRIVAL_DIFF = "tDiffA";
807807
private static final String JSON_ORIGINAL_ARRIVAL_DELAY = "tOA";
808808
private static final String JSON_TRIP_ID = "trip_id";
809809
private static final String JSON_STOP_SEQUENCE = "stop_seq";
@@ -824,8 +824,8 @@ static Timestamp parseJSON(@NonNull JSONObject jTimestamp) {
824824
if (originalDepartureDelayMs != 0L) {
825825
timestamp.setOriginalDepartureDelayMs(originalDepartureDelayMs);
826826
}
827-
if (jTimestamp.has(JSON_ARRIVAL_DIFF)) {
828-
timestamp.setArrivalDiffMs(jTimestamp.getLong(JSON_ARRIVAL_DIFF));
827+
if (jTimestamp.has(JSON_DEPARTURE_ARRIVAL_DIFF)) {
828+
timestamp.setDepartureArrivalDiffMs(jTimestamp.getLong(JSON_DEPARTURE_ARRIVAL_DIFF));
829829
}
830830
final long originalArrivalDelayMs = jTimestamp.optLong(JSON_ORIGINAL_ARRIVAL_DELAY, 0L);
831831
if (originalArrivalDelayMs != 0L) {
@@ -882,8 +882,8 @@ public static JSONObject toJSON(@NonNull Timestamp timestamp) {
882882
if (timestamp.originalDepartureDelayMs != 0L) {
883883
jTimestamp.put(JSON_ORIGINAL_DEPARTURE_DELAY, timestamp.originalDepartureDelayMs);
884884
}
885-
if (timestamp.arrivalDiffMs != null) {
886-
jTimestamp.put(JSON_ARRIVAL_DIFF, timestamp.arrivalDiffMs);
885+
if (timestamp.departureArrivalDiffMs != null) {
886+
jTimestamp.put(JSON_DEPARTURE_ARRIVAL_DIFF, timestamp.departureArrivalDiffMs);
887887
}
888888
if (timestamp.originalArrivalDelayMs != 0L) {
889889
jTimestamp.put(JSON_ORIGINAL_ARRIVAL_DELAY, timestamp.originalArrivalDelayMs);

src/main/java/org/mtransit/android/commons/data/ScheduleExt.kt

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,11 @@ var Schedule.Timestamp.originalDepartureDelay: Duration
122122
originalDepartureDelayMs = value.inWholeMilliseconds
123123
}
124124

125-
val Schedule.Timestamp.originalDeparture get() = departure - originalDepartureDelay
125+
fun Schedule.Timestamp.departureMs(hideRealTime: Boolean) = if (hideRealTime) originalDepartureMs else departureT
126+
fun Schedule.Timestamp.arrivalMs(hideRealTime: Boolean) = if (hideRealTime) originalArrivalMs else arrivalT
127+
128+
val Schedule.Timestamp.originalDepartureMs get() = departureT - originalDepartureDelayMs
129+
val Schedule.Timestamp.originalDeparture get() = originalDepartureMs.millisToInstant()
126130

127131
/**
128132
* It's better to be early at the stop, than late and miss the vehicle departure -> truncate (floor by) to early w/ precision
@@ -152,7 +156,7 @@ fun Schedule.Timestamp.updateForRealTime(newArrival: Instant?, newDeparture: Ins
152156
newArrival?.let { updateArrivalForRealTime(it) }
153157
}
154158

155-
val Schedule.Timestamp.arrivalDiff get() = this.arrivalDiffMs?.milliseconds?.coerceAtLeast(Duration.ZERO) ?: Duration.ZERO
159+
val Schedule.Timestamp.departureArrivalDiff get() = this.departureArrivalDiffMs?.coerceAtLeast(0L)?.milliseconds ?: Duration.ZERO
156160

157161
val Schedule.Timestamp.arrival get() = arrivalT.millisToInstant()
158162

@@ -162,7 +166,13 @@ var Schedule.Timestamp.originalArrivalDelay: Duration
162166
originalArrivalDelayMs = value.inWholeMilliseconds
163167
}
164168

165-
val Schedule.Timestamp.originalArrival get() = arrival - originalArrivalDelay
169+
val Schedule.Timestamp.originalArrivalMs get() = arrivalT - originalArrivalDelayMs
170+
val Schedule.Timestamp.originalArrival get() = originalArrivalMs.millisToInstant()
171+
172+
val Schedule.Timestamp.originalDepartureArrivalDiffMs get() = (originalDepartureMs - originalArrivalMs).coerceAtLeast(0L)
173+
val Schedule.Timestamp.originalDepartureArrivalDiff get() = originalDepartureArrivalDiffMs.milliseconds
174+
175+
fun Schedule.Timestamp.getDepartureArrivalDiff(hideRealTime: Boolean) = if (hideRealTime) originalDepartureArrivalDiff else departureArrivalDiff
166176

167177
private fun computeInstant(
168178
initialInstant: Instant,

src/main/java/org/mtransit/android/commons/provider/gtfs/GTFSStatusProvider.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,7 @@ private static String getSTOP_SCHEDULE_RAW_FILE_FORMAT(@NonNull Context context)
375375
private static final int GTFS_SCHEDULE_STOP_FILE_COL_DIRECTION_IDX;
376376
//
377377
private static final int GTFS_SCHEDULE_STOP_FILE_COL_DEPARTURE_IDX;
378-
private static final int GTFS_SCHEDULE_STOP_FILE_COL_ARRIVAL_DIFF_IDX;
378+
private static final int GTFS_SCHEDULE_STOP_FILE_COL_DEPARTURE_ARRIVAL_DIFF_IDX;
379379
private static final int GTFS_SCHEDULE_STOP_FILE_COL_TRIP_ID_IDX;
380380
private static final int GTFS_SCHEDULE_STOP_FILE_COL_STOP_SEQUENCE_IDX;
381381
private static final int GTFS_SCHEDULE_STOP_FILE_COL_HEADSIGN_TYPE_IDX;
@@ -398,13 +398,13 @@ private static String getSTOP_SCHEDULE_RAW_FILE_FORMAT(@NonNull Context context)
398398
GTFS_SCHEDULE_STOP_FILE_COL_DEPARTURE_IDX = ++idx; // 2
399399
if (FeatureFlags.F_EXPORT_TRIP_ID) {
400400
if (FeatureFlags.F_EXPORT_ARRIVAL_W_TRIP_ID) {
401-
GTFS_SCHEDULE_STOP_FILE_COL_ARRIVAL_DIFF_IDX = ++idx;
401+
GTFS_SCHEDULE_STOP_FILE_COL_DEPARTURE_ARRIVAL_DIFF_IDX = ++idx;
402402
} else {
403-
GTFS_SCHEDULE_STOP_FILE_COL_ARRIVAL_DIFF_IDX = -1;
403+
GTFS_SCHEDULE_STOP_FILE_COL_DEPARTURE_ARRIVAL_DIFF_IDX = -1;
404404
}
405405
GTFS_SCHEDULE_STOP_FILE_COL_TRIP_ID_IDX = ++idx;
406406
} else {
407-
GTFS_SCHEDULE_STOP_FILE_COL_ARRIVAL_DIFF_IDX = -1;
407+
GTFS_SCHEDULE_STOP_FILE_COL_DEPARTURE_ARRIVAL_DIFF_IDX = -1;
408408
GTFS_SCHEDULE_STOP_FILE_COL_TRIP_ID_IDX = -1;
409409
}
410410
if (FeatureFlags.F_EXPORT_STOP_SEQUENCE) {
@@ -451,8 +451,8 @@ static Set<Schedule.Timestamp> findScheduleList(
451451
long lineDirectionId;
452452
int lineDeparture;
453453
int lineDepartureDelta;
454-
String arrivalDiffS;
455-
int arrivalDiff;
454+
String departureArrivalDiffS;
455+
int departureArrivalDiff;
456456
Long tTimestampInMs;
457457
Long arrivalTimestampMs;
458458
Schedule.Timestamp timestamp;
@@ -492,12 +492,12 @@ static Set<Schedule.Timestamp> findScheduleList(
492492
if (tTimestampInMs != null) {
493493
timestamp = new Schedule.Timestamp(tTimestampInMs + diffWithRealityInMs, localTimeZoneId);
494494
if (FeatureFlags.F_EXPORT_TRIP_ID) {
495-
if (FeatureFlags.F_EXPORT_ARRIVAL_W_TRIP_ID && GTFS_SCHEDULE_STOP_FILE_COL_ARRIVAL_DIFF_IDX >= 0) {
496-
arrivalDiffS = lineItems[GTFS_SCHEDULE_STOP_FILE_COL_ARRIVAL_DIFF_IDX + extraIdx];
497-
if (!TextUtils.isEmpty(arrivalDiffS) && CharUtils.isDigitsOnly(arrivalDiffS)) {
498-
arrivalDiff = Integer.parseInt(arrivalDiffS);
499-
if (arrivalDiff > 0) {
500-
arrivalTimestampMs = convertToTimestamp(context, lineDeparture - arrivalDiff, dateS);
495+
if (FeatureFlags.F_EXPORT_ARRIVAL_W_TRIP_ID && GTFS_SCHEDULE_STOP_FILE_COL_DEPARTURE_ARRIVAL_DIFF_IDX >= 0) {
496+
departureArrivalDiffS = lineItems[GTFS_SCHEDULE_STOP_FILE_COL_DEPARTURE_ARRIVAL_DIFF_IDX + extraIdx];
497+
if (!TextUtils.isEmpty(departureArrivalDiffS) && CharUtils.isDigitsOnly(departureArrivalDiffS)) {
498+
departureArrivalDiff = Integer.parseInt(departureArrivalDiffS);
499+
if (departureArrivalDiff > 0) {
500+
arrivalTimestampMs = convertToTimestamp(context, lineDeparture - departureArrivalDiff, dateS);
501501
if (arrivalTimestampMs != null) {
502502
timestamp.setArrivalT(arrivalTimestampMs);
503503
}

src/main/java/org/mtransit/android/commons/provider/status/GTFSRealTimeTripUpdatesProviderExt.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import org.mtransit.android.commons.TimeUtilsK
77
import org.mtransit.android.commons.data.RouteDirectionStop
88
import org.mtransit.android.commons.data.Schedule
99
import org.mtransit.android.commons.data.arrival
10-
import org.mtransit.android.commons.data.arrivalDiff
10+
import org.mtransit.android.commons.data.departureArrivalDiff
1111
import org.mtransit.android.commons.data.departure
1212
import org.mtransit.android.commons.data.getTripTimestamps
1313
import org.mtransit.android.commons.data.providerPrecision
@@ -251,7 +251,7 @@ internal fun applyDelaySTU(
251251
?: return null // impossible to handle
252252
val timestampOriginalArrival = rdsTripTimestamp.arrival
253253
val timestampOriginalDeparture = rdsTripTimestamp.departure
254-
val timestampOriginalArrivalDiff = rdsTripTimestamp.arrivalDiff
254+
val timestampOriginalDepartureArrivalDiff = rdsTripTimestamp.departureArrivalDiff
255255
var updated = false
256256
val stuArrivalTime = gStopTimeUpdate.optArrival
257257
.takeIf { gStopTimeUpdate.scheduleRelationship != GTUSTUScheduleRelationship.NO_DATA }
@@ -266,7 +266,7 @@ internal fun applyDelaySTU(
266266
?.optTimeInstant
267267
val stuDepartureDelay = gStopTimeUpdate.optDeparture
268268
.takeIf { gStopTimeUpdate.scheduleRelationship != GTUSTUScheduleRelationship.NO_DATA }
269-
.makeDelay(timestampOriginalDeparture, stuArrivalDelay, timestampOriginalArrivalDiff)
269+
.makeDelay(timestampOriginalDeparture, stuArrivalDelay, timestampOriginalDepartureArrivalDiff)
270270
if (stuArrivalTime != null) {
271271
rdsTripTimestamp.updateArrivalForRealTime(newArrival = stuArrivalTime)
272272
updated = true
@@ -314,12 +314,12 @@ internal fun applyDelay(
314314
currentDelay ?: return null
315315
val rdsTripTimestamp = rdsSchedule?.timestamps?.findClosestTripTimestamp(tripId, stopSequence)
316316
?: return currentDelay
317-
val currentDiffBetweenArrivalAndDeparture = rdsTripTimestamp.arrivalDiff
317+
val currentDepartureArrivalDiff = rdsTripTimestamp.departureArrivalDiff
318318
val newDelay = if (currentDelay < Duration.ZERO) {
319319
rdsTripTimestamp.updateForRealTime(delay = currentDelay, rdsSchedule.providerPrecision, PROVIDER_PRECISION)
320320
currentDelay // do not consume negative delay
321-
} else if (currentDiffBetweenArrivalAndDeparture <= currentDelay) {
322-
val newDelay = (currentDelay - currentDiffBetweenArrivalAndDeparture).coerceAtLeast(Duration.ZERO)
321+
} else if (currentDepartureArrivalDiff <= currentDelay) {
322+
val newDelay = (currentDelay - currentDepartureArrivalDiff).coerceAtLeast(Duration.ZERO)
323323
rdsTripTimestamp.updateForRealTime(arrivalDelay = currentDelay, departureDelay = newDelay, rdsSchedule.providerPrecision, PROVIDER_PRECISION)
324324
newDelay
325325
} else {

src/test/java/org/mtransit/android/commons/data/ScheduleExtTests.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class ScheduleExtTests {
3232
assertEquals(departure + 1.minutes, timestamp.departure)
3333
assertEquals(1.minutes, timestamp.originalDepartureDelay)
3434
assertEquals(departure, timestamp.originalDeparture)
35-
assertEquals(4.minutes, timestamp.arrivalDiff)
35+
assertEquals(4.minutes, timestamp.departureArrivalDiff)
3636
}
3737

3838
@Test
@@ -54,7 +54,7 @@ class ScheduleExtTests {
5454
assertEquals(departure - 5.minutes, timestamp.departure)
5555
assertEquals((-5).minutes, timestamp.originalDepartureDelay)
5656
assertEquals(departure, timestamp.originalDeparture)
57-
assertEquals(8.minutes, timestamp.arrivalDiff)
57+
assertEquals(8.minutes, timestamp.departureArrivalDiff)
5858
}
5959

6060
@Test
@@ -72,7 +72,7 @@ class ScheduleExtTests {
7272
assertEquals(departure + 1.minutes, timestamp.departure)
7373
assertEquals(1.minutes, timestamp.originalDepartureDelay)
7474
assertEquals(departure, timestamp.originalDeparture)
75-
assertEquals(2.minutes, timestamp.arrivalDiff)
75+
assertEquals(2.minutes, timestamp.departureArrivalDiff)
7676
}
7777

7878
@Test

src/test/java/org/mtransit/android/commons/provider/status/GTFSRealTimeTripUpdatesProviderTests.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import org.mtransit.android.commons.data.RouteDirectionStop
1111
import org.mtransit.android.commons.data.Schedule
1212
import org.mtransit.android.commons.data.Stop
1313
import org.mtransit.android.commons.data.arrival
14-
import org.mtransit.android.commons.data.arrivalDiff
14+
import org.mtransit.android.commons.data.departureArrivalDiff
1515
import org.mtransit.android.commons.data.departure
1616
import org.mtransit.android.commons.data.makeSchedule
1717
import org.mtransit.android.commons.data.toScheduleTimestamp
@@ -319,7 +319,7 @@ class GTFSRealTimeTripUpdatesProviderTests {
319319
val result = stopTimeEvent.makeDelay(
320320
originalTime = timestamp.departure,
321321
previousSTEDelay = previousDelay,
322-
previousCurrentDiff = timestamp.arrivalDiff
322+
previousCurrentDiff = timestamp.departureArrivalDiff
323323
)
324324

325325
assertNotNull(result)

0 commit comments

Comments
 (0)