diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/DBInfoscreen.pm | 2 | ||||
-rw-r--r-- | lib/DBInfoscreen/Controller/Static.pm | 28 | ||||
-rw-r--r-- | lib/DBInfoscreen/Controller/Stationboard.pm | 46 |
3 files changed, 45 insertions, 31 deletions
diff --git a/lib/DBInfoscreen.pm b/lib/DBInfoscreen.pm index 092c45f..687d583 100644 --- a/lib/DBInfoscreen.pm +++ b/lib/DBInfoscreen.pm @@ -288,7 +288,7 @@ sub startup { my $r = $self->routes; - $r->get('/_redirect')->to('static#redirect'); + $r->get('/_redirect')->to('stationboard#redirect_to_station'); # legacy entry point $r->get('/_auto')->to('static#geostop'); 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; |