summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cgi/index.pl136
-rw-r--r--lib/App/VRR/Fakedisplay.pm.PL32
2 files changed, 85 insertions, 83 deletions
diff --git a/cgi/index.pl b/cgi/index.pl
index d2c5217..8c8dcdb 100644
--- a/cgi/index.pl
+++ b/cgi/index.pl
@@ -11,7 +11,7 @@ use Travel::Status::DE::VRR;
our $VERSION = '0.00';
sub get_results_for {
- my ($city, $stop) = @_;
+ my ( $city, $stop ) = @_;
my $cache = Cache::File->new(
cache_root => '/tmp/vrr-fake',
@@ -21,9 +21,11 @@ sub get_results_for {
my $results = $cache->thaw("${city} _ ${stop}");
if ( not $results ) {
- my $status
- = Travel::Status::DE::VRR->new(place => $city, name => $stop);
- $results = [ [$status->results], $status->errstr ];
+ my $status = Travel::Status::DE::VRR->new(
+ place => $city,
+ name => $stop
+ );
+ $results = [ [ $status->results ], $status->errstr ];
$cache->freeze( "${city} _ ${stop}", $results );
}
@@ -31,41 +33,41 @@ sub get_results_for {
}
sub handle_request {
- my $self = shift;
- my $city = $self->stash('city');
- my $stop = $self->stash('stop');
+ my $self = shift;
+ my $city = $self->stash('city');
+ my $stop = $self->stash('stop');
- $self->stash( title => 'vrr-fakedisplay' );
- $self->stash( version => $VERSION );
+ $self->stash( title => 'vrr-fakedisplay' );
+ $self->stash( version => $VERSION );
- $self->stash( params => $self->req->params->to_string);
+ $self->stash( params => $self->req->params->to_string );
$self->stash( height => 50 );
- $self->stash( width => 180);
+ $self->stash( width => 180 );
$self->render(
'main',
- city => $city,
- stop => $stop,
- version => $VERSION,
- title => "departures for ${city} ${stop}",
+ city => $city,
+ stop => $stop,
+ version => $VERSION,
+ title => "departures for ${city} ${stop}",
);
}
sub shorten_destination {
- my ($dest, $city) = @_;
+ my ( $dest, $city ) = @_;
$dest =~ s{ ^ $city \s }{}x;
- if (length($dest) > 20) {
- $dest =~ s{^Dortmund}{DO} or
- $dest =~ s{^Duisburg}{DU} or
- $dest =~ s{^Düsseldorf}{D} or
- $dest =~ s{^Essen}{E} or
- $dest =~ s{^Gelsenkirchen}{GE} or
- $dest =~ s{^Mülheim}{MH};
+ if ( length($dest) > 20 ) {
+ $dest =~ s{^Dortmund}{DO}
+ or $dest =~ s{^Duisburg}{DU}
+ or $dest =~ s{^Düsseldorf}{D}
+ or $dest =~ s{^Essen}{E}
+ or $dest =~ s{^Gelsenkirchen}{GE}
+ or $dest =~ s{^Mülheim}{MH};
}
- $dest = substr($dest, 0, 20);
+ $dest = substr( $dest, 0, 20 );
return $dest;
}
@@ -75,60 +77,63 @@ sub render_image {
my $city = $self->stash('city');
my $stop = $self->stash('stop');
- my $dt_now = DateTime->now(time_zone => 'Europe/Berlin');
+ my $dt_now = DateTime->now( time_zone => 'Europe/Berlin' );
my $color = $self->param('color') || '255,208,0';
- my (@grep_line, @grep_platform);
-
+ my ( @grep_line, @grep_platform );
- my ($results, $errstr) = get_results_for($city, $stop);
+ my ( $results, $errstr ) = get_results_for( $city, $stop );
- my $png = App::VRR::Fakedisplay->new(width => 180, height => 50, color => [split(qr{,}, $color)]);
+ my $png = App::VRR::Fakedisplay->new(
+ width => 180,
+ height => 50,
+ color => [ split( qr{,}, $color ) ]
+ );
my $strp_simple = DateTime::Format::Strptime->new(
- pattern => '%H:%M',
+ pattern => '%H:%M',
time_zone => 'floating',
);
my $strp_full = DateTime::Format::Strptime->new(
- pattern => '%d.%m.%Y %H:%M',
+ pattern => '%d.%m.%Y %H:%M',
time_zone => 'floating',
);
-
- if ($self->param('line')) {
- @grep_line = split(qr{,}, $self->param('line'));
+ if ( $self->param('line') ) {
+ @grep_line = split( qr{,}, $self->param('line') );
}
- if ($self->param('platform')) {
- @grep_platform = split(qr{,}, $self->param('platform'));
+ if ( $self->param('platform') ) {
+ @grep_platform = split( qr{,}, $self->param('platform') );
}
$self->res->headers->content_type('image/png');
- for my $d (@{$results}) {
+ for my $d ( @{$results} ) {
- my $line = $d->line;
- my $platform = (split(qr{ }, $d->platform))[-1];
+ my $line = $d->line;
+ my $platform = ( split( qr{ }, $d->platform ) )[-1];
my $destination = $d->destination;
- my $time = $d->time;
+ my $time = $d->time;
my $etr;
my $dt_dep = $strp_full->parse_datetime($time)
- // $strp_simple->parse_datetime($time);
+ // $strp_simple->parse_datetime($time);
my $dt;
- if ((@grep_line and not ($line ~~ \@grep_line)) or
- (@grep_platform and not ($platform ~~ \@grep_platform))) {
+ if ( ( @grep_line and not( $line ~~ \@grep_line ) )
+ or ( @grep_platform and not( $platform ~~ \@grep_platform ) ) )
+ {
next;
}
- if ($time =~ m{ ^ \d\d? : \d\d $ }x) {
+ if ( $time =~ m{ ^ \d\d? : \d\d $ }x ) {
$dt = DateTime->new(
- year => $dt_now->year,
- month => $dt_now->month,
- day => $dt_now->day,
- hour => $dt_dep->hour,
- minute => $dt_dep->minute,
- second => $dt_dep->second,
+ year => $dt_now->year,
+ month => $dt_now->month,
+ day => $dt_now->day,
+ hour => $dt_dep->hour,
+ minute => $dt_dep->minute,
+ second => $dt_dep->second,
time_zone => 'Europe/Berlin',
);
}
@@ -138,42 +143,39 @@ sub render_image {
my $duration = $dt->subtract_datetime($dt_now);
- if ($duration->is_negative) {
+ if ( $duration->is_negative ) {
next;
}
- elsif ($duration->in_units('minutes') == 0) {
+ elsif ( $duration->in_units('minutes') == 0 ) {
$etr = 'sofort';
}
- elsif ($duration->in_units('hours') == 0) {
- $etr = sprintf(
- ' %2d',
- $duration->in_units('minutes'),
- );
+ elsif ( $duration->in_units('hours') == 0 ) {
+ $etr = sprintf( ' %2d', $duration->in_units('minutes'), );
}
else {
last;
}
- $destination = shorten_destination($destination, $city);
+ $destination = shorten_destination( $destination, $city );
- $png->draw_at(0, $line);
- $png->draw_at(25, $destination);
- $png->draw_at(144, $etr);
+ $png->draw_at( 0, $line );
+ $png->draw_at( 25, $destination );
+ $png->draw_at( 144, $etr );
- if ($etr ne 'sofort') {
- $png->draw_at(161, 'min');
+ if ( $etr ne 'sofort' ) {
+ $png->draw_at( 161, 'min' );
}
$png->new_line();
}
- $self->render(data => $png->png);
+ $self->render( data => $png->png );
}
get '/_redirect' => sub {
- my $self = shift;
- my $city = $self->param('city');
- my $stop = $self->param('stop');
+ my $self = shift;
+ my $city = $self->param('city');
+ my $stop = $self->param('stop');
$self->redirect_to("/${city}/${stop}");
};
diff --git a/lib/App/VRR/Fakedisplay.pm.PL b/lib/App/VRR/Fakedisplay.pm.PL
index a6d9e5f..8621d32 100644
--- a/lib/App/VRR/Fakedisplay.pm.PL
+++ b/lib/App/VRR/Fakedisplay.pm.PL
@@ -8,23 +8,24 @@ use GD;
my ($out_file) = @ARGV;
my $font = GD::Image->new('share/font.png');
-my $black = $font->colorClosest(0, 0, 0);
+my $black = $font->colorClosest( 0, 0, 0 );
-open(my $out_fh, '>:encoding(UTF-8)', $out_file) or die("open ${out_file}: $!");
+open( my $out_fh, '>:encoding(UTF-8)', $out_file )
+ or die("open ${out_file}: $!");
sub write_out {
- my ($off_x, $off_y, $char) = @_;
+ my ( $off_x, $off_y, $char ) = @_;
my $char_w = 0;
say $out_fh "'${char}' => {";
say $out_fh 'matrix => [';
- for my $pos_y ( $off_y .. ($off_y + 10)) {
+ for my $pos_y ( $off_y .. ( $off_y + 10 ) ) {
print $out_fh '[ ';
- for my $pos_x ( $off_x .. ($off_x + 10)) {
- if ($font->getPixel($pos_x, $pos_y) == $black) {
+ for my $pos_x ( $off_x .. ( $off_x + 10 ) ) {
+ if ( $font->getPixel( $pos_x, $pos_y ) == $black ) {
- if (($pos_x - $off_x) > $char_w) {
+ if ( ( $pos_x - $off_x ) > $char_w ) {
$char_w = $pos_x - $off_x;
}
@@ -40,7 +41,7 @@ sub write_out {
# spacing (one empty column)
$char_w++;
- if ($char eq q{ }) {
+ if ( $char eq q{ } ) {
$char_w = 5;
}
@@ -50,18 +51,17 @@ sub write_out {
}
sub parse_char_row {
- my ($off_y, @chars) = @_;
+ my ( $off_y, @chars ) = @_;
my $off_x = 0;
for my $char (@chars) {
- write_out($off_x, $off_y, $char);
+ write_out( $off_x, $off_y, $char );
$off_x += 10;
}
return;
}
-
print $out_fh <<'___CUT___';
package App::VRR::Fakedisplay;
@@ -99,11 +99,11 @@ sub new {
___CUT___
-parse_char_row( 0, 'A' .. 'Z');
-parse_char_row(10, 'a' .. 'z');
-parse_char_row(20, '0' .. '9');
-parse_char_row(30, q{:}, q{-}, q{.}, q{,}, q{/}, q{ });
-parse_char_row(40, qw(ä ö ü));
+parse_char_row( 0, 'A' .. 'Z' );
+parse_char_row( 10, 'a' .. 'z' );
+parse_char_row( 20, '0' .. '9' );
+parse_char_row( 30, q{:}, q{-}, q{.}, q{,}, q{/}, q{ } );
+parse_char_row( 40, qw(ä ö ü) );
print $out_fh <<'___CUT___';