diff options
| author | Birte Kristina Friesel <derf@finalrewind.org> | 2023-10-01 10:49:36 +0200 | 
|---|---|---|
| committer | Birte Kristina Friesel <derf@finalrewind.org> | 2023-10-01 10:49:36 +0200 | 
| commit | cbc433f76c13c1eaa2ed5f7b4dddc51e421153ec (patch) | |
| tree | 094f2275f6be80be503f8a9eebc3d9773908cbb3 /lib | |
| parent | 4a2897c1f812d3deb3b799b8c10b67dd2d1f11f6 (diff) | |
suggested connections: avoid fetching IRIS trains via HAFAS
Diffstat (limited to 'lib')
| -rwxr-xr-x | lib/Travelynx/Controller/Traveling.pm | 22 | ||||
| -rwxr-xr-x | lib/Travelynx/Model/Journeys.pm | 9 | 
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 { | 
