diff options
| -rw-r--r-- | lib/DBInfoscreen.pm | 22 | ||||
| -rw-r--r-- | lib/DBInfoscreen/Controller/Stationboard.pm | 27 | ||||
| -rw-r--r-- | lib/DBInfoscreen/Helper/Marudor.pm | 29 | ||||
| -rw-r--r-- | templates/_train_details.html.ep | 6 | 
4 files changed, 82 insertions, 2 deletions
| diff --git a/lib/DBInfoscreen.pm b/lib/DBInfoscreen.pm index 4445d7f..70b4b5e 100644 --- a/lib/DBInfoscreen.pm +++ b/lib/DBInfoscreen.pm @@ -295,6 +295,28 @@ sub startup {  	);  	$self->helper( +		'occupancy_icon' => sub { +			my ( $self, $occupancy ) = @_; + +			my @symbols +			  = (qw(help_outline person_outline people priority_high)); +			my $text = 'Auslastung unbekannt'; + +			if ( $occupancy > 2 ) { +				$text = 'Sehr hohe Auslastung'; +			} +			elsif ( $occupancy > 1 ) { +				$text = 'Hohe Auslastung'; +			} +			elsif ( $occupancy > 0 ) { +				$text = 'Geringe Auslastung'; +			} + +			return ( $text, $symbols[$occupancy] ); +		} +	); + +	$self->helper(  		'utilization_icon' => sub {  			my ( $self,  $utilization ) = @_;  			my ( $first, $second )      = @{ $utilization // [ 0, 0 ] }; diff --git a/lib/DBInfoscreen/Controller/Stationboard.pm b/lib/DBInfoscreen/Controller/Stationboard.pm index 8f868a9..169240d 100644 --- a/lib/DBInfoscreen/Controller/Stationboard.pm +++ b/lib/DBInfoscreen/Controller/Stationboard.pm @@ -557,11 +557,14 @@ sub render_train {  	my $wagonorder_req  = Mojo::Promise->new;  	my $utilization_req = Mojo::Promise->new; +	my $occupancy_req   = Mojo::Promise->new;  	my $stationinfo_req = Mojo::Promise->new;  	my $route_req       = Mojo::Promise->new; -	my @requests -	  = ( $wagonorder_req, $utilization_req, $stationinfo_req, $route_req ); +	my @requests = ( +		$wagonorder_req,  $utilization_req, $occupancy_req, +		$stationinfo_req, $route_req +	);  	if ( $departure->{wr_link} ) {  		$self->wagonorder->is_available_p( $result, $departure->{wr_link} ) @@ -606,6 +609,26 @@ sub render_train {  		$utilization_req->resolve;  	} +	$self->marudor->get_efa_occupancy( +		eva      => $result->station_uic, +		train_no => $result->train_no +	)->then( +		sub { +			my ($occupancy) = @_; +			$departure->{occupancy} = $occupancy; +			return; +		}, +		sub { +			$departure->{occupancy} = undef; +			return; +		} +	)->finally( +		sub { +			$occupancy_req->resolve; +			return; +		} +	)->wait; +  	$self->wagonorder->get_stationinfo_p( $result->station_uic )->then(  		sub {  			my ($station_info)    = @_; diff --git a/lib/DBInfoscreen/Helper/Marudor.pm b/lib/DBInfoscreen/Helper/Marudor.pm index dad9dc7..dce22cf 100644 --- a/lib/DBInfoscreen/Helper/Marudor.pm +++ b/lib/DBInfoscreen/Helper/Marudor.pm @@ -80,6 +80,35 @@ sub get_json_p {  	return $promise;  } +sub get_efa_occupancy { +	my ( $self, %opt ) = @_; + +	my $eva      = $opt{eva}; +	my $train_no = $opt{train_no}; +	my $promise  = Mojo::Promise->new; + +	$self->get_json_p( $self->{realtime_cache}, +		"https://vrrf.finalrewind.org/_eva/${eva}.json" )->then( +		sub { +			my ($utilization_json) = @_; + +			if ( $utilization_json->{$train_no}{occupancy} ) { +				$promise->resolve( $utilization_json->{$train_no}{occupancy} ); +				return; +			} +			$promise->reject; +			return; +		} +	)->catch( +		sub { +			$promise->reject; +			return; +		} +	)->wait; + +	return $promise; +} +  sub get_train_utilization {  	my ( $self, %opt ) = @_; diff --git a/templates/_train_details.html.ep b/templates/_train_details.html.ep index 3f03869..6ce9e43 100644 --- a/templates/_train_details.html.ep +++ b/templates/_train_details.html.ep @@ -140,6 +140,12 @@          <%= $text %><span style="padding-right: 0.5em;">.</span> 1. <i class="material-icons" aria-hidden="true" style="padding-right: 0.5em; vertical-align: bottom;"><%= $icon1 %></i> 2. <i class="material-icons" aria-hidden="true" style="vertical-align: bottom;"><%= $icon2 %></i>        </div>  %   } +%   elsif (my $o = $departure->{occupancy}) { +      <div class="verbose"> +%       my ($text, $icon) = occupancy_icon($o); +        <%= $text %><span style="padding-right: 0.5em;">.</span> <i class="material-icons" aria-hidden="true" style="padding-right: 0.5em; vertical-align: bottom;"><%= $icon %></i></i> +      </div> +%   }  %   if ($departure->{moreinfo} and @{$departure->{moreinfo}}) {        Meldungen: | 
