suggested connections: avoid fetching IRIS trains via HAFAS

This commit is contained in:
Birte Kristina Friesel 2023-10-01 10:49:36 +02:00
parent 4a2897c1f8
commit cbc433f76c
No known key found for this signature in database
GPG key ID: 19E6E524EBB177BA
2 changed files with 24 additions and 7 deletions

View file

@ -65,8 +65,10 @@ sub get_connecting_trains_p {
return $promise->reject; return $promise->reject;
} }
my @destinations my ( $dest_ids, $destinations )
= uniq_by { $_->{name} } $self->journeys->get_connection_targets(%opt); = $self->journeys->get_connection_targets(%opt);
my @destinations = uniq_by { $_->{name} } @{$destinations};
if ($exclude_via) { if ($exclude_via) {
@destinations = grep { $_->{name} ne $exclude_via } @destinations; @destinations = grep { $_->{name} ne $exclude_via } @destinations;
@ -76,6 +78,12 @@ sub get_connecting_trains_p {
return $promise->reject; return $promise->reject;
} }
my $iris_eva = $eva;
if ( $eva < 8000000 ) {
$iris_eva = ( List::Util::first { $_ >= 8000000 } @{$dest_ids} )
// $eva;
}
my $can_check_in = not $arr_epoch || ( $arr_countdown // 1 ) < 0; my $can_check_in = not $arr_epoch || ( $arr_countdown // 1 ) < 0;
my $lookahead my $lookahead
= $can_check_in ? 40 : ( ( ${arr_countdown} // 0 ) / 60 + 40 ); = $can_check_in ? 40 : ( ( ${arr_countdown} // 0 ) / 60 + 40 );
@ -83,11 +91,11 @@ sub get_connecting_trains_p {
my $iris_promise = Mojo::Promise->new; my $iris_promise = Mojo::Promise->new;
my %via_count = map { $_->{name} => 0 } @destinations; my %via_count = map { $_->{name} => 0 } @destinations;
if ( $eva >= 8000000 if ( $iris_eva >= 8000000
and List::Util::any { $_->{eva} >= 8000000 } @destinations ) and List::Util::any { $_->{eva} >= 8000000 } @destinations )
{ {
$self->iris->get_departures_p( $self->iris->get_departures_p(
station => $eva, station => $iris_eva,
lookbehind => 10, lookbehind => 10,
lookahead => $lookahead, lookahead => $lookahead,
with_related => 1 with_related => 1
@ -323,6 +331,12 @@ sub get_connecting_trains_p {
if ( $hafas_train->{iris_seen} ) { if ( $hafas_train->{iris_seen} ) {
next; next;
} }
if ( $iris_eva != $eva
and $hafas_train->station_eva == $iris_eva )
{
# better safe than sorry, for now
next;
}
for my $stop ( $hafas_train->route ) { for my $stop ( $hafas_train->route ) {
for my $dest (@destinations) { for my $dest (@destinations) {
if ( $stop->{name} if ( $stop->{name}

View file

@ -1726,13 +1726,16 @@ sub get_connection_targets {
my $min_count = $opt{min_count} // 3; my $min_count = $opt{min_count} // 3;
if ( $opt{destination_name} ) { if ( $opt{destination_name} ) {
return ( { eva => $opt{eva}, name => $opt{destination_name} } ); return (
[],
[ { eva => $opt{eva}, name => $opt{destination_name} } ]
);
} }
my $dest_id = $opt{eva} // $self->get_latest_dest_id(%opt); my $dest_id = $opt{eva} // $self->get_latest_dest_id(%opt);
if ( not $dest_id ) { if ( not $dest_id ) {
return; return ( [], [] );
} }
my $dest_ids = [ $dest_id, $self->{stations}->get_meta( eva => $dest_id ) ]; my $dest_ids = [ $dest_id, $self->{stations}->get_meta( eva => $dest_id ) ];
@ -1754,7 +1757,7 @@ sub get_connection_targets {
= $res->hashes->grep( sub { shift->{count} >= $min_count } ) = $res->hashes->grep( sub { shift->{count} >= $min_count } )
->map( sub { shift->{dest} } )->each; ->map( sub { shift->{dest} } )->each;
@destinations = $self->{stations}->get_by_evas(@destinations); @destinations = $self->{stations}->get_by_evas(@destinations);
return @destinations; return ( $dest_ids, \@destinations );
} }
sub update_visibility { sub update_visibility {