diff options
Diffstat (limited to 'lib/DBInfoscreen/Controller')
| -rw-r--r-- | lib/DBInfoscreen/Controller/Static.pm | 28 | ||||
| -rw-r--r-- | lib/DBInfoscreen/Controller/Stationboard.pm | 46 | 
2 files changed, 44 insertions, 30 deletions
| diff --git a/lib/DBInfoscreen/Controller/Static.pm b/lib/DBInfoscreen/Controller/Static.pm index 22f2034..927bf6e 100644 --- a/lib/DBInfoscreen/Controller/Static.pm +++ b/lib/DBInfoscreen/Controller/Static.pm @@ -11,34 +11,6 @@ my %default = (  	admode => 'deparr',  ); -sub redirect { -	my ($self) = @_; -	my $input  = $self->param('input'); -	my $params = $self->req->params; - -	$params->remove('input'); - -	for my $param (qw(platforms mode admode via)) { -		if ( -			not $params->param($param) -			or ( exists $default{$param} -				and $params->param($param) eq $default{$param} ) -		  ) -		{ -			$params->remove($param); -		} -	} - -	$params = $params->to_string; - -	if ( $input =~ m{ ^ [a-zA-Z]{1,5} \s+ \d+ $ }x ) { -		$self->redirect_to("/z/${input}?${params}"); -	} -	else { -		$self->redirect_to("/${input}?${params}"); -	} -} -  sub geostop {  	my ($self) = @_; diff --git a/lib/DBInfoscreen/Controller/Stationboard.pm b/lib/DBInfoscreen/Controller/Stationboard.pm index 8cfdbfe..faf7c13 100644 --- a/lib/DBInfoscreen/Controller/Stationboard.pm +++ b/lib/DBInfoscreen/Controller/Stationboard.pm @@ -511,7 +511,7 @@ sub handle_request {  					$station,  					{  						errstr => $err, -						status => ( $err =~ m{station name$} ? 300 : 500 ), +						status => ( $err =~ m{Ambiguous|LOCATION} ? 300 : 500 ),  					},  					$api_version  				); @@ -521,7 +521,7 @@ sub handle_request {  				$station,  				{  					errstr => $err, -					status => ( $err =~ m{station name$} ? 300 : 500 ), +					status => ( $err =~ m{Ambiguous|LOCATION} ? 300 : 500 ),  				},  				$hafas  			); @@ -1873,4 +1873,46 @@ sub autocomplete {  	);  } +sub redirect_to_station { +	my ($self) = @_; +	my $input  = $self->param('input'); +	my $params = $self->req->params; + +	$params->remove('input'); + +	for my $param (qw(platforms mode admode via)) { +		if ( +			not $params->param($param) +			or ( exists $default{$param} +				and $params->param($param) eq $default{$param} ) +		  ) +		{ +			$params->remove($param); +		} +	} + +	if ( $input =~ m{ ^ [a-zA-Z]{1,5} \s+ \d+ $ }x ) { +		$params = $params->to_string; +		$self->redirect_to("/z/${input}?${params}"); +	} +	else { +		my @candidates +		  = Travel::Status::DE::IRIS::Stations::get_station($input); +		if ( +			@candidates == 1 +			and (  $input eq $candidates[0][0] +				or lc($input) eq lc( $candidates[0][1] ) +				or $input eq $candidates[0][2] ) +		  ) +		{ +			$params->remove('hafas'); +		} +		else { +			$params->param( hafas => 1 ); +		} +		$params = $params->to_string; +		$self->redirect_to("/${input}?${params}"); +	} +} +  1; | 
