From bb6acc0c6bc7a7aa9bc47cf87c5f0edf973fea21 Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Tue, 26 Jul 2022 10:41:44 +0200 Subject: Use async IRIS API for /s/ --- lib/Travelynx/Controller/Traveling.pm | 67 +++++++++++++++++++---------------- 1 file changed, 36 insertions(+), 31 deletions(-) (limited to 'lib/Travelynx/Controller/Traveling.pm') diff --git a/lib/Travelynx/Controller/Traveling.pm b/lib/Travelynx/Controller/Traveling.pm index d6253ac..ce4ab8e 100755 --- a/lib/Travelynx/Controller/Traveling.pm +++ b/lib/Travelynx/Controller/Traveling.pm @@ -604,45 +604,50 @@ sub station { my $station = $self->stash('station'); my $train = $self->param('train'); - my $status = $self->iris->get_departures( + $self->render_later; + $self->iris->get_departures_p( station => $station, lookbehind => 120, lookahead => 30, with_related => 1 - ); + )->then( + sub { + my ($status) = @_; - if ( $status->{errstr} ) { - $self->render( - 'landingpage', - version => $self->app->config->{version} // 'UNKNOWN', - with_autocomplete => 1, - with_geolocation => 1, - error => $status->{errstr} - ); - } - else { - # You can't check into a train which terminates here - my @results = grep { $_->departure } @{ $status->{results} }; + # You can't check into a train which terminates here + my @results = grep { $_->departure } @{ $status->{results} }; - @results = map { $_->[0] } - sort { $b->[1] <=> $a->[1] } - map { [ $_, $_->departure->epoch // $_->sched_departure->epoch ] } - @results; + @results = map { $_->[0] } + sort { $b->[1] <=> $a->[1] } + map { [ $_, $_->departure->epoch // $_->sched_departure->epoch ] } + @results; - if ($train) { - @results - = grep { $_->type . ' ' . $_->train_no eq $train } @results; - } + if ($train) { + @results + = grep { $_->type . ' ' . $_->train_no eq $train } @results; + } - $self->render( - 'departures', - eva => $status->{station_eva}, - results => \@results, - station => $status->{station_name}, - related_stations => $status->{related_stations}, - title => "travelynx: $status->{station_name}", - ); - } + $self->render( + 'departures', + eva => $status->{station_eva}, + results => \@results, + station => $status->{station_name}, + related_stations => $status->{related_stations}, + title => "travelynx: $status->{station_name}", + ); + } + )->catch( + sub { + my ($status) = @_; + $self->render( + 'landingpage', + version => $self->app->config->{version} // 'UNKNOWN', + with_autocomplete => 1, + with_geolocation => 1, + error => $status->{errstr} + ); + } + )->wait; $self->users->mark_seen( uid => $self->current_user->{id} ); } -- cgit v1.2.3