diff options
Diffstat (limited to 'lib')
| -rwxr-xr-x | lib/Travelynx/Controller/Traveling.pm | 61 | ||||
| -rw-r--r-- | lib/Travelynx/Helper/HAFAS.pm | 2 | 
2 files changed, 50 insertions, 13 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}", diff --git a/lib/Travelynx/Helper/HAFAS.pm b/lib/Travelynx/Helper/HAFAS.pm index 9bff723..a418b61 100644 --- a/lib/Travelynx/Helper/HAFAS.pm +++ b/lib/Travelynx/Helper/HAFAS.pm @@ -91,7 +91,7 @@ sub get_departures_p {  		station    => $opt{eva},  		datetime   => $when,  		duration   => $opt{lookahead}, -		results    => 120, +		results    => 300,  		cache      => $self->{realtime_cache},  		promise    => 'Mojo::Promise',  		user_agent => $self->{user_agent}->request_timeout(5),  | 
