From 6d45533c14a45b548080077bd154ee06af571bf3 Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Fri, 4 Oct 2019 23:27:45 +0200 Subject: [PATCH] mark cancelled stops in checkin view --- lib/Travelynx.pm | 53 +++++++++++++++++++++++++++++++++-- lib/Travelynx/Command/work.pm | 4 +-- templates/_checked_in.html.ep | 16 +++++++++-- 3 files changed, 67 insertions(+), 6 deletions(-) diff --git a/lib/Travelynx.pm b/lib/Travelynx.pm index 860ba87..ad4fd33 100755 --- a/lib/Travelynx.pm +++ b/lib/Travelynx.pm @@ -399,7 +399,7 @@ sub startup { sched_departure => $train->sched_departure, real_departure => $train->departure, route => $json->encode( - [ map { [$_] } $train->route ] + [ $self->route_diff($train) ] ), messages => $json->encode( [ @@ -636,7 +636,7 @@ sub startup { real_arrival => $train->arrival, cancelled => $train->arrival_is_cancelled ? 1 : 0, route => - $json->encode( [ map { [$_] } $train->route ] ), + $json->encode( [ $self->route_diff($train) ] ), messages => $json->encode( [ map { [ $_->[0]->epoch, $_->[1] ] } @@ -1574,6 +1574,55 @@ sub startup { } ); + $self->helper( + 'route_diff' => sub { + my ( $self, $train ) = @_; + my @json_route; + my @route = $train->route; + my @sched_route = $train->sched_route; + + say "real is " . join( " - ", @route ); + say "sched is " . join( " - ", @sched_route ); + + my $route_idx = 0; + my $sched_idx = 0; + + while ( $route_idx <= $#route and $sched_idx <= $#sched_route ) { + if ( $route[$route_idx] eq $sched_route[$sched_idx] ) { + push( @json_route, [ $route[$route_idx], {}, undef ] ); + $route_idx++; + $sched_idx++; + } + + # this branch is inefficient, but won't be taken frequently + elsif ( not( grep { $_ eq $route[$route_idx] } @sched_route ) ) + { + push( @json_route, + [ $route[$route_idx], {}, 'additional' ], + ); + $route_idx++; + } + else { + push( @json_route, + [ $sched_route[$sched_idx], {}, 'cancelled' ], + ); + $sched_idx++; + } + } + while ( $route_idx <= $#route ) { + push( @json_route, [ $route[$route_idx], {}, 'additional' ], ); + $route_idx++; + } + while ( $sched_idx <= $#sched_route ) { + push( @json_route, + [ $sched_route[$sched_idx], {}, 'cancelled' ], + ); + $sched_idx++; + } + return @json_route; + } + ); + $self->helper( 'get_dbdb_station_p' => sub { my ( $self, $ds100 ) = @_; diff --git a/lib/Travelynx/Command/work.pm b/lib/Travelynx/Command/work.pm index 6970918..b9a8520 100644 --- a/lib/Travelynx/Command/work.pm +++ b/lib/Travelynx/Command/work.pm @@ -56,7 +56,7 @@ sub run { dep_platform => $train->platform, real_departure => $train->departure, route => - $json->encode( [ map { [$_] } $train->route ] ), + $json->encode( [ $self->app->route_diff($train) ] ), messages => $json->encode( [ map { [ $_->[0]->epoch, $_->[1] ] } @@ -103,7 +103,7 @@ sub run { sched_arrival => $train->sched_arrival, real_arrival => $train->arrival, route => - $json->encode( [ map { [$_] } $train->route ] ), + $json->encode( [ $self->app->route_diff($train) ] ), messages => $json->encode( [ map { [ $_->[0]->epoch, $_->[1] ] } diff --git a/templates/_checked_in.html.ep b/templates/_checked_in.html.ep index 053904a..44d57dc 100644 --- a/templates/_checked_in.html.ep +++ b/templates/_checked_in.html.ep @@ -200,9 +200,15 @@ % for my $station (@{$journey->{route_after}}) { <%= $station->[0] %> - % if ($station->[1]{rt_arr}) { + % if ($station->[2] and $station->[2] eq 'cancelled') { + entfällt + % } + % elsif ($station->[1]{rt_arr}) { <%= $station->[1]{rt_arr}->strftime('%H:%M') %> % } + % elsif ($station->[2] and $station->[2] eq 'additional') { + Zusatzhalt + % } % } @@ -247,9 +253,15 @@ % for my $station (@{$journey->{route_after}}) { % my $is_dest = ($journey->{arr_name} and $station->[0] eq $journey->{arr_name}); <%= $station->[0] %> - % if ($station->[1]{rt_arr}) { + % if ($station->[2] and $station->[2] eq 'cancelled') { + entfällt + % } + % elsif ($station->[1]{rt_arr}) { <%= $station->[1]{rt_arr}->strftime('%H:%M') %> % } + % elsif ($station->[2] and $station->[2] eq 'additional') { + Zusatzhalt + % } % }