From e430b920d3cce7d3b971d68147ddd883fc2f520f Mon Sep 17 00:00:00 2001 From: Birte Kristina Friesel Date: Tue, 26 Mar 2024 21:06:46 +0100 Subject: hafas-m: improve journey output for multiple products / directions --- bin/hafas-m | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/bin/hafas-m b/bin/hafas-m index 8b22f49..fa5c877 100755 --- a/bin/hafas-m +++ b/bin/hafas-m @@ -148,8 +148,12 @@ sub show_version { exit 0; } -sub parse_mot_options { +sub spacer { + my ($len) = @_; + return ( $len % 2 ? q { } : q{} ) . ( q{ ยท} x ( $len / 2 ) ); +} +sub parse_mot_options { my $default_yes = 1; for my $type ( split( qr{,}, $types ) ) { @@ -385,6 +389,7 @@ elsif ( $opt{locationSearch} ) { elsif ( $opt{journey} ) { my $result = $status->result; my @prods; + my @directions; my $prev_prod = 0; printf( "%s โ†’ %s", $result->name, $result->route_end ); @@ -400,6 +405,7 @@ elsif ( $opt{journey} ) { my $delay_len = 0; my $delay_fmt = 0; my $occupancy_len = 0; + my $stop_len = 0; for my $stop ( $result->route ) { if ( $stop->delay ) { $delay_len = max( $delay_len, length( $stop->delay ) + 1 ); @@ -408,11 +414,17 @@ elsif ( $opt{journey} ) { { $occupancy_len = 2; } + if ( length( $stop->loc->name ) > $stop_len ) { + $stop_len = length( $stop->loc->name ); + } my $prod = $stop->prod_dep // $stop->prod_arr; if ( $prod and $prod != $prev_prod ) { push( @prods, $prod ); $prev_prod = $prod; } + if ( $stop->direction ) { + push( @directions, $stop->direction ); + } } if ($delay_len) { $delay_fmt = $delay_len + 3; @@ -424,8 +436,11 @@ elsif ( $opt{journey} ) { } } else { - printf( "Betrieb: %s\n", - join( q{, }, map { $_->operator } grep { $_->operator } @prods ) ); + printf( + "Betrieb: %s\n", + join( q{, }, + uniq map { $_->operator } grep { $_->operator } @prods ) + ); } $prev_prod = 0; @@ -465,13 +480,18 @@ elsif ( $opt{journey} ) { my $prod = $stop->prod_dep // $stop->prod_arr; if ( $prod and $prod != $prev_prod ) { $prod_line - = sprintf( " : %s (%s)", $prod->name, $prod->operator ); + = sprintf( " %s (%s)", $prod->name, $prod->operator ); $prev_prod = $prod; } } + my $dir_line = q{}; + if ( @directions > 1 and $stop->direction ) { + $dir_line = ' โ†’ ' . $stop->direction; + } + printf( -"%s%5s %s %5s %-${delay_fmt}s%${occupancy_len}s%-${occupancy_len}s %s%s%s%s%s\n", +"%s%5s %s %5s %-${delay_fmt}s%${occupancy_len}s%-${occupancy_len}s %s%s%s%s%s%s\n", $stop == $mark_stop ? $output_bold : q{}, $stop->arr_cancelled ? '--:--' : ( $stop->arr ? $stop->arr->strftime('%H:%M') : q{} ), @@ -485,8 +505,11 @@ elsif ( $opt{journey} ) { : q{}, $stop->loc->name, $stop == $mark_stop ? $output_reset : q{}, + ( $prod_line or $dir_line or $msg_line ) + ? spacer( $stop_len + 1 - length( $stop->loc->name ) ) + : q{}, $prod_line, - $stop->direction ? sprintf( ' โ†’ %s', $stop->direction ) : q{}, + $dir_line, $msg_line, ); } -- cgit v1.2.3