summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbin/dbris52
-rw-r--r--lib/Travel/Routing/DE/DBRIS/Connection/Segment.pm15
2 files changed, 61 insertions, 6 deletions
diff --git a/bin/dbris b/bin/dbris
index 506263e..a698185 100755
--- a/bin/dbris
+++ b/bin/dbris
@@ -189,9 +189,13 @@ sub format_occupancy {
sub format_delay {
my ( $delay, $len ) = @_;
+ $len += 1;
if ( $delay and $len ) {
return sprintf( "(%+${len}d)", $delay );
}
+ elsif ($len) {
+ return q{ } x ( $len + 2 );
+ }
return q{};
}
@@ -231,6 +235,19 @@ for my $connection ( $ris->connections ) {
}
}
+ my $max_delay_digits = max
+ map { length( $_->dep_delay || q{} ), length( $_->arr_delay || q{} ) }
+ $connection->segments;
+ if ($show_full_route) {
+ my $max_route_delay_digits = max map {
+ map { length( $_->arr_delay || q{} ) }
+ $_->route
+ } $connection->segments;
+ if ( $max_route_delay_digits > $max_delay_digits ) {
+ $max_delay_digits = $max_route_delay_digits;
+ }
+ }
+
say q{};
printf(
"%s (%02d:%02d) %s %s%s%s\n\n",
@@ -251,9 +268,20 @@ for my $connection ( $ris->connections ) {
}
}
elsif ( $segment->is_walk ) {
- printf( "${output_bold}%s${output_reset} %dm (≈ %d min.)\n",
- $segment->walk_name, $segment->distance_m,
- $segment->duration->in_units('minutes') );
+ if ( $segment->distance_m ) {
+ printf( "${output_bold}%s${output_reset} %dm (≈ %d min.)\n",
+ $segment->walk_name, $segment->distance_m,
+ $segment->duration->in_units('minutes') );
+ }
+ elsif ( $segment->duration->in_units('minutes') ) {
+ printf( "${output_bold}%s${output_reset} ≈ %d min.\n",
+ $segment->walk_name,
+ $segment->duration->in_units('minutes') );
+ }
+ else {
+ printf( "${output_bold}%s${output_reset}\n",
+ $segment->walk_name );
+ }
next;
}
elsif ( $segment->direction ) {
@@ -265,16 +293,24 @@ for my $connection ( $ris->connections ) {
printf( "${output_bold}%s${output_reset}\n", $segment->train_long );
}
- printf( "%s ab %s%s\n",
+ printf(
+ "%s%s ab %s%s\n",
$segment->dep->strftime('%H:%M'),
+ $max_delay_digits
+ ? q{ } . format_delay( $segment->dep_delay, $max_delay_digits )
+ : q{},
$segment->dep_name,
$segment->dep_platform ? q{ } . $segment->dep_platform : q{},
);
if ($show_full_route) {
for my $stop ( $segment->route ) {
- printf( "%s %s %s%s\n",
+ printf(
+ "%s%s %s %s%s\n",
$stop->arr ? $stop->arr->strftime('%H:%M') : q{ },
+ $max_delay_digits
+ ? q{ } . format_delay( $stop->arr_delay, $max_delay_digits )
+ : q{},
format_occupancy($stop),
$stop->name,
$stop->platform ? q{ } . $stop->platform : q{},
@@ -282,8 +318,12 @@ for my $connection ( $ris->connections ) {
}
}
- printf( "%s an %s%s\n",
+ printf(
+ "%s%s an %s%s\n",
$segment->arr->strftime('%H:%M'),
+ $max_delay_digits
+ ? q{ } . format_delay( $segment->arr_delay, $max_delay_digits )
+ : q{},
$segment->arr_name,
$segment->arr_platform ? q{ } . $segment->arr_platform : q{},
);
diff --git a/lib/Travel/Routing/DE/DBRIS/Connection/Segment.pm b/lib/Travel/Routing/DE/DBRIS/Connection/Segment.pm
index 840edba..8523f03 100644
--- a/lib/Travel/Routing/DE/DBRIS/Connection/Segment.pm
+++ b/lib/Travel/Routing/DE/DBRIS/Connection/Segment.pm
@@ -18,6 +18,7 @@ Travel::Routing::DE::DBRIS::Connection::Segment->mk_ro_accessors(
sched_dep rt_dep dep dep_platform
sched_arr rt_arr arr arr_platform
sched_duration rt_duration duration duration_percent
+ arr_delay dep_delay delay
journey_id
occupancy occupancy_first occupancy_second
is_transfer is_walk walk_name distance_m
@@ -59,6 +60,20 @@ sub new {
}
$ref->{arr} = $ref->{rt_arr} // $ref->{sched_arr};
+ if ( $ref->{sched_dep} and $ref->{rt_dep} ) {
+ $ref->{dep_delay}
+ = $ref->{rt_dep}->subtract_datetime( $ref->{sched_dep} )
+ ->in_units('minutes');
+ }
+
+ if ( $ref->{sched_arr} and $ref->{rt_arr} ) {
+ $ref->{arr_delay}
+ = $ref->{rt_arr}->subtract_datetime( $ref->{sched_arr} )
+ ->in_units('minutes');
+ }
+
+ $ref->{delay} = $ref->{arr_delay} // $ref->{dep_delay};
+
# PUBLICTRANSPORT uses abschnittsDauerInSeconds; WALK uses abschnittsDauer
if ( my $d = $json->{abschnittsDauerInSeconds} // $json->{abschnittsDauer} )
{