From 148cf58c871ae28cfe3b2bcd806375f43f7791e7 Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Sat, 29 Oct 2022 15:25:31 +0200 Subject: Use HAFAS utilization directly --- lib/DBInfoscreen/Controller/Stationboard.pm | 35 +++++-------------- lib/DBInfoscreen/Helper/HAFAS.pm | 1 + lib/DBInfoscreen/Helper/Marudor.pm | 54 ----------------------------- 3 files changed, 10 insertions(+), 80 deletions(-) (limited to 'lib/DBInfoscreen') diff --git a/lib/DBInfoscreen/Controller/Stationboard.pm b/lib/DBInfoscreen/Controller/Stationboard.pm index de1f5e5..5a8c44e 100644 --- a/lib/DBInfoscreen/Controller/Stationboard.pm +++ b/lib/DBInfoscreen/Controller/Stationboard.pm @@ -568,15 +568,12 @@ sub render_train { $self->render_later; 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, $occupancy_req, - $stationinfo_req, $route_req - ); + my @requests + = ( $wagonorder_req, $occupancy_req, $stationinfo_req, $route_req ); if ( $departure->{wr_link} ) { $self->wagonorder->is_available_p( $result, $departure->{wr_link} ) @@ -595,30 +592,9 @@ sub render_train { return; } )->wait; - - # Looks like utilization data is only available for long-distance trains - # – and the few regional trains which also have wagon order data (e.g. - # around Stuttgart). Funky. - $self->marudor->get_train_utilization( train => $result )->then( - sub { - my ( $first, $second ) = @_; - $departure->{utilization} = [ $first, $second ]; - return; - }, - sub { - $departure->{utilization} = undef; - return; - } - )->finally( - sub { - $utilization_req->resolve; - return; - } - )->wait; } else { $wagonorder_req->resolve; - $utilization_req->resolve; } $self->marudor->get_efa_occupancy( @@ -702,6 +678,13 @@ sub render_train { $departure->{trip_id} = $journey->id; + if ( my $load = $route_ts->{$station_name}{load} ) { + if ( %{$load} ) { + $departure->{utilization} + = [ $load->{FIRST}, $load->{SECOND} ]; + } + } + # If a train number changes on the way, IRIS routes are incomplete, # whereas HAFAS data has all stops -> merge HAFAS stops into IRIS # stops. This is a rare case, one point where it can be observed is diff --git a/lib/DBInfoscreen/Helper/HAFAS.pm b/lib/DBInfoscreen/Helper/HAFAS.pm index b02deea..2fb088a 100644 --- a/lib/DBInfoscreen/Helper/HAFAS.pm +++ b/lib/DBInfoscreen/Helper/HAFAS.pm @@ -362,6 +362,7 @@ sub get_route_timestamps_p { rt_dep => $stop->{rt_dep}, arr_delay => $stop->{arr_delay}, dep_delay => $stop->{dep_delay}, + load => $stop->{load}, isCancelled => ( ( $stop->{arr_cancelled} or not $stop->{sched_arr} ) and diff --git a/lib/DBInfoscreen/Helper/Marudor.pm b/lib/DBInfoscreen/Helper/Marudor.pm index 15955a3..352829b 100644 --- a/lib/DBInfoscreen/Helper/Marudor.pm +++ b/lib/DBInfoscreen/Helper/Marudor.pm @@ -116,58 +116,4 @@ sub get_efa_occupancy { return $promise; } -sub get_train_utilization { - my ( $self, %opt ) = @_; - - my $promise = Mojo::Promise->new; - my $train = $opt{train}; - - if ( not $train->sched_departure ) { - $promise->reject("train has no departure"); - return $promise; - } - - my $train_no = $train->train_no; - my $this_station = $train->station; - my @route = $train->route_post; - my $next_station; - my $dep = $train->sched_departure->iso8601; - - if ( @route > 1 ) { - $next_station = $route[1]; - } - else { - $next_station = $route[0]; - } - - if ( not $next_station ) { - $promise->reject("train has no next_station"); - return $promise; - } - - $this_station - = url_escape( encode( 'utf-8', decode( 'iso-8859-15', $this_station ) ) ); - $next_station - = url_escape( encode( 'utf-8', decode( 'iso-8859-15', $next_station ) ) ); - - $self->get_json_p( $self->{realtime_cache}, -"https://bahn.expert/api/hafas/v2/auslastung/${this_station}/${next_station}/${train_no}/${dep}" - )->then( - sub { - my ($utilization_json) = @_; - - $promise->resolve( $utilization_json->{first}, - $utilization_json->{second} ); - return; - } - )->catch( - sub { - $promise->reject; - return; - } - )->wait; - - return $promise; -} - 1; -- cgit v1.2.3