diff options
| author | Daniel Friesel <derf@finalrewind.org> | 2021-01-11 22:09:00 +0100 | 
|---|---|---|
| committer | Daniel Friesel <derf@finalrewind.org> | 2021-01-11 22:09:00 +0100 | 
| commit | dcdea4247b6457202ce746814ff44d249c32d8b5 (patch) | |
| tree | 3b009ca49536d257e736d714a84fee142cdbc914 /lib/DBInfoscreen | |
| parent | d7376340ed10f412caefad198dfb2bac40448bbb (diff) | |
train details: show cycle (if available)
Diffstat (limited to 'lib/DBInfoscreen')
| -rw-r--r-- | lib/DBInfoscreen/Controller/Stationboard.pm | 25 | ||||
| -rw-r--r-- | lib/DBInfoscreen/Helper/Wagonorder.pm | 42 | 
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 ) = @_; | 
