diff options
| author | Birte Kristina Friesel <derf@finalrewind.org> | 2023-08-16 18:54:32 +0200 | 
|---|---|---|
| committer | Birte Kristina Friesel <derf@finalrewind.org> | 2023-08-16 18:54:32 +0200 | 
| commit | 654bde9278ed67d98f218d58f5fc8579a633729b (patch) | |
| tree | a312ac4931c52f3aa1e353149f12cbd45701c3b2 | |
| parent | 5d330a773810f6801c94cd5469f5cec8adf5a420 (diff) | |
geosearch: always query iris and hafas stops
| -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');  				}); | 
