From 67c4ab8bdffeae89e5f96e3f1cf35f565c02fad7 Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Sun, 31 Jan 2021 12:02:18 +0100 Subject: wagonorder: show plan data if realtime data request failed --- lib/DBInfoscreen/Controller/Wagenreihung.pm | 88 ++++++++++++++++++++--------- 1 file changed, 62 insertions(+), 26 deletions(-) (limited to 'lib') diff --git a/lib/DBInfoscreen/Controller/Wagenreihung.pm b/lib/DBInfoscreen/Controller/Wagenreihung.pm index a64cca6..d99a71c 100644 --- a/lib/DBInfoscreen/Controller/Wagenreihung.pm +++ b/lib/DBInfoscreen/Controller/Wagenreihung.pm @@ -13,16 +13,14 @@ use utf8; use Travel::Status::DE::DBWagenreihung; use Travel::Status::DE::DBWagenreihung::Wagon; -sub zugbildung_db { - my ($self) = @_; +sub get_zugbildung_db { + my ( $self, $train_no ) = @_; - my $train_no = $self->param('train'); + say $train_no; my $details = $self->app->train_details_db->{$train_no}; if ( not $details ) { - $self->render( 'not_found', - message => "Keine Daten zu Zug ${train_no} bekannt" ); return; } @@ -66,18 +64,69 @@ sub zugbildung_db { my $route_end = $details->{route}{end} // $details->{route}{postEnd}; my $route = "${route_start} → ${route_end}"; + return { + route => $route, + train_type => $train_type, + wagons => [@wagons] + }; +} + +sub zugbildung_db { + my ($self) = @_; + + my $train_no = $self->param('train'); + + my $details = $self->get_zugbildung_db($train_no); + + if ( not $details ) { + $self->render( 'not_found', + message => "Keine Daten zu Zug ${train_no} bekannt" ); + return; + } + $self->render( 'zugbildung_db', wr_error => undef, - title => $train_type . ' ' . $train_no, - route => $route, + title => $details->{train_type} . ' ' . $train_no, + route => $details->{route}, zb => $details, train_no => $train_no, - wagons => [@wagons], + wagons => $details->{wagons}, hide_opts => 1, ); } +sub handle_wagenreihung_error { + my ( $self, $train_no, $err ) = @_; + + my $details = $self->get_zugbildung_db($train_no); + if ( $details and @{ $details->{wagons} } ) { + my $wr_error + = "${err}. Ersatzweise werden die Solldaten laut Fahrplan angezeigt."; + $self->render( + 'zugbildung_db', + wr_error => $wr_error, + title => $details->{train_type} . ' ' . $train_no, + route => $details->{route}, + zb => $details, + train_no => $train_no, + wagons => $details->{wagons}, + hide_opts => 1, + ); + } + else { + $self->render( + 'wagenreihung', + title => "Zug $train_no", + wr_error => $err, + train_no => $train_no, + wr => undef, + wref => undef, + hide_opts => 1, + ); + } +} + sub wagenreihung { my ($self) = @_; my $train = $self->stash('train'); @@ -96,15 +145,8 @@ sub wagenreihung { from_json => $json ); }; if ($@) { - $self->render( - 'wagenreihung', - title => "Zug $train", - wr_error => scalar $@, - train_no => $train, - wr => undef, - wref => undef, - hide_opts => 1, - ); + $self->handle_wagenreihung_error( $train, scalar $@ ); + return; } if ( $exit_side and $exit_side =~ m{^a} ) { @@ -234,15 +276,9 @@ sub wagenreihung { )->catch( sub { my ($err) = @_; - $self->render( - 'wagenreihung', - title => "Zug $train", - wr_error => scalar $err, - train_no => $train, - wr => undef, - wref => undef, - hide_opts => 1, - ); + + $self->handle_wagenreihung_error( $train, scalar $err ); + return; } )->wait; -- cgit v1.2.3