diff options
Diffstat (limited to 'lib/DBInfoscreen')
| -rw-r--r-- | lib/DBInfoscreen/Controller/Stationboard.pm | 49 | ||||
| -rw-r--r-- | lib/DBInfoscreen/Helper/Wagonorder.pm | 39 | 
2 files changed, 88 insertions, 0 deletions
| diff --git a/lib/DBInfoscreen/Controller/Stationboard.pm b/lib/DBInfoscreen/Controller/Stationboard.pm index c79a743..220e630 100644 --- a/lib/DBInfoscreen/Controller/Stationboard.pm +++ b/lib/DBInfoscreen/Controller/Stationboard.pm @@ -458,6 +458,55 @@ sub render_train {  		)->wait;  	} +	# Same for stationinfo (direction of travel). If it's too late and +	# therefore missing, that's okay. +	$self->wagonorder->get_stationinfo_p( $result->station_uic )->then( +		sub { +			my ($station_info)    = @_; +			my ($platform_number) = ( $result->platform =~ m{(\d+)} ); +			if ( not defined $platform_number ) { +				return; +			} +			my $platform_info = $station_info->{$platform_number}; +			if ( not $platform_info ) { +				return; +			} +			my $prev_stop = ( $result->route_pre )[-1]; +			my $next_stop = ( $result->route_post )[0]; +			my $direction; + +			if ( $platform_info->{kopfgleis} and $next_stop ) { +				$direction = $platform_info->{direction} eq 'r' ? 'l' : 'r'; +			} +			elsif ( $platform_info->{kopfgleis} ) { +				$direction = $platform_info->{direction}; +			} +			elsif ( $prev_stop +				and exists $platform_info->{direction_from}{$prev_stop} ) +			{ +				$direction = $platform_info->{direction_from}{$prev_stop}; +			} +			elsif ( $next_stop +				and exists $platform_info->{direction_from}{$next_stop} ) +			{ +				$direction +				  = $platform_info->{direction_from}{$next_stop} eq 'r' +				  ? 'l' +				  : 'r'; +			} + +			if ($direction) { +				$departure->{direction} = $direction; +			} + +			return; +		}, +		sub { +			# errors don't matter here +			return; +		} +	)->wait; +  	$self->hafas->get_route_timestamps_p( train => $result )->then(  		sub {  			my ( $route_ts, $route_info, $trainsearch ) = @_; diff --git a/lib/DBInfoscreen/Helper/Wagonorder.pm b/lib/DBInfoscreen/Helper/Wagonorder.pm index 5f0555d..1e9324a 100644 --- a/lib/DBInfoscreen/Helper/Wagonorder.pm +++ b/lib/DBInfoscreen/Helper/Wagonorder.pm @@ -142,4 +142,43 @@ sub get_p {  	return $promise;  } +sub get_stationinfo_p { +	my ( $self, $eva ) = @_; + +	my $url = "https://lib.finalrewind.org/dbdb/s/${eva}.json"; + +	my $cache   = $self->{main_cache}; +	my $promise = Mojo::Promise->new; + +	if ( my $content = $cache->thaw($url) ) { +		return $promise->resolve($content); +	} + +	$self->{user_agent}->request_timeout(5)->get_p( $url => $self->{header} ) +	  ->then( +		sub { +			my ($tx) = @_; + +			if ( my $err = $tx->error ) { +				$cache->freeze( $url, {} ); +				$promise->reject("HTTP $err->{code} $err->{message}"); +				return; +			} + +			my $json = $tx->result->json; +			$cache->freeze( $url, $json ); +			$promise->resolve($json); +			return; +		} +	)->catch( +		sub { +			my ($err) = @_; +			$cache->freeze( $url, {} ); +			$promise->reject($err); +			return; +		} +	)->wait; +	return $promise; +} +  1; | 
