diff options
| author | Derf Null <derf@finalrewind.org> | 2023-04-18 22:51:57 +0200 | 
|---|---|---|
| committer | Derf Null <derf@finalrewind.org> | 2023-04-18 22:51:57 +0200 | 
| commit | dfdf32b357ba057325fb02f6363706d18733a418 (patch) | |
| tree | 0a06e4ba4aac4818800cddb251f3e152734cbc83 | |
| parent | abb12f02c6b45eea4d553da8e4b719e78d18606a (diff) | |
stop search: add hafas support
| -rw-r--r-- | lib/DBInfoscreen/Controller/Static.pm | 15 | ||||
| -rw-r--r-- | lib/DBInfoscreen/Controller/Stationboard.pm | 39 | ||||
| -rw-r--r-- | 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) { | 
