summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/DBInfoscreen.pm34
-rw-r--r--lib/DBInfoscreen/Controller/Wagenreihung.pm61
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;