summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorBirte Kristina Friesel <derf@finalrewind.org>2023-10-01 10:49:36 +0200
committerBirte Kristina Friesel <derf@finalrewind.org>2023-10-01 10:49:36 +0200
commitcbc433f76c13c1eaa2ed5f7b4dddc51e421153ec (patch)
tree094f2275f6be80be503f8a9eebc3d9773908cbb3 /lib
parent4a2897c1f812d3deb3b799b8c10b67dd2d1f11f6 (diff)
suggested connections: avoid fetching IRIS trains via HAFAS
Diffstat (limited to 'lib')
-rwxr-xr-xlib/Travelynx/Controller/Traveling.pm22
-rwxr-xr-xlib/Travelynx/Model/Journeys.pm9
2 files changed, 24 insertions, 7 deletions
diff --git a/lib/Travelynx/Controller/Traveling.pm b/lib/Travelynx/Controller/Traveling.pm
index 12bfd0f..a665758 100755
--- a/lib/Travelynx/Controller/Traveling.pm
+++ b/lib/Travelynx/Controller/Traveling.pm
@@ -65,8 +65,10 @@ sub get_connecting_trains_p {
return $promise->reject;
}
- my @destinations
- = uniq_by { $_->{name} } $self->journeys->get_connection_targets(%opt);
+ my ( $dest_ids, $destinations )
+ = $self->journeys->get_connection_targets(%opt);
+
+ my @destinations = uniq_by { $_->{name} } @{$destinations};
if ($exclude_via) {
@destinations = grep { $_->{name} ne $exclude_via } @destinations;
@@ -76,6 +78,12 @@ sub get_connecting_trains_p {
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 $lookahead
= $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 %via_count = map { $_->{name} => 0 } @destinations;
- if ( $eva >= 8000000
+ if ( $iris_eva >= 8000000
and List::Util::any { $_->{eva} >= 8000000 } @destinations )
{
$self->iris->get_departures_p(
- station => $eva,
+ station => $iris_eva,
lookbehind => 10,
lookahead => $lookahead,
with_related => 1
@@ -323,6 +331,12 @@ sub get_connecting_trains_p {
if ( $hafas_train->{iris_seen} ) {
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 $dest (@destinations) {
if ( $stop->{name}
diff --git a/lib/Travelynx/Model/Journeys.pm b/lib/Travelynx/Model/Journeys.pm
index 3f2c0dd..5fa7e56 100755
--- a/lib/Travelynx/Model/Journeys.pm
+++ b/lib/Travelynx/Model/Journeys.pm
@@ -1726,13 +1726,16 @@ sub get_connection_targets {
my $min_count = $opt{min_count} // 3;
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);
if ( not $dest_id ) {
- return;
+ return ( [], [] );
}
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 } )
->map( sub { shift->{dest} } )->each;
@destinations = $self->{stations}->get_by_evas(@destinations);
- return @destinations;
+ return ( $dest_ids, \@destinations );
}
sub update_visibility {