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: |