summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDerf Null <derf@finalrewind.org>2023-04-18 22:51:57 +0200
committerDerf Null <derf@finalrewind.org>2023-04-18 22:51:57 +0200
commitdfdf32b357ba057325fb02f6363706d18733a418 (patch)
tree0a06e4ba4aac4818800cddb251f3e152734cbc83
parentabb12f02c6b45eea4d553da8e4b719e78d18606a (diff)
stop search: add hafas support
-rw-r--r--lib/DBInfoscreen/Controller/Static.pm15
-rw-r--r--lib/DBInfoscreen/Controller/Stationboard.pm39
-rw-r--r--public/static/js/geostop.js13
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) {