diff options
| -rwxr-xr-x | bin/dbris | 55 | ||||
| -rw-r--r-- | lib/Travel/Routing/DE/DBRIS/Connection.pm | 15 | ||||
| -rw-r--r-- | lib/Travel/Routing/DE/DBRIS/Connection/Segment.pm | 6 | 
3 files changed, 61 insertions, 15 deletions
| @@ -35,6 +35,18 @@ for my $arg (@ARGV) {  my $output_bold  = -t STDOUT ? "\033[1m" : q{};  my $output_reset = -t STDOUT ? "\033[0m" : q{}; +my $output_fyi      = -t STDOUT ? "\033[40;36m" : q{}; +my $output_unknown  = -t STDOUT ? "\033[40;35m" : q{}; +my $output_good     = -t STDOUT ? "\033[40;32m" : q{}; +my $output_warning  = -t STDOUT ? "\033[40;33m" : q{}; +my $output_critical = -t STDOUT ? "\033[40;31m" : q{}; + +my $output_bold_fyi      = -t STDOUT ? "\033[1;40;36m" : q{}; +my $output_bold_unknown  = -t STDOUT ? "\033[1;40;35m" : q{}; +my $output_bold_good     = -t STDOUT ? "\033[1;40;32m" : q{}; +my $output_bold_warning  = -t STDOUT ? "\033[1;40;33m" : q{}; +my $output_bold_critical = -t STDOUT ? "\033[1;40;31m" : q{}; +  GetOptions(  	'd|date=s'             => \$date,  	'h|help'               => sub { show_help(0) }, @@ -276,6 +288,27 @@ if ($json_output) {  for my $connection ( $ris->connections ) {  	my $header = q{}; +	my $format = $output_bold; + +	if ( $connection->is_unlikely ) { +		if ( $connection->feasibility >= 4 ) { +			$header .= "  ${output_critical}XX${output_reset}"; +			$format = $output_bold_critical; +		} +		else { +			$header .= "  ${output_warning}X?${output_reset}"; +			$format = $output_bold_warning; +		} +	} +	if ( $connection->is_cancelled ) { +		$format = $output_bold_critical; +	} + +	if ( defined $passengers and defined $connection->price ) { +		$header .= sprintf( '  %.2f %s', $connection->price, +			$connection->price_unit ); +	} +  	for my $segment ( $connection->segments ) {  		if ( $segment->train_short ) {  			$header .= sprintf( '  %s', $segment->train_short ); @@ -307,15 +340,19 @@ for my $connection ( $ris->connections ) {  	say q{};  	printf( -		"%s  (%02d:%02d)  %s  %s%s%s\n\n", -		$connection->dep ? $connection->dep->strftime('%d.%m. %H:%M') -		: q{??.??. ??:??}, +		"%s %s%s%s  (%02d:%02d)  %s%s%s  %s%s\n", +		$connection->dep ? $connection->dep->strftime('%d.%m.') +		: q{??.??.}, +		$format, +		$connection->dep ? $connection->dep->strftime('%H:%M') +		: q{??:??}, +		$output_reset,  		$connection->duration->in_units( 'hours', 'minutes' ), +		$format,  		$connection->arr ? $connection->arr->strftime('%H:%M') : q{??:??}, -		format_occupancy($connection), -		( defined $passengers and defined $connection->price ) -		? sprintf( '  %.2f %s', $connection->price, $connection->price_unit ) -		: q{}, +		$output_reset, +		$connection->is_cancelled ? "${output_critical}XX${output_reset}" +		: format_occupancy($connection),  		$header,  	); @@ -389,8 +426,10 @@ for my $connection ( $ris->connections ) {  		}  		printf( -			"%s%s  an  %s%s\n", +			"%s%s%s%s  an  %s%s\n", +			$segment->is_unlikely ? $output_critical : q{},  			$segment->arr->strftime('%H:%M'), +			$segment->is_unlikely ? $output_reset : q{},  			$max_delay_digits  			? q{ } . format_delay( $segment->arr_delay, $max_delay_digits )  			: q{}, diff --git a/lib/Travel/Routing/DE/DBRIS/Connection.pm b/lib/Travel/Routing/DE/DBRIS/Connection.pm index d7c74f0..6ff4507 100644 --- a/lib/Travel/Routing/DE/DBRIS/Connection.pm +++ b/lib/Travel/Routing/DE/DBRIS/Connection.pm @@ -13,7 +13,7 @@ use Travel::Routing::DE::DBRIS::Connection::Segment;  our $VERSION = '0.02';  Travel::Routing::DE::DBRIS::Connection->mk_ro_accessors( -	qw(changes +	qw(changes feasibility is_cancelled is_unscheduled is_unlikely  	  duration sched_duration rt_duration  	  sched_dep rt_dep dep  	  sched_arr rt_arr arr @@ -30,11 +30,14 @@ sub new {  	my $strptime = $opt{strptime_obj};  	my $ref = { -		changes      => $json->{umstiegsAnzahl}, -		id           => $json->{tripId}, -		price        => $json->{angebotsPreis}{betrag}, -		price_unit   => $json->{angebotsPreis}{waehrung}, -		strptime_obj => $strptime, +		changes     => $json->{umstiegsAnzahl}, +		feasibility => $json->{ereignisZusammenfassung}{anschlussBewertungCode} +		  // -1, +		is_unscheduled => $json->{isAlternativeVerbindung}, +		id             => $json->{tripId}, +		price          => $json->{angebotsPreis}{betrag}, +		price_unit     => $json->{angebotsPreis}{waehrung}, +		strptime_obj   => $strptime,  	};  	if ( $ref->{price_unit} and $ref->{price_unit} eq 'EUR' ) { diff --git a/lib/Travel/Routing/DE/DBRIS/Connection/Segment.pm b/lib/Travel/Routing/DE/DBRIS/Connection/Segment.pm index f2278ef..1b01d77 100644 --- a/lib/Travel/Routing/DE/DBRIS/Connection/Segment.pm +++ b/lib/Travel/Routing/DE/DBRIS/Connection/Segment.pm @@ -18,7 +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 +	  arr_delay dep_delay delay feasibility is_unlikely  	  journey_id  	  occupancy occupancy_first occupancy_second  	  is_transfer is_walk walk_name distance_m @@ -42,6 +42,7 @@ sub new {  		train_long  => $json->{verkehrsmittel}{langText},  		direction   => $json->{verkehrsmittel}{richtung},  		distance_m  => $json->{distanz}, +		feasibility => $json->{anschlussBewertungCode},  	};  	if ( my $ts = $json->{abfahrtsZeitpunkt} ) { @@ -134,6 +135,9 @@ sub new {  	for my $message ( @{ $json->{risNotizen} // [] } ) {  		push( @{ $ref->{messages_ris} }, $message ); +		if ( $message->{key} eq 'text.realtime.journey.missed.connection' ) { +			$ref->{is_unlikely} = 1; +		}  	}  	for my $message ( @{ $json->{priorisierteMeldungen} // [] } ) { | 
