diff options
| author | Derf Null <derf@finalrewind.org> | 2023-03-27 21:03:25 +0200 | 
|---|---|---|
| committer | Derf Null <derf@finalrewind.org> | 2023-03-27 21:03:25 +0200 | 
| commit | c3c7a0c78b30cc7ef2b836cca4eb0a4e110955da (patch) | |
| tree | b66a6f0dcb4cb8d0e10ad29c84d79d0f309ee402 /lib/Travelynx/Controller | |
| parent | 3acee2b285ac81405c5d2ce8889c77460f6f58a0 (diff) | |
stationboard: add HAFAS support
Diffstat (limited to 'lib/Travelynx/Controller')
| -rwxr-xr-x | lib/Travelynx/Controller/Traveling.pm | 61 | 
1 files changed, 49 insertions, 12 deletions
| diff --git a/lib/Travelynx/Controller/Traveling.pm b/lib/Travelynx/Controller/Traveling.pm index 00cc02a..e9a8bb5 100755 --- a/lib/Travelynx/Controller/Traveling.pm +++ b/lib/Travelynx/Controller/Traveling.pm @@ -795,22 +795,56 @@ sub station {  	my $train   = $self->param('train');  	$self->render_later; -	$self->iris->get_departures_p( -		station      => $station, -		lookbehind   => 120, -		lookahead    => 30, -		with_related => 1 -	)->then( + +	my $use_hafas = $self->param('hafas'); +	my $promise; +	if ($use_hafas) { +		$promise = $self->hafas->get_departures_p( +			eva        => $station, +			lookbehind => 120, +			lookahead  => 30, +		); +	} +	else { +		$promise = $self->iris->get_departures_p( +			station      => $station, +			lookbehind   => 120, +			lookahead    => 30, +			with_related => 1, +		); +	} +	$promise->then(  		sub {  			my ($status) = @_; -			# You can't check into a train which terminates here -			my @results = grep { $_->departure } @{ $status->{results} }; +			my @results; +			if ($use_hafas) { +				my $now = $self->now->epoch; +				@results = map { $_->[0] } +				  sort { $b->[1] <=> $a->[1] } +				  map  { [ $_, $_->datetime->epoch ] } +				  grep { +					( $_->datetime // $_->sched_datetime )->epoch +					  < $now + 30 * 60 +				  } $status->results; +				$status = { +					station_eva  => $status->station->{eva}, +					station_name => +					  List::Util::reduce { length($a) < length($b) ? $a : $b } +					@{ $status->station->{names} }, +					related_stations => [], +				}; +			} +			else { +				# You can't check into a train which terminates here +				@results = grep { $_->departure } @{ $status->{results} }; -			@results = map { $_->[0] } -			  sort { $b->[1] <=> $a->[1] } -			  map { [ $_, $_->departure->epoch // $_->sched_departure->epoch ] } -			  @results; +				@results = map { $_->[0] } +				  sort { $b->[1] <=> $a->[1] } +				  map { +					[ $_, $_->departure->epoch // $_->sched_departure->epoch ] +				  } @results; +			}  			my $connections_p;  			if ($train) { @@ -842,6 +876,7 @@ sub station {  							'departures',  							eva              => $status->{station_eva},  							results          => \@results, +							hafas            => $use_hafas,  							station          => $status->{station_name},  							related_stations => $status->{related_stations},  							connections      => $connecting_trains, @@ -856,6 +891,7 @@ sub station {  							'departures',  							eva              => $status->{station_eva},  							results          => \@results, +							hafas            => $use_hafas,  							station          => $status->{station_name},  							related_stations => $status->{related_stations},  							title   => "travelynx: $status->{station_name}", @@ -870,6 +906,7 @@ sub station {  					'departures',  					eva              => $status->{station_eva},  					results          => \@results, +					hafas            => $use_hafas,  					station          => $status->{station_name},  					related_stations => $status->{related_stations},  					title            => "travelynx: $status->{station_name}", | 
