diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/DBInfoscreen.pm | 13 | ||||
| -rw-r--r-- | lib/DBInfoscreen/Controller/Wagenreihung.pm | 57 | 
2 files changed, 68 insertions, 2 deletions
| diff --git a/lib/DBInfoscreen.pm b/lib/DBInfoscreen.pm index b04fb03..0ee9493 100644 --- a/lib/DBInfoscreen.pm +++ b/lib/DBInfoscreen.pm @@ -90,17 +90,25 @@ sub startup {  	$self->attr(  		ice_type_map => sub {  			my $ice_type_map = JSON->new->utf8->decode( -				scalar read_file('share/ice_type.json') ); +				scalar read_file('share/zugbildungsplan.json') );  			my $ret;  			while ( my ( $k, $v ) = each %{$ice_type_map} ) {  				if ( $v->{type} ) { -					$ret->{$k} = [ $v->{type}, $v->{short} ]; +					$ret->{$k} +					  = [ $v->{type}, $v->{short}, exists $v->{wagon} ? 1 : 0 ];  				}  			}  			return $ret;  		}  	); +	$self->attr( +		train_details_db => sub { +			return JSON->new->utf8->decode( +				scalar read_file('share/zugbildungsplan.json') ); +		} +	); +  	$self->helper(  		hafas => sub {  			my ($self) = @_; @@ -395,6 +403,7 @@ sub startup {  	$r->get('/_impressum')->to('static#imprint');  	$r->get('/_wr/:train/:departure')->to('wagenreihung#wagenreihung'); +	$r->get('/zb-db/:train')->to('wagenreihung#zugbildung_db');  	$r->get('/_ajax_mapinfo/:tripid/:lineno')->to('map#ajax_route');  	$r->get('/map/:tripid/:lineno')->to('map#route'); diff --git a/lib/DBInfoscreen/Controller/Wagenreihung.pm b/lib/DBInfoscreen/Controller/Wagenreihung.pm index ebda6f3..92af5f3 100644 --- a/lib/DBInfoscreen/Controller/Wagenreihung.pm +++ b/lib/DBInfoscreen/Controller/Wagenreihung.pm @@ -1,4 +1,5 @@  package DBInfoscreen::Controller::Wagenreihung; +  # Copyright (C) 2011-2020 Daniel Friesel  #  # SPDX-License-Identifier: BSD-2-Clause @@ -6,11 +7,67 @@ package DBInfoscreen::Controller::Wagenreihung;  use Mojo::Base 'Mojolicious::Controller';  use Travel::Status::DE::DBWagenreihung; +use Travel::Status::DE::DBWagenreihung::Wagon;  my $dbf_version = qx{git describe --dirty} || 'experimental';  chomp $dbf_version; +sub zugbildung_db { +	my ($self) = @_; + +	my $train_no = $self->param('train'); + +	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; +	} + +	my @wagons; + +	for my $wagon_number ( sort { $a <=> $b } keys %{ $details->{wagon} } ) { +		my %wagon = ( +			fahrzeugnummer      => "", +			fahrzeugtyp         => $details->{wagon}{$wagon_number}, +			kategorie           => "", +			train_no            => $train_no, +			wagenordnungsnummer => $wagon_number, +			positionamhalt      => { +				startprozent => 0, +				endeprozent  => 0, +				startmeter   => 0, +				endemeter    => 0, +			} +		); +		my $wagon = Travel::Status::DE::DBWagenreihung::Wagon->new(%wagon); + +		if ( $details->{type} ) { +			$wagon->set_traintype( $details->{type} ); +		} +		push( @wagons, $wagon ); +	} + +	my $pos = 0; +	for my $wagon (@wagons) { +		$wagon->{position}{start_percent} = $pos; +		$wagon->{position}{end_percent}   = $pos + 4; +		$pos += 4; +	} + +	$self->render( +		'zugbildung_db', +		wr_error  => undef, +		title     => $details->{raw} . ' ' . $train_no, +		zb        => $details, +		train_no  => $train_no, +		wagons    => [@wagons], +		hide_opts => 1, +	); +} +  sub wagenreihung {  	my ($self)    = @_;  	my $train     = $self->stash('train'); | 
