Loading bin/dbris +46 −6 Original line number Diff line number Diff line Loading @@ -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{}; } Loading Loading @@ -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", Loading @@ -251,9 +268,20 @@ for my $connection ( $ris->connections ) { } } elsif ( $segment->is_walk ) { 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 ) { Loading @@ -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{}, Loading @@ -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{}, ); Loading lib/Travel/Routing/DE/DBRIS/Connection/Segment.pm +15 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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} ) { Loading Loading
bin/dbris +46 −6 Original line number Diff line number Diff line Loading @@ -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{}; } Loading Loading @@ -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", Loading @@ -251,9 +268,20 @@ for my $connection ( $ris->connections ) { } } elsif ( $segment->is_walk ) { 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 ) { Loading @@ -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{}, Loading @@ -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{}, ); Loading
lib/Travel/Routing/DE/DBRIS/Connection/Segment.pm +15 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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} ) { Loading