summaryrefslogtreecommitdiff
path: root/cgi/index.pl
diff options
context:
space:
mode:
Diffstat (limited to 'cgi/index.pl')
-rw-r--r--cgi/index.pl60
1 files changed, 55 insertions, 5 deletions
diff --git a/cgi/index.pl b/cgi/index.pl
index 90ef4db..2c64482 100644
--- a/cgi/index.pl
+++ b/cgi/index.pl
@@ -2,6 +2,9 @@
use Mojolicious::Lite;
use Cache::File;
+use DateTime;
+use DateTime::Format::DateParse;
+
use App::VRR::Fakedisplay;
use Travel::Status::DE::VRR;
@@ -49,15 +52,62 @@ sub render_image {
my $city = $self->stash('city');
my $stop = $self->stash('stop');
+ my $dt_now = DateTime->now(time_zone => 'Europe/Berlin');
+
$self->res->headers->content_type('image/png');
my ($results, $errstr) = get_results_for($city, $stop);
- my $png = App::VRR::Fakedisplay->new();
- for my $d (@{$results}[0 .. 5]) {
- $png->draw_at(0, $d->line);
- $png->draw_at(30, $d->destination);
- $png->draw_at(180, $d->time);
+ my $png = App::VRR::Fakedisplay->new(width => 180, height => 50);
+ for my $d (@{$results}) {
+
+ my $line = $d->line;
+ my $platform = (split(qr{ }, $d->platform))[-1];
+ my $destination = $d->destination;
+ my $time = $d->time;
+ my $etr;
+
+ my $dt_dep = DateTime::Format::DateParse->parse_datetime($time, 'floating');
+ my $dt;
+
+ 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,
+ time_zone => 'Europe/Berlin',
+ );
+ }
+ else {
+ $dt = $dt_dep;
+ }
+
+ my $duration = $dt->subtract_datetime($dt_now);
+
+ if ($duration->is_negative) {
+ next;
+ }
+ elsif ($duration->in_units('minutes') == 0) {
+ $etr = 'sofort';
+ }
+ elsif ($duration->in_units('hours') == 0) {
+ $etr = sprintf(
+ ' %2dmin',
+ $duration->in_units('minutes'),
+ );
+ }
+ else {
+ last;
+ }
+
+ $destination =~ s{ $city \s }{}ix;
+
+ $png->draw_at(0, $line);
+ $png->draw_at(25, $destination);
+ $png->draw_at(145, $etr);
$png->new_line();
}