diff options
author | Daniel Friesel <derf@finalrewind.org> | 2020-09-16 17:21:49 +0200 |
---|---|---|
committer | Daniel Friesel <derf@finalrewind.org> | 2020-09-16 17:21:49 +0200 |
commit | 2ca4a50194108d378b961fb8ddc9a0455933d96d (patch) | |
tree | e9e7dee370b54f473bdfcaad543f085dd16a92d4 /lib/DBInfoscreen/Controller | |
parent | 65aab8c7f827d0c0edf1249ea30c287c5f91ace8 (diff) |
all requests but IRIS are async now
Diffstat (limited to 'lib/DBInfoscreen/Controller')
-rw-r--r-- | lib/DBInfoscreen/Controller/Stationboard.pm | 23 | ||||
-rw-r--r-- | lib/DBInfoscreen/Controller/Wagenreihung.pm | 43 |
2 files changed, 17 insertions, 49 deletions
diff --git a/lib/DBInfoscreen/Controller/Stationboard.pm b/lib/DBInfoscreen/Controller/Stationboard.pm index 3b93ac3..1ea238c 100644 --- a/lib/DBInfoscreen/Controller/Stationboard.pm +++ b/lib/DBInfoscreen/Controller/Stationboard.pm @@ -412,13 +412,6 @@ sub render_train { ) ]; - if ( $departure->{wr_link} - and - not $self->wagonorder->is_available( $result, $departure->{wr_link} ) ) - { - $departure->{wr_link} = undef; - } - my $linetype = 'bahn'; if ( $departure->{train_type} eq 'S' ) { $linetype = 'sbahn'; @@ -446,6 +439,22 @@ sub render_train { $self->render_later; + # if wagonorder->is_available_p takes longer than get_route_timestamps_p, + # we'll have a useless (non-working) wagonorder link. That's okay. + if ( $departure->{wr_link} ) { + $self->wagonorder->is_available_p( $result, $departure->{wr_link} ) + ->then( + sub { + # great! + return; + }, + sub { + $departure->{wr_link} = undef; + return; + } + )->wait; + } + $self->hafas->get_route_timestamps_p( train => $result )->then( sub { my ( $route_ts, $route_info, $trainsearch ) = @_; diff --git a/lib/DBInfoscreen/Controller/Wagenreihung.pm b/lib/DBInfoscreen/Controller/Wagenreihung.pm index 7b59227..ecdb129 100644 --- a/lib/DBInfoscreen/Controller/Wagenreihung.pm +++ b/lib/DBInfoscreen/Controller/Wagenreihung.pm @@ -4,53 +4,12 @@ use Mojo::Base 'Mojolicious::Controller'; # Copyright (C) 2011-2019 Daniel Friesel <derf+dbf@finalrewind.org> # License: 2-Clause BSD -use Encode qw(decode); -use JSON; -use Mojo::Promise; use Travel::Status::DE::DBWagenreihung; my $dbf_version = qx{git describe --dirty} || 'experimental'; chomp $dbf_version; -sub get_wagenreihung_p { - my ( $self, $train_no, $api_ts ) = @_; - - my $url - = "https://www.apps-bahn.de/wr/wagenreihung/1.0/${train_no}/${api_ts}"; - - my $cache = $self->app->cache_iris_rt; - - my $promise = Mojo::Promise->new; - - if ( my $content = $cache->thaw($url) ) { - $promise->resolve($content); - $self->app->log->debug("GET $url (cached)"); - return $promise; - } - - $self->ua->request_timeout(10) - ->get_p( $url, { 'User-Agent' => "dbf.finalrewind.org/${dbf_version}" } ) - ->then( - sub { - my ($tx) = @_; - $self->app->log->debug("GET $url (OK)"); - my $body = decode( 'utf-8', $tx->res->body ); - my $json = JSON->new->decode($body); - - $cache->freeze( $url, $json ); - $promise->resolve($json); - } - )->catch( - sub { - my ($err) = @_; - $self->app->log->debug("GET $url (error: $err)"); - $promise->reject($err); - } - )->wait; - return $promise; -} - sub wagenreihung { my ($self) = @_; my $train = $self->stash('train'); @@ -58,7 +17,7 @@ sub wagenreihung { $self->render_later; - $self->get_wagenreihung_p( $train, $departure )->then( + $self->wagonorder->get_p( $train, $departure )->then( sub { my ($json) = @_; my $wr; |