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 +++++++++++++++++++++++++++-- public/static/js/geostop.js | 13 +++++----- 3 files changed, 59 insertions(+), 8 deletions(-) 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 ); diff --git a/public/static/js/geostop.js b/public/static/js/geostop.js index 34ba58e..0854019 100644 --- a/public/static/js/geostop.js +++ b/public/static/js/geostop.js @@ -32,17 +32,18 @@ $(function() { if (data.error) { showError('Backend-Fehler:', data.error, null); } else if (data.candidates.length == 0) { - showError('Keine Bahnhöfe in 70km Umkreis gefunden', '', null); + showError('Keine Stationen in 70km Umkreis gefunden', '', null); } else { $.each(data.candidates, function(i, candidate) { - var ds100 = candidate.ds100, + var eva = candidate.eva, name = candidate.name, - distance = candidate.distance; + distance = candidate.distance, + hafas = candidate.hafas; distance = distance.toFixed(1); var stationlink = $(document.createElement('a')); - stationlink.attr('href', ds100); + stationlink.attr('href', eva + '?hafas=' + hafas); stationlink.text(name); var distancenode = $(document.createElement('div')); @@ -56,11 +57,11 @@ $(function() { }; var processLocation = function(loc) { - $.post('/_geolocation', {lon: loc.coords.longitude, lat: loc.coords.latitude}, processResult).fail(function(jqXHR, textStatus, errorThrown) { + $.post('/_geolocation', {lon: loc.coords.longitude, lat: loc.coords.latitude, hafas: window.location.href.match('hafas=1') ? 1 : 0}, processResult).fail(function(jqXHR, textStatus, errorThrown) { removeStatus(); showError("Netzwerkfehler: ", textStatus, errorThrown); }); - $('div.candidatestatus').text('Suche Bahnhöfe…'); + $('div.candidatestatus').text('Suche Stationen…'); }; var processError = function(error) { -- cgit v1.2.3