summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/DBInfoscreen/Controller/Stationboard.pm25
-rw-r--r--lib/DBInfoscreen/Helper/Wagonorder.pm42
-rw-r--r--templates/_train_details.html.ep3
3 files changed, 68 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 ) = @_;
diff --git a/templates/_train_details.html.ep b/templates/_train_details.html.ep
index 77a61ba..3a68c80 100644
--- a/templates/_train_details.html.ep
+++ b/templates/_train_details.html.ep
@@ -228,6 +228,9 @@
% }
</ul> <!-- mroute -->
% }
+% if (param('detailed') and $departure->{has_cycle}) {
+ <div><a href="https://lib.finalrewind.org/dbdb/db_umlauf/<%= $departure->{train_no} %>.png">Umlaufplan</a></div>
+% }
% if (param('detailed') and $details->{commonAttr}) {
% if ($details->{attrVariants} and (not $details->{commonAttr}{vmax} or not $details->{commonAttr}{brakingPercentage})) {
<div class="db-attr">