From 168658c422f793e8a6b7bd53bfce748c9954094d Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Sat, 21 Jun 2014 11:53:57 +0200 Subject: add basic IRIS support --- cgi/index.pl | 43 ++++++++++++++++++++++++++++------- cgi/templates/layouts/default.html.ep | 8 +++++++ 2 files changed, 43 insertions(+), 8 deletions(-) diff --git a/cgi/index.pl b/cgi/index.pl index 7d5282f..6948855 100644 --- a/cgi/index.pl +++ b/cgi/index.pl @@ -3,6 +3,7 @@ use Mojolicious::Lite; use Cache::File; use List::MoreUtils qw(any); use Travel::Status::DE::DeutscheBahn; +use Travel::Status::DE::IRIS; use 5.014; use utf8; @@ -13,7 +14,7 @@ our $VERSION = qx{git describe --dirty} || '0.04'; my $refresh_interval = 180; sub get_results_for { - my ($station) = @_; + my ( $backend, $station ) = @_; my $cache = Cache::File->new( cache_root => '/tmp/db-fake', @@ -25,13 +26,25 @@ sub get_results_for { my $cstation = $station; $cstation =~ tr{[0-9a-zA-Z -]}{}cd; - my $results = $cache->thaw($cstation); + my $cache_str = "${backend}_${cstation}"; + + my $results = $cache->thaw($cache_str); if ( not $results ) { - my $status - = Travel::Status::DE::DeutscheBahn->new( station => $station ); - $results = [ $status->results ]; - $cache->freeze( $cstation, $results ); + if ( $backend eq 'iris' ) { + my $status = Travel::Status::DE::IRIS->new( + station => $station, + serializable => 1 + ); + $results = [ $status->results ]; + $cache->freeze( $cache_str, $results ); + } + else { + my $status + = Travel::Status::DE::DeutscheBahn->new( station => $station ); + $results = [ $status->results ]; + $cache->freeze( $cache_str, $results ); + } } return @{$results}; @@ -47,6 +60,7 @@ sub handle_request { my $template = $self->param('mode') // 'multi'; my $hide_low_delay = $self->param('hidelowdelay') // 0; my $hide_opts = $self->param('hide_opts') // 0; + my $backend = $self->param('backend') // 'ris'; $self->stash( departures => [] ); $self->stash( title => 'db-fakedisplay' ); @@ -62,7 +76,7 @@ sub handle_request { } my @departures; - my @results = get_results_for($station); + my @results = get_results_for( $backend, $station ); if ( not @results ) { $self->render( @@ -103,7 +117,20 @@ sub handle_request { if ( @lines and not( any { $line =~ m{^$_} } @lines ) ) { next; } - my $info = $result->info; + my $info; + if ( $backend eq 'iris' ) { + $info = join( ' +++ ', $result->info ); + if ( $result->is_cancelled ) { + $info = "Fahrt fällt aus: ${info}"; + } + if ( $result->delay > 0 ) { + $info = sprintf( 'Verspätung ca %d Min.%s%s', + $result->delay, $info ? q{: } : q{}, $info ); + } + } + else { + $info = $result->info; + } if ( $info eq '+0' ) { $info = undef; diff --git a/cgi/templates/layouts/default.html.ep b/cgi/templates/layouts/default.html.ep index d771a97..873def3 100644 --- a/cgi/templates/layouts/default.html.ep +++ b/cgi/templates/layouts/default.html.ep @@ -400,6 +400,14 @@ %= select_field mode => [['combined' => 'multi'], ['platform' => 'single'], ['non-DB' => 'clean']] +
+
+ backend +
+
+ %= select_field backend => [['RIS' => 'ris'], ['IRIS' => 'iris']] +
+
hide input fields -- cgit v1.2.3