From dfdf32b357ba057325fb02f6363706d18733a418 Mon Sep 17 00:00:00 2001 From: Derf Null Date: Tue, 18 Apr 2023 22:51:57 +0200 Subject: stop search: add hafas support --- lib/DBInfoscreen/Controller/Static.pm | 15 +++++++++++ lib/DBInfoscreen/Controller/Stationboard.pm | 39 +++++++++++++++++++++++++++-- 2 files changed, 52 insertions(+), 2 deletions(-) (limited to 'lib/DBInfoscreen/Controller') diff --git a/lib/DBInfoscreen/Controller/Static.pm b/lib/DBInfoscreen/Controller/Static.pm index e30b34f..63b3b8c 100644 --- a/lib/DBInfoscreen/Controller/Static.pm +++ b/lib/DBInfoscreen/Controller/Static.pm @@ -42,8 +42,23 @@ sub redirect { sub geostop { my ($self) = @_; + my ( $api_link, $api_text, $api_icon ); + if ( $self->param('hafas') ) { + $api_link = '/_autostop'; + $api_text = 'Auf Bahnverkehr wechseln'; + $api_icon = 'directions_bus'; + } + else { + $api_link = '/_autostop?hafas=1'; + $api_text = 'Auf Nahverkehr wechseln'; + $api_icon = 'train'; + } + $self->render( 'geostop', + api_link => $api_link, + api_text => $api_text, + api_icon => $api_icon, with_geostop => 1, hide_opts => 1 ); diff --git a/lib/DBInfoscreen/Controller/Stationboard.pm b/lib/DBInfoscreen/Controller/Stationboard.pm index ef33699..d2cca8d 100644 --- a/lib/DBInfoscreen/Controller/Stationboard.pm +++ b/lib/DBInfoscreen/Controller/Stationboard.pm @@ -1763,12 +1763,46 @@ sub handle_result { sub stations_by_coordinates { my $self = shift; - my $lon = $self->param('lon'); - my $lat = $self->param('lat'); + my $lon = $self->param('lon'); + my $lat = $self->param('lat'); + my $hafas = $self->param('hafas'); if ( not $lon or not $lat ) { $self->render( json => { error => 'Invalid lon/lat received' } ); } + if ($hafas) { + $self->render_later; + Travel::Status::DE::HAFAS->new_p( + promise => 'Mojo::Promise', + user_agent => $self->ua, + geoSearch => { + lat => $lat, + lon => $lon + } + )->then( + sub { + my ($hafas) = @_; + my @candidates = map { + { + name => $_->name, + eva => $_->eva, + distance => $_->distance_m / 1000, + hafas => 1 + } + } $hafas->results; + $self->render( + json => { + candidates => [@candidates], + } + ); + } + )->catch( + sub { + my ($err) = @_; + $self->render( json => { error => $err } ); + } + )->wait; + } else { my @candidates = map { { @@ -1778,6 +1812,7 @@ sub stations_by_coordinates { lon => $_->[0][3], lat => $_->[0][4], distance => $_->[1], + hafas => 0, } } Travel::Status::DE::IRIS::Stations::get_station_by_location( $lon, $lat, 10 ); -- cgit v1.2.3