From 5e72665cbdc6904a3162724d220e432993c71dd9 Mon Sep 17 00:00:00 2001 From: Birte Kristina Friesel Date: Fri, 5 Jan 2024 16:22:22 +0100 Subject: train details: use HAFAS route as source of truth. Fixes handling of ring lines --- lib/DBInfoscreen/Helper/HAFAS.pm | 60 +++++++++++++++++++++------------------- 1 file changed, 31 insertions(+), 29 deletions(-) (limited to 'lib/DBInfoscreen/Helper/HAFAS.pm') diff --git a/lib/DBInfoscreen/Helper/HAFAS.pm b/lib/DBInfoscreen/Helper/HAFAS.pm index 525cc45..6ff147f 100644 --- a/lib/DBInfoscreen/Helper/HAFAS.pm +++ b/lib/DBInfoscreen/Helper/HAFAS.pm @@ -29,7 +29,7 @@ sub new { } -sub get_route_timestamps_p { +sub get_route_p { my ( $self, %opt ) = @_; my $promise = Mojo::Promise->new; @@ -88,46 +88,48 @@ sub get_route_timestamps_p { sub { my ($hafas) = @_; my $journey = $hafas->result; - my $ret = {}; - + my @ret; my $station_is_past = 1; for my $stop ( $journey->route ) { - my $name = $stop->loc->name; - $ret->{$name} = $ret->{ $stop->loc->eva } = { - name => $stop->loc->name, - eva => $stop->loc->eva, - sched_arr => $stop->sched_arr, - sched_dep => $stop->sched_dep, - rt_arr => $stop->rt_arr, - rt_dep => $stop->rt_dep, - arr_delay => $stop->arr_delay, - dep_delay => $stop->dep_delay, - arr_cancelled => $stop->arr_cancelled, - dep_cancelled => $stop->dep_cancelled, - platform => $stop->platform, - sched_platform => $stop->sched_platform, - load => $stop->load, - isCancelled => ( - ( $stop->arr_cancelled or not $stop->sched_arr ) - and ( $stop->dep_cancelled or not $stop->sched_dep ) - ), - }; + push( + @ret, + { + name => $stop->loc->name, + eva => $stop->loc->eva, + sched_arr => $stop->sched_arr, + sched_dep => $stop->sched_dep, + rt_arr => $stop->rt_arr, + rt_dep => $stop->rt_dep, + arr_delay => $stop->arr_delay, + dep_delay => $stop->dep_delay, + arr_cancelled => $stop->arr_cancelled, + dep_cancelled => $stop->dep_cancelled, + platform => $stop->platform, + sched_platform => $stop->sched_platform, + load => $stop->load, + isAdditional => $stop->is_additional, + isCancelled => ( + ( $stop->arr_cancelled or not $stop->sched_arr ) + and + ( $stop->dep_cancelled or not $stop->sched_dep ) + ), + } + ); if ( $station_is_past - and not $ret->{$name}{isCancelled} + and not $ret[-1]{isCancelled} and $now->epoch < ( - $ret->{$name}{rt_arr} // $ret->{$name}{rt_dep} - // $ret->{$name}{sched_arr} - // $ret->{$name}{sched_dep} // $now + $ret[-1]{rt_arr} // $ret[-1]{rt_dep} + // $ret[-1]{sched_arr} // $ret[-1]{sched_dep} // $now )->epoch ) { $station_is_past = 0; } - $ret->{$name}{isPast} = $station_is_past; + $ret[-1]{isPast} = $station_is_past; } - $promise->resolve( $ret, $journey ); + $promise->resolve( \@ret, $journey ); return; } )->catch( -- cgit v1.2.3