From ffeeb11e5a2142824accde644391c28ee3425127 Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Mon, 5 Sep 2022 21:06:05 +0200 Subject: get_connecting_trains_p: remove trains with identical routes to current one --- lib/Travelynx/Controller/Traveling.pm | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/lib/Travelynx/Controller/Traveling.pm b/lib/Travelynx/Controller/Traveling.pm index 007b725..a8a14ec 100755 --- a/lib/Travelynx/Controller/Traveling.pm +++ b/lib/Travelynx/Controller/Traveling.pm @@ -99,6 +99,7 @@ sub get_connecting_trains_p { @{ $stationboard->{results} }; my @results; my @cancellations; + my $excluded_train; my %via_count = map { $_ => 0 } @destinations; for my $train ( @{ $stationboard->{results} } ) { if ( not $train->departure ) { @@ -113,6 +114,7 @@ sub get_connecting_trains_p { if ( $exclude_train_id and $train->train_id eq $exclude_train_id ) { + $excluded_train = $train; next; } @@ -167,13 +169,27 @@ sub get_connecting_trains_p { map { [ $_, - $_->[0]->departure->epoch // $_->[0]->sched_departure->epoch + $_->[0]->departure->epoch + // $_->[0]->sched_departure->epoch ] } @results; @cancellations = map { $_->[0] } sort { $a->[1] <=> $b->[1] } map { [ $_, $_->[0]->sched_departure->epoch ] } @cancellations; + # remove trains whose route matches the excluded one's + if ($excluded_train) { + my $route_pre = join( '|', reverse $excluded_train->route_pre ); + @results + = grep { join( '|', $_->[0]->route_post ) ne $route_pre } + @results; + my $route_post = join( '|', $excluded_train->route_post ); + @results + = grep { join( '|', $_->[0]->route_post ) ne $route_post } + @results; + } + + # add message IDs and 'transfer short' hints for my $result (@results) { my $train = $result->[0]; my @message_ids -- cgit v1.2.3