From 619646b533bc27575131f7a521aac30a1431bfb1 Mon Sep 17 00:00:00 2001 From: Derf Null Date: Thu, 8 Jun 2023 10:20:13 +0200 Subject: [PATCH] warn when trying to check out at invalid unscheduled station Closes #72 --- lib/Travelynx/Controller/Traveling.pm | 33 +++++++++++++--- templates/departures.html.ep | 55 ++++++++++++++++++--------- 2 files changed, 66 insertions(+), 22 deletions(-) diff --git a/lib/Travelynx/Controller/Traveling.pm b/lib/Travelynx/Controller/Traveling.pm index 2463bb5..d309753 100755 --- a/lib/Travelynx/Controller/Traveling.pm +++ b/lib/Travelynx/Controller/Traveling.pm @@ -845,20 +845,37 @@ sub station { } @results; } + my $user_status = $self->get_user_status; + + my $can_check_out = 0; + if ( $user_status->{checked_in} ) { + for my $stop ( @{ $user_status->{route_after} } ) { + if ( + $stop->[1] eq $status->{station_eva} + or List::Util::any { $stop->[1] eq $_->{uic} } + @{ $status->{related_stations} } + ) + { + $can_check_out = 1; + last; + } + } + } + my $connections_p; if ($train) { @results = grep { $_->type . ' ' . $_->train_no eq $train } @results; } else { - my $user = $self->get_user_status; - if ( $user->{cancellation} + if ( $user_status->{cancellation} and $status->{station_eva} eq - $user->{cancellation}{dep_eva} ) + $user_status->{cancellation}{dep_eva} ) { $connections_p = $self->get_connecting_trains_p( - eva => $user->{cancellation}{dep_eva}, - destination_name => $user->{cancellation}{arr_name} + eva => $user_status->{cancellation}{dep_eva}, + destination_name => + $user_status->{cancellation}{arr_name} ); } else { @@ -878,6 +895,8 @@ sub station { hafas => $use_hafas, station => $status->{station_name}, related_stations => $status->{related_stations}, + user_status => $user_status, + can_check_out => $can_check_out, connections => $connecting_trains, title => "travelynx: $status->{station_name}", version => $self->app->config->{version} @@ -893,6 +912,8 @@ sub station { hafas => $use_hafas, station => $status->{station_name}, related_stations => $status->{related_stations}, + user_status => $user_status, + can_check_out => $can_check_out, title => "travelynx: $status->{station_name}", version => $self->app->config->{version} // 'UNKNOWN', @@ -908,6 +929,8 @@ sub station { hafas => $use_hafas, station => $status->{station_name}, related_stations => $status->{related_stations}, + user_status => $user_status, + can_check_out => $can_check_out, title => "travelynx: $status->{station_name}", version => $self->app->config->{version} // 'UNKNOWN', ); diff --git a/templates/departures.html.ep b/templates/departures.html.ep index 857be74..852f876 100644 --- a/templates/departures.html.ep +++ b/templates/departures.html.ep @@ -6,37 +6,50 @@ % } -% my $status = $self->get_user_status; % my $have_connections = 0; -% if ($status->{checked_in}) { +% if ($user_status->{checked_in}) {
Aktuell eingecheckt -

In <%= $status->{train_type} %> <%= $status->{train_no} %> - ab <%= $status->{dep_name} %>

+

In <%= $user_status->{train_type} %> <%= $user_status->{train_no} %> + ab <%= $user_status->{dep_name} %>

% } -% elsif ($status->{cancellation} and $station eq $status->{cancellation}{dep_name}) { +% elsif ($user_status->{cancellation} and $station eq $user_status->{cancellation}{dep_name}) {
- %= include '_cancelled_departure', journey => $status->{cancellation}; + %= include '_cancelled_departure', journey => $user_status->{cancellation};
% } -% elsif ($status->{timestamp_delta} < 180) { +% elsif ($user_status->{timestamp_delta} < 180) {
- %= include '_checked_out', journey => $status; + %= include '_checked_out', journey => $user_status;
% } @@ -55,7 +68,13 @@ % if ($have_connections) { Alle Abfahrten – % } - % if (@{$results}) { + % if ($user_status->{checked_in} and not $can_check_out) { + Diese Station liegt nicht auf der Route deines aktuellen Checkins. + Falls du aktuell nicht mit <%= $user_status->{train_type} %> <%= $user_status->{train_no} %> unterwegs bist, kannst du den Checkin rückgängig machen. + Falls es sich bei <%= $station %> um einen nicht in den Echtzeitdaten abgebildeten Zusatzhalt handelt, kannst du hier auchecken. + Da travelynx nicht weiß, welcher der beiden Fälle zutrifft, sind bis dahin keine neuen Checkins möglich. + % } + % elsif (@{$results}) { Zug auswählen zum Einchecken. % } % else { @@ -63,11 +82,13 @@ und maximal 120 Minuten nach Abfahrt möglich. % }

- % if ($hafas) { - %= include '_departures_hafas', results => $results; - % } - % else { - %= include '_departures_iris', results => $results; + % if (not ($user_status->{checked_in} and not $can_check_out)) { + % if ($hafas) { + %= include '_departures_hafas', results => $results; + % } + % else { + %= include '_departures_iris', results => $results; + % } % }