summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2020-12-14 19:18:19 +0100
committerDaniel Friesel <derf@finalrewind.org>2020-12-14 19:18:19 +0100
commit4609b7312d67063b2cb0d5803260d7dc25475bc2 (patch)
tree5ef3cf76763c9bd883838bc2dd161fb565d86e2e /lib
parent3c85cd22395be60462959ee7d3cf59d0e939b6a3 (diff)
show expected wagon order whan real-time data is not available
work in progress.
Diffstat (limited to 'lib')
-rw-r--r--lib/DBInfoscreen.pm13
-rw-r--r--lib/DBInfoscreen/Controller/Wagenreihung.pm57
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');