Unverified Commit 93174faa authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

Provide delay data

parent a1add168
Loading
Loading
Loading
Loading
+46 −6
Original line number Diff line number Diff line
@@ -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 ) {
			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{},
		);
+15 −0
Original line number Diff line number Diff line
@@ -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} )
	{