summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/DBInfoscreen.pm2
-rw-r--r--lib/DBInfoscreen/Controller/Static.pm28
-rw-r--r--lib/DBInfoscreen/Controller/Stationboard.pm46
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;