diff --git a/lib/Travelynx/Controller/Traveling.pm b/lib/Travelynx/Controller/Traveling.pm index d92f23c..3fc3d75 100755 --- a/lib/Travelynx/Controller/Traveling.pm +++ b/lib/Travelynx/Controller/Traveling.pm @@ -24,6 +24,10 @@ sub has_str_in_list { return; } +# when called with "eva" provided: look up connections from eva, either +# for provided backend_id / hafas or (if not provided) for user backend id. +# When calld without "eva": look up connections from current/latest arrival +# eva, using the checkin's backend id. sub get_connecting_trains_p { my ( $self, %opt ) = @_; @@ -44,9 +48,10 @@ sub get_connecting_trains_p { elsif ( $opt{destination_name} ) { $eva = $opt{eva}; } - if (not defined $opt{backend_id}) { - if ($opt{hafas}) { - $opt{backend_id} = $self->stations->get_backend_id(hafas => $opt{hafas}); + if ( not defined $opt{backend_id} ) { + if ( $opt{hafas} ) { + $opt{backend_id} + = $self->stations->get_backend_id( hafas => $opt{hafas} ); } else { $opt{backend_id} = $user->{backend_id}; @@ -75,11 +80,12 @@ sub get_connecting_trains_p { return $promise->reject; } - $self->log->debug("get_connecting_trains_p(backend_id => $opt{backend_id}, eva => $eva)"); + $self->log->debug( + "get_connecting_trains_p(backend_id => $opt{backend_id}, eva => $eva)"); - my $destinations = $self->journeys->get_connection_targets(%opt); + my @destinations = $self->journeys->get_connection_targets(%opt); - my @destinations = uniq_by { $_->{name} } @{$destinations}; + @destinations = uniq_by { $_->{name} } @destinations; if ($exclude_via) { @destinations = grep { $_->{name} ne $exclude_via } @destinations; @@ -89,7 +95,7 @@ sub get_connecting_trains_p { return $promise->reject; } - $self->log->debug(join(q{, }, map { $_->{name} } @destinations)); + $self->log->debug( join( q{, }, map { $_->{name} } @destinations ) ); my $can_check_in = not $arr_epoch || ( $arr_countdown // 1 ) < 0; my $lookahead @@ -253,8 +259,10 @@ sub get_connecting_trains_p { )->wait; } else { + my $hafas_service + = $self->stations->get_hafas_name( backend_id => $opt{backend_id} ); $self->hafas->get_departures_p( - service => $self->stations->get_hafas_name(backend_id => $opt{backend_id}), + service => $hafas_service, eva => $eva, lookbehind => 10, lookahead => $lookahead @@ -285,7 +293,7 @@ sub get_connecting_trains_p { @hafas_trains, [ $hafas_train, $dest, - $arrival, $opt{hafas} + $arrival, $hafas_service ] ); } @@ -340,8 +348,7 @@ sub homepage { and $status->{arrival_countdown} < ( 40 * 60 ) ) { $self->render_later; - $self->get_connecting_trains_p( - backend_id => $status->{backend_id} )->then( + $self->get_connecting_trains_p->then( sub { my ( $connections_iris, $connections_hafas ) = @_; $self->render( @@ -419,8 +426,7 @@ sub status_card { and $status->{arrival_countdown} < ( 40 * 60 ) ) { $self->render_later; - $self->get_connecting_trains_p( - backend_id => $status->{backend_id} )->then( + $self->get_connecting_trains_p->then( sub { my ( $connections_iris, $connections_hafas ) = @_; $self->render( @@ -476,8 +482,7 @@ sub status_card { my $now = DateTime->now( time_zone => 'Europe/Berlin' ); if ( $now->epoch - $status->{timestamp}->epoch < ( 30 * 60 ) ) { $self->render_later; - $self->get_connecting_trains_p( hafas => $self->param('hafas') ) - ->then( + $self->get_connecting_trains_p->then( sub { my ( $connections_iris, $connections_hafas ) = @_; $self->render( @@ -994,12 +999,15 @@ sub station { $connections_p = $self->get_connecting_trains_p( eva => $user_status->{cancellation}{dep_eva}, destination_name => - $user_status->{cancellation}{arr_name} + $user_status->{cancellation}{arr_name}, + hafas => $hafas_service, ); } else { $connections_p = $self->get_connecting_trains_p( - eva => $status->{station_eva} ); + eva => $status->{station_eva}, + hafas => $hafas_service + ); } } diff --git a/lib/Travelynx/Model/Journeys.pm b/lib/Travelynx/Model/Journeys.pm index e66e370..e309d37 100755 --- a/lib/Travelynx/Model/Journeys.pm +++ b/lib/Travelynx/Model/Journeys.pm @@ -837,7 +837,10 @@ sub get_latest_checkout_stations { my $res = $db->select( 'journeys_str', - [ 'arr_name', 'arr_eva', 'train_id', 'backend_id', 'backend_name', 'is_hafas' ], + [ + 'arr_name', 'arr_eva', 'train_id', 'backend_id', + 'backend_name', 'is_hafas' + ], { user_id => $uid, cancelled => 0 @@ -858,9 +861,9 @@ sub get_latest_checkout_stations { push( @ret, { - name => $row->{arr_name}, - eva => $row->{arr_eva}, - hafas => $row->{is_hafas} ? $row->{backend_name} : 0, + name => $row->{arr_name}, + eva => $row->{arr_eva}, + hafas => $row->{is_hafas} ? $row->{backend_name} : 0, backend_id => $row->{backend_id}, } ); @@ -1807,7 +1810,7 @@ sub get_connection_targets { backend_id => $opt{backend_id}, evas => [@destinations] ); - return \@destinations; + return @destinations; } sub update_visibility {