diff options
-rwxr-xr-x | lib/Travelynx/Controller/Traveling.pm | 63 | ||||
-rw-r--r-- | public/static/js/geolocation.js | 5 |
2 files changed, 49 insertions, 19 deletions
diff --git a/lib/Travelynx/Controller/Traveling.pm b/lib/Travelynx/Controller/Traveling.pm index 4d2f22d..0f6b64f 100755 --- a/lib/Travelynx/Controller/Traveling.pm +++ b/lib/Travelynx/Controller/Traveling.pm @@ -555,35 +555,64 @@ sub geolocation { if ( not $lon or not $lat ) { $self->render( json => { error => 'Invalid lon/lat received' } ); + return; } - else { - my @candidates = map { - { - ds100 => $_->[0][0], - name => $_->[0][1], - eva => $_->[0][2], - lon => $_->[0][3], - lat => $_->[0][4], - distance => $_->[1], + $self->render_later; + + my @iris = map { + { + ds100 => $_->[0][0], + name => $_->[0][1], + eva => $_->[0][2], + lon => $_->[0][3], + lat => $_->[0][4], + distance => $_->[1], + } + } Travel::Status::DE::IRIS::Stations::get_station_by_location( $lon, + $lat, 10 ); + @iris = uniq_by { $_->{name} } @iris; + if ( @iris > 5 ) { + @iris = @iris[ 0 .. 4 ]; + } + + Travel::Status::DE::HAFAS->new_p( + promise => 'Mojo::Promise', + user_agent => $self->ua, + geoSearch => { + lat => $lat, + lon => $lon + } + )->then( + sub { + my ($hafas) = @_; + my @hafas = map { + { + name => $_->name, + eva => $_->eva, + distance => $_->distance_m / 1000, + hafas => 1 + } + } $hafas->results; + if ( @hafas > 5 ) { + @hafas = @hafas[ 0 .. 4 ]; } - } Travel::Status::DE::IRIS::Stations::get_station_by_location( $lon, - $lat, 10 ); - @candidates = uniq_by { $_->{name} } @candidates; - if ( @candidates > 5 ) { $self->render( json => { - candidates => [ @candidates[ 0 .. 4 ] ], + candidates => [ @iris, @hafas ], } ); } - else { + )->catch( + sub { + my ($err) = @_; $self->render( json => { - candidates => [@candidates], + candidates => [@iris], + warning => $err, } ); } - } + )->wait; } sub travel_action { diff --git a/public/static/js/geolocation.js b/public/static/js/geolocation.js index 42c7f1e..5da28d8 100644 --- a/public/static/js/geolocation.js +++ b/public/static/js/geolocation.js @@ -46,11 +46,12 @@ $(document).ready(function() { const res = $(document.createElement('p')); $.each(data.candidates, function(i, candidate) { - const ds100 = candidate.ds100, + const eva = candidate.eva, name = candidate.name, + hafas = candidate.hafas, distance = candidate.distance.toFixed(1); - const node = $('<a class="tablerow" href="/s/' + ds100 + '"><span>' + name + '</span></a>'); + const node = $('<a class="tablerow" href="/s/' + eva + '?hafas=' + hafas + '"><span>' + name + '</span></a>'); node.click(function() { $('nav .preloader-wrapper').addClass('active'); }); |