Unverified Commit 042edb97 authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

add support for walk segments

parent f083f975
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -220,6 +220,10 @@ for my $connection ( $ris->connections ) {
		elsif ( $segment->is_transfer ) {
			$header .= sprintf( '  %.1fkm', $segment->distance_m / 1e3 );
		}
		elsif ( $segment->is_walk ) {

			# not shown in header
		}
		else {
			$header .= q{  ??};
		}
@@ -244,6 +248,12 @@ for my $connection ( $ris->connections ) {
				say $note;
			}
		}
		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') );
			next;
		}
		elsif ( $segment->direction ) {
			printf( "${output_bold}%s${output_reset} → %s  %s\n",
				$segment->train_mid, $segment->direction,
@@ -252,6 +262,7 @@ for my $connection ( $ris->connections ) {
		else {
			printf( "${output_bold}%s${output_reset}\n", $segment->train_long );
		}

		printf( "%s  ab  %s\n",
			$segment->dep->strftime('%H:%M'),
			$segment->dep_name );
+12 −4
Original line number Diff line number Diff line
@@ -20,7 +20,7 @@ Travel::Routing::DE::DBRIS::Connection::Segment->mk_ro_accessors(
	  sched_duration rt_duration duration duration_percent
	  journey_id
	  occupancy occupancy_first occupancy_second
	  is_transfer distance_m
	  is_transfer is_walk walk_name distance_m
	)
);

@@ -40,6 +40,7 @@ sub new {
		train_mid   => $json->{verkehrsmittel}{mittelText},
		train_long  => $json->{verkehrsmittel}{langText},
		direction   => $json->{verkehrsmittel}{richtung},
		distance_m  => $json->{distanz},
	};

	if ( my $ts = $json->{abfahrtsZeitpunkt} ) {
@@ -58,14 +59,18 @@ sub new {
	}
	$ref->{arr} = $ref->{rt_arr} // $ref->{sched_arr};

	if ( my $d = $json->{abschnittsDauerInSeconds} ) {
	# PUBLICTRANSPORT uses abschnittsDauerInSeconds; WALK uses abschnittsDauer
	if ( my $d = $json->{abschnittsDauerInSeconds} // $json->{abschnittsDauer} )
	{
		$ref->{sched_duration} = DateTime::Duration->new(
			hours   => int( $d / 3600 ),
			minutes => int( ( $d % 3600 ) / 60 ),
			seconds => $d % 60,
		);
	}
	if ( my $d = $json->{ezAbschnittsDauerInSeconds} ) {
	if ( my $d = $json->{ezAbschnittsDauerInSeconds}
		// $json->{ezAbschnittsDauer} )
	{
		$ref->{rt_duration} = DateTime::Duration->new(
			hours   => int( $d / 3600 ),
			minutes => int( ( $d % 3600 ) / 60 ),
@@ -104,11 +109,14 @@ sub new {
		);
	}

	if ( $json->{verkehrsmittel}{typ} eq 'WALK' ) {
		$ref->{is_walk}   = 1;
		$ref->{walk_name} = $json->{verkehrsmittel}{name};
	}
	if ( $json->{verkehrsmittel}{typ} eq 'TRANSFER' ) {
		$ref->{is_transfer} = 1;
		$ref->{transfer_notes}
		  = [ map { $_->{value} } @{ $json->{transferNotes} // [] } ];
		$ref->{distance_m} = $json->{distanz};
	}

	bless( $ref, $obj );