diff options
| author | Birte Kristina Friesel <derf@finalrewind.org> | 2025-12-27 20:11:26 +0100 |
|---|---|---|
| committer | Birte Kristina Friesel <derf@finalrewind.org> | 2025-12-27 20:11:26 +0100 |
| commit | eade158164e93484c1ca00e5005ce66bef58c704 (patch) | |
| tree | c692a1ada4e5c666a6f16f83121036e1f3607d1d /lib | |
| parent | 364137b9b6339b724b109160e6e0d3904b022037 (diff) | |
IRIS: show connections at destination while checked in
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/Travelynx/Command/work.pm | 35 | ||||
| -rw-r--r-- | lib/Travelynx/Helper/DBRIS.pm | 20 | ||||
| -rw-r--r-- | lib/Travelynx/Helper/IRIS.pm | 44 |
3 files changed, 97 insertions, 2 deletions
diff --git a/lib/Travelynx/Command/work.pm b/lib/Travelynx/Command/work.pm index d6e70ed..41325d2 100644 --- a/lib/Travelynx/Command/work.pm +++ b/lib/Travelynx/Command/work.pm @@ -782,6 +782,41 @@ sub run { $self->app->add_stationinfo( $uid, 0, $train->train_id, $dep, $arr ); } + if ( $now->epoch - $entry->{real_arr_ts} < 900 ) { + my @destinations + = $self->app->journeys->get_connection_targets( + uid => $uid, + backend_id => $entry->{backend_id}, + eva => $arr, + exclude => $dep, + ); + $self->app->iris->get_connections_p( + station => $arr, + timestamp => $entry->{real_arr}, + destinations => \@destinations + )->then( + sub { + my ($suggestions) = @_; + $self->app->in_transit->update_data( + uid => $uid, + train_id => $train_id, + data => { + connection_suggestions_iris => + $suggestions + }, + ); + return; + } + )->catch( + sub { + my ($err) = @_; + $self->app->log->debug( +"work($uid) @ DBRIS $entry->{backend_name}: get_departures_p($arr): $err" + ); + return; + } + )->wait; + } } elsif ( $entry->{real_arr_ts} ) { my ( undef, $error ) = $self->app->checkout_p( diff --git a/lib/Travelynx/Helper/DBRIS.pm b/lib/Travelynx/Helper/DBRIS.pm index e1f52eb..6441a98 100644 --- a/lib/Travelynx/Helper/DBRIS.pm +++ b/lib/Travelynx/Helper/DBRIS.pm @@ -234,8 +234,8 @@ sub grep_suggestions { ts => ( $dep->sched_dep // $dep->dep )->epoch, sort_ts => $dep->dep->epoch, is_cancelled => $dep->is_cancelled, - stop_eva => $dep->{stop_eva}, - maybe_line_no => $dep->{maybe_line_no}, + stop_eva => $dep->stop_eva, + maybe_line_no => $dep->maybe_line_no, sched_hhmm => $dep->sched_dep->strftime('%H:%M'), rt_hhmm => $dep->dep->strftime('%H:%M'), delay => $dep->delay, @@ -247,11 +247,27 @@ sub grep_suggestions { if ( $dep->destination and $dep->destination eq $dest->{name} ) { + if ( not $dep->is_cancelled ) { + $via_count{ $dep->stop_eva } += 1; + } + if ( $max_per_dest + and $via_count{ $dep->stop_eva } > $max_per_dest ) + { + next destination; + } push( @suggestions, [ $dep_json, $dest ] ); next destination; } for my $via_name ( $dep->via ) { if ( $via_name eq $dest->{name} ) { + if ( not $dep->is_cancelled ) { + $via_count{ $dep->stop_eva } += 1; + } + if ( $max_per_dest + and $via_count{ $dep->stop_eva } > $max_per_dest ) + { + next destination; + } push( @suggestions, [ $dep_json, $dest ] ); next destination; } diff --git a/lib/Travelynx/Helper/IRIS.pm b/lib/Travelynx/Helper/IRIS.pm index d42e7a3..7a4a274 100644 --- a/lib/Travelynx/Helper/IRIS.pm +++ b/lib/Travelynx/Helper/IRIS.pm @@ -201,17 +201,61 @@ sub get_departures_p { } } +sub get_connections_p { + my ( $self, %opt ) = @_; + my $promise = Mojo::Promise->new; + my $destinations = $opt{destinations}; + + $self->get_departures_p( + station => $opt{station}, + timestamp => $opt{timestamp}, + lookbehind => 0, + lookahead => 60, + with_related => 1, + )->then( + sub { + my ($res) = @_; + my @suggestions = $self->grep_suggestions( + results => $res->{results}, + destinations => $destinations, + max_per_dest => 2 + ); + @suggestions + = sort { $a->[0]{sort_ts} <=> $b->[0]{sort_ts} } @suggestions; + $promise->resolve( \@suggestions ); + return; + } + )->catch( + sub { + my ($err) = @_; + $promise->reject("get_departures_p($opt{station}): $err"); + return; + } + )->wait; + return $promise; +} + sub grep_suggestions { my ( $self, %opt ) = @_; my $results = $opt{results}; my $destinations = $opt{destinations}; + my $max_per_dest = $opt{max_per_dest}; my @suggestions; + my %via_count; for my $dep ( @{$results} ) { destination: for my $dest ( @{$destinations} ) { for my $via_name ( $dep->route_post ) { if ( $via_name eq $dest->{name} ) { + if ( not $dep->departure_is_cancelled ) { + $via_count{ $dep->station_uic } += 1; + } + if ( $max_per_dest + and $via_count{ $dep->station_uic } > $max_per_dest ) + { + next destination; + } my $dep_json = { id => $dep->train_id, ts => |
