summaryrefslogtreecommitdiff
path: root/lib/DBInfoscreen
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2021-01-11 22:09:00 +0100
committerDaniel Friesel <derf@finalrewind.org>2021-01-11 22:09:00 +0100
commitdcdea4247b6457202ce746814ff44d249c32d8b5 (patch)
tree3b009ca49536d257e736d714a84fee142cdbc914 /lib/DBInfoscreen
parentd7376340ed10f412caefad198dfb2bac40448bbb (diff)
train details: show cycle (if available)
Diffstat (limited to 'lib/DBInfoscreen')
-rw-r--r--lib/DBInfoscreen/Controller/Stationboard.pm25
-rw-r--r--lib/DBInfoscreen/Helper/Wagonorder.pm42
2 files changed, 65 insertions, 2 deletions
diff --git a/lib/DBInfoscreen/Controller/Stationboard.pm b/lib/DBInfoscreen/Controller/Stationboard.pm
index 9bb09b1..2eb7b12 100644
--- a/lib/DBInfoscreen/Controller/Stationboard.pm
+++ b/lib/DBInfoscreen/Controller/Stationboard.pm
@@ -560,6 +560,9 @@ sub render_train {
my $stationinfo_req = Mojo::Promise->new;
my $route_req = Mojo::Promise->new;
+ my @requests
+ = ( $wagonorder_req, $utilization_req, $stationinfo_req, $route_req );
+
if ( $departure->{wr_link} ) {
$self->wagonorder->is_available_p( $result, $departure->{wr_link} )
->then(
@@ -769,9 +772,27 @@ sub render_train {
}
)->wait;
+ if ( $self->param('detailed') ) {
+ my $cycle_req = Mojo::Promise->new;
+ push( @requests, $cycle_req );
+ $self->wagonorder->has_umlauf_p( $result->train_no )->then(
+ sub {
+ $departure->{has_cycle} = 1;
+ }
+ )->catch(
+ sub {
+ # nop
+ }
+ )->finally(
+ sub {
+ $cycle_req->resolve;
+ return;
+ }
+ )->wait;
+ }
+
# Defer rendering until all requests have completed
- Mojo::Promise->all( $wagonorder_req, $utilization_req, $stationinfo_req,
- $route_req )->then(
+ Mojo::Promise->all(@requests)->then(
sub {
$self->render(
$template // '_train_details',
diff --git a/lib/DBInfoscreen/Helper/Wagonorder.pm b/lib/DBInfoscreen/Helper/Wagonorder.pm
index e843b54..5904d86 100644
--- a/lib/DBInfoscreen/Helper/Wagonorder.pm
+++ b/lib/DBInfoscreen/Helper/Wagonorder.pm
@@ -1,4 +1,5 @@
package DBInfoscreen::Helper::Wagonorder;
+
# Copyright (C) 2011-2020 Daniel Friesel
#
# SPDX-License-Identifier: BSD-2-Clause
@@ -56,6 +57,47 @@ sub is_available_p {
return $promise;
}
+sub has_umlauf_p {
+ my ( $self, $train_no ) = @_;
+
+ my $promise = Mojo::Promise->new;
+
+ my $url = "https://lib.finalrewind.org/dbdb/db_umlauf/${train_no}.png";
+ my $cache = $self->{main_cache};
+
+ if ( my $content = $cache->get($url) ) {
+ if ( $content eq 'y' ) {
+ return $promise->resolve;
+ }
+ else {
+ return $promise->reject;
+ }
+ }
+
+ $self->{user_agent}->request_timeout(5)->head_p( $url => $self->{header} )
+ ->then(
+ sub {
+ my ($tx) = @_;
+ if ( $tx->result->is_success ) {
+ $cache->set( $url, 'y' );
+ $promise->resolve;
+ }
+ else {
+ $cache->set( $url, 'n' );
+ $promise->reject;
+ }
+ return;
+ }
+ )->catch(
+ sub {
+ $cache->set( $url, 'n' );
+ $promise->reject;
+ return;
+ }
+ )->wait;
+ return $promise;
+}
+
sub check_wagonorder_p {
my ( $self, $train_no, $wr_link ) = @_;