diff options
Diffstat (limited to 'lib/Travelynx/Controller')
| -rwxr-xr-x | lib/Travelynx/Controller/Traveling.pm | 48 | 
1 files changed, 41 insertions, 7 deletions
| diff --git a/lib/Travelynx/Controller/Traveling.pm b/lib/Travelynx/Controller/Traveling.pm index 86f85d8..251bc15 100755 --- a/lib/Travelynx/Controller/Traveling.pm +++ b/lib/Travelynx/Controller/Traveling.pm @@ -1074,20 +1074,54 @@ sub station {  	)->catch(  		sub {  			my ( $err, $status ) = @_; -			if ($status) { +			if ( $status and $status->{suggestions} ) {  				$self->render( -					'landingpage', -					with_autocomplete => 1, -					with_geolocation  => 1, -					error             => $status->{errstr}, -					status            => 400, +					'disambiguation', +					suggestions => $status->{suggestions}, +					status      => 300,  				);  			} +			elsif ( $use_hafas and $status and $status->errcode eq 'LOCATION' ) +			{ +				$status->similar_stops_p->then( +					sub { +						my @suggestions = @_; +						if ( @suggestions == 1 ) { +							$self->redirect_to( +								'/s/' . $suggestions[0]->{id} . '?hafas=1' ); +						} +						else { +							$self->render( +								'disambiguation', +								suggestions => [ +									map { +										{ +											name => $_->{name}, +											eva  => $_->{id} +										} +									} @suggestions +								], +								status => 300, +							); +						} +					} +				)->catch( +					sub { +						my ($err2) = @_; +						$self->render( +							'exception', +							exception => +							  "StopFinder threw '$err2' when handling '$err'", +							status => 502 +						); +					} +				)->wait; +			}  			else {  				$self->render(  					'exception',  					exception => $err, -					status    => 500 +					status    => 502  				);  			}  		} | 
