diff options
author | Daniel Friesel <derf@finalrewind.org> | 2020-12-14 19:18:19 +0100 |
---|---|---|
committer | Daniel Friesel <derf@finalrewind.org> | 2020-12-14 19:18:19 +0100 |
commit | 4609b7312d67063b2cb0d5803260d7dc25475bc2 (patch) | |
tree | 5ef3cf76763c9bd883838bc2dd161fb565d86e2e /lib | |
parent | 3c85cd22395be60462959ee7d3cf59d0e939b6a3 (diff) |
show expected wagon order whan real-time data is not available
work in progress.
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'); |