diff options
author | Birte Kristina Friesel <derf@finalrewind.org> | 2023-08-24 21:26:00 +0200 |
---|---|---|
committer | Birte Kristina Friesel <derf@finalrewind.org> | 2023-08-24 21:26:00 +0200 |
commit | d313ca7fc1113e0e4a66415a000de27d8e5a3e81 (patch) | |
tree | ab1336ac1f6b21ad95bc7956a337983542949334 /lib/Travelynx | |
parent | d23283329df18171fbc0f965d42c9af37c175084 (diff) |
resolve unknown/ambiguous stop into list of stops
Diffstat (limited to 'lib/Travelynx')
-rwxr-xr-x | lib/Travelynx/Controller/Traveling.pm | 48 | ||||
-rw-r--r-- | lib/Travelynx/Helper/IRIS.pm | 10 |
2 files changed, 47 insertions, 11 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 ); } } diff --git a/lib/Travelynx/Helper/IRIS.pm b/lib/Travelynx/Helper/IRIS.pm index 4c286cb..a529e28 100644 --- a/lib/Travelynx/Helper/IRIS.pm +++ b/lib/Travelynx/Helper/IRIS.pm @@ -153,10 +153,12 @@ sub get_departures_p { return Mojo::Promise->reject( 'ambiguous station name', { - results => [], - errstr => - "Mehrdeutiger Stationsname: '$station'. Mögliche Eingaben: " - . join( q{, }, map { $_->[1] } @station_matches ), + results => [], + errstr => "Mehrdeutiger Stationsname: '$station'", + suggestions => [ + map { { name => $_->[1], eva => $_->[2] } } + @station_matches + ], } ); } |