diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/DBInfoscreen.pm | 34 | ||||
-rw-r--r-- | lib/DBInfoscreen/Controller/Wagenreihung.pm | 61 |
2 files changed, 95 insertions, 0 deletions
diff --git a/lib/DBInfoscreen.pm b/lib/DBInfoscreen.pm index 54078ea..a0e027d 100644 --- a/lib/DBInfoscreen.pm +++ b/lib/DBInfoscreen.pm @@ -123,6 +123,13 @@ sub startup { } ); + $self->attr( + dbdb_wagon => sub { + return JSON->new->utf8->decode( + scalar read_file('share/dbdb_wagen.json') ); + } + ); + $self->helper( hafas => sub { my ($self) = @_; @@ -166,6 +173,32 @@ sub startup { ); $self->helper( + wagon_image => sub { + my ( $self, $train_type, $wagon_type, $uic ) = @_; + my $ret; + if ( $train_type =~ m{IC(?!E)} + and $wagon_type + =~ m{ ^ [AB] R? k? [ipv] m m? b? d? s? z f? $ }x ) + { + $ret = $wagon_type; + } + elsif ( not $uic ) { + return; + } + elsif ( $train_type =~ m{ICE [12]} and $wagon_type !~ m{^I} ) { + $ret = substr( $uic, 5, 4 ); + } + elsif ( $train_type =~ m{ICE 4} ) { + $ret = substr( $uic, 4, 5 ); + } + if ( $ret and $self->app->dbdb_wagon->{$ret} ) { + return $ret; + } + return; + } + ); + + $self->helper( 'handle_no_results' => sub { my ( $self, $backend, $station, $errstr ) = @_; @@ -418,6 +451,7 @@ sub startup { $r->get('/_wr/:train/:departure')->to('wagenreihung#wagenreihung'); $r->get('/wr/:train')->to('wagenreihung#zugbildung_db'); + $r->get('/w/:wagon')->to('wagenreihung#wagen'); $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 4707d03..073d762 100644 --- a/lib/DBInfoscreen/Controller/Wagenreihung.pm +++ b/lib/DBInfoscreen/Controller/Wagenreihung.pm @@ -5,6 +5,8 @@ package DBInfoscreen::Controller::Wagenreihung; # SPDX-License-Identifier: BSD-2-Clause use Mojo::Base 'Mojolicious::Controller'; +use Mojo::JSON qw(decode_json encode_json); +use Mojo::Util qw(b64_encode b64_decode); use utf8; @@ -99,6 +101,7 @@ sub wagenreihung { wr_error => scalar $@, train_no => $train, wr => undef, + wref => undef, hide_opts => 1, ); } @@ -114,6 +117,14 @@ sub wagenreihung { } } + my $wref = { + tt => $wr->train_type, + tn => $train, + s => $wr->station_name, + p => $wr->platform + }; + $wref = b64_encode( encode_json($wref) ); + $self->render( 'wagenreihung', wr_error => undef, @@ -121,6 +132,7 @@ sub wagenreihung { map { $wr->train_type . ' ' . $_ } $wr->train_numbers ), train_no => $train, wr => $wr, + wref => $wref, hide_opts => 1, ); } @@ -133,6 +145,7 @@ sub wagenreihung { wr_error => scalar $err, train_no => $train, wr => undef, + wref => undef, hide_opts => 1, ); } @@ -140,4 +153,52 @@ sub wagenreihung { } +sub wagen { + my ($self) = @_; + my $wagon_id = $self->stash('wagon'); + my $wagon_no = $self->param('n'); + my $section = $self->param('s'); + my $wref = $self->param('r'); + + if ( not $self->app->dbdb_wagon->{$wagon_id} ) { + $self->render( + 'not_found', + message => "Keine Daten zu Wagentyp \"${wagon_id}\" vorhanden", + hide_opts => 1 + ); + return; + } + + eval { $wref = decode_json( b64_decode($wref) ); }; + if ($@) { + $wref = {}; + } + + $wref->{wn} = $wagon_no; + $wref->{ws} = $section; + + my $wagon_file + = "https://lib.finalrewind.org/dbdb/db_wagen/${wagon_id}.png"; + + my $title = "Wagen $wagon_id"; + + if ( $wref->{tt} and $wref->{tn} ) { + $title = sprintf( '%s %s', $wref->{tt}, $wref->{tn} ); + if ($wagon_no) { + $title .= " Wagen $wagon_no"; + } + else { + $title .= " Wagen $wagon_id"; + } + } + + $self->render( + 'wagen', + title => $title, + wagon_file => $wagon_file, + wref => $wref, + hide_opts => 1, + ); +} + 1; |