Loading lib/DBInfoscreen.pm +15 −0 Original line number Diff line number Diff line Loading @@ -6,6 +6,7 @@ use Mojo::Base 'Mojolicious'; use Cache::File; use DBInfoscreen::Helper::HAFAS; use DBInfoscreen::Helper::Wagonorder; use File::Slurp qw(read_file); use JSON; use Travel::Status::DE::HAFAS; Loading @@ -18,6 +19,8 @@ no if $] >= 5.018, warnings => 'experimental::smartmatch'; our $VERSION = qx{git describe --dirty} || '0.05'; chomp $VERSION; my %default = ( backend => 'iris', mode => 'app', Loading Loading @@ -108,6 +111,18 @@ sub startup { } ); $self->helper( wagonorder => sub { my ($self) = @_; state $hafas = DBInfoscreen::Helper::Wagonorder->new( log => $self->app->log, cache => $self->app->cache_iris_main, user_agent => $self->ua, version => $VERSION, ); } ); $self->helper( 'handle_no_results' => sub { my ( $self, $backend, $station, $errstr ) = @_; Loading lib/DBInfoscreen/Controller/Stationboard.pm +3 −48 Original line number Diff line number Diff line Loading @@ -105,47 +105,6 @@ sub log_api_access { return; } sub check_wagonorder_with_wings { my ( $ua, $cache, $train, $wr_link ) = @_; if ( check_wagonorder( $ua, $cache, $train->train_no, $wr_link ) ) { return 1; } elsif ( $train->is_wing ) { my $wing = $train->wing_of; if ( check_wagonorder( $ua, $cache, $wing->train_no, $wr_link ) ) { return 1; } } return; } sub check_wagonorder { my ( $ua, $cache, $train_no, $wr_link ) = @_; my $url = "https://lib.finalrewind.org/dbdb/has_wagonorder/${train_no}/${wr_link}"; if ( my $content = $cache->get($url) ) { return $content eq 'y' ? 1 : undef; } $ua->request_timeout(2); my $res = eval { $ua->head($url)->result }; if ($@) { return; } if ( $res->is_error ) { $cache->set( $url, 'n' ); return; } else { $cache->set( $url, 'y' ); return 1; } } sub get_results_for { my ( $backend, $station, %opt ) = @_; my $data; Loading Loading @@ -455,13 +414,9 @@ sub render_train { $departure->{trip_id} = $self->hafas->get_tripid($result); if ( $departure->{wr_link} and not check_wagonorder_with_wings( $self->ua, $self->app->cache_iris_main, $result, $departure->{wr_link} ) ) if ( $departure->{wr_link} and not $self->wagonorder->is_available( $result, $departure->{wr_link} ) ) { $departure->{wr_link} = undef; } Loading lib/DBInfoscreen/Helper/HAFAS.pm +9 −3 Original line number Diff line number Diff line Loading @@ -29,9 +29,11 @@ sub hafas_rest_req { return $content; } my $res = eval { $self->{user_agent}->get($url)->result; }; my $res = eval { $self->{user_agent}->get( $url => $self->{header} )->result; }; if ($@) { $self->{log}->debug("hafas_rest_req($url): $@"); return; } if ( $res->is_error ) { Loading @@ -52,9 +54,11 @@ sub hafas_json_req { return $content; } my $res = eval { $self->{user_agent}->get($url)->result }; my $res = eval { $self->{user_agent}->get( $url => $self->{header} )->result }; if ($@) { $self->{log}->debug("hafas_json_req($url): $@"); return; } if ( $res->is_error ) { Loading Loading @@ -82,9 +86,11 @@ sub hafas_xml_req { return $content; } my $res = eval { $self->{user_agent}->get($url)->result }; my $res = eval { $self->{user_agent}->get( $url => $self->{header} )->result }; if ($@) { $self->{log}->debug("hafas_xml_req($url): $@"); return; } if ( $res->is_error ) { Loading lib/DBInfoscreen/Helper/Wagonorder.pm 0 → 100644 +69 −0 Original line number Diff line number Diff line package DBInfoscreen::Helper::Wagonorder; use strict; use warnings; use 5.020; use DateTime; use Encode qw(decode encode); use Mojo::JSON qw(decode_json); use XML::LibXML; sub new { my ( $class, %opt ) = @_; my $version = $opt{version}; $opt{header} = { 'User-Agent' => "dbf/${version} +https://finalrewind.org/projects/db-fakedisplay" }; return bless( \%opt, $class ); } sub is_available { my ( $self, $train, $wr_link ) = @_; if ( $self->check_wagonorder( $train->train_no, $wr_link ) ) { return 1; } elsif ( $train->is_wing ) { my $wing = $train->wing_of; if ( $self->check_wagonorder( $wing->train_no, $wr_link ) ) { return 1; } } return; } sub check_wagonorder { my ( $self, $train_no, $wr_link ) = @_; my $url = "https://lib.finalrewind.org/dbdb/has_wagonorder/${train_no}/${wr_link}"; my $cache = $self->{cache}; if ( my $content = $self->{cache}->get($url) ) { return $content eq 'y' ? 1 : undef; } my $ua = $self->{user_agent}->request_timeout(2); my $res = eval { $ua->head( $url => $self->{header} )->result }; if ($@) { $self->{log}->debug("check_wagonorder($url): $@"); return; } if ( $res->is_error ) { $cache->set( $url, 'n' ); return; } else { $cache->set( $url, 'y' ); return 1; } } 1; Loading
lib/DBInfoscreen.pm +15 −0 Original line number Diff line number Diff line Loading @@ -6,6 +6,7 @@ use Mojo::Base 'Mojolicious'; use Cache::File; use DBInfoscreen::Helper::HAFAS; use DBInfoscreen::Helper::Wagonorder; use File::Slurp qw(read_file); use JSON; use Travel::Status::DE::HAFAS; Loading @@ -18,6 +19,8 @@ no if $] >= 5.018, warnings => 'experimental::smartmatch'; our $VERSION = qx{git describe --dirty} || '0.05'; chomp $VERSION; my %default = ( backend => 'iris', mode => 'app', Loading Loading @@ -108,6 +111,18 @@ sub startup { } ); $self->helper( wagonorder => sub { my ($self) = @_; state $hafas = DBInfoscreen::Helper::Wagonorder->new( log => $self->app->log, cache => $self->app->cache_iris_main, user_agent => $self->ua, version => $VERSION, ); } ); $self->helper( 'handle_no_results' => sub { my ( $self, $backend, $station, $errstr ) = @_; Loading
lib/DBInfoscreen/Controller/Stationboard.pm +3 −48 Original line number Diff line number Diff line Loading @@ -105,47 +105,6 @@ sub log_api_access { return; } sub check_wagonorder_with_wings { my ( $ua, $cache, $train, $wr_link ) = @_; if ( check_wagonorder( $ua, $cache, $train->train_no, $wr_link ) ) { return 1; } elsif ( $train->is_wing ) { my $wing = $train->wing_of; if ( check_wagonorder( $ua, $cache, $wing->train_no, $wr_link ) ) { return 1; } } return; } sub check_wagonorder { my ( $ua, $cache, $train_no, $wr_link ) = @_; my $url = "https://lib.finalrewind.org/dbdb/has_wagonorder/${train_no}/${wr_link}"; if ( my $content = $cache->get($url) ) { return $content eq 'y' ? 1 : undef; } $ua->request_timeout(2); my $res = eval { $ua->head($url)->result }; if ($@) { return; } if ( $res->is_error ) { $cache->set( $url, 'n' ); return; } else { $cache->set( $url, 'y' ); return 1; } } sub get_results_for { my ( $backend, $station, %opt ) = @_; my $data; Loading Loading @@ -455,13 +414,9 @@ sub render_train { $departure->{trip_id} = $self->hafas->get_tripid($result); if ( $departure->{wr_link} and not check_wagonorder_with_wings( $self->ua, $self->app->cache_iris_main, $result, $departure->{wr_link} ) ) if ( $departure->{wr_link} and not $self->wagonorder->is_available( $result, $departure->{wr_link} ) ) { $departure->{wr_link} = undef; } Loading
lib/DBInfoscreen/Helper/HAFAS.pm +9 −3 Original line number Diff line number Diff line Loading @@ -29,9 +29,11 @@ sub hafas_rest_req { return $content; } my $res = eval { $self->{user_agent}->get($url)->result; }; my $res = eval { $self->{user_agent}->get( $url => $self->{header} )->result; }; if ($@) { $self->{log}->debug("hafas_rest_req($url): $@"); return; } if ( $res->is_error ) { Loading @@ -52,9 +54,11 @@ sub hafas_json_req { return $content; } my $res = eval { $self->{user_agent}->get($url)->result }; my $res = eval { $self->{user_agent}->get( $url => $self->{header} )->result }; if ($@) { $self->{log}->debug("hafas_json_req($url): $@"); return; } if ( $res->is_error ) { Loading Loading @@ -82,9 +86,11 @@ sub hafas_xml_req { return $content; } my $res = eval { $self->{user_agent}->get($url)->result }; my $res = eval { $self->{user_agent}->get( $url => $self->{header} )->result }; if ($@) { $self->{log}->debug("hafas_xml_req($url): $@"); return; } if ( $res->is_error ) { Loading
lib/DBInfoscreen/Helper/Wagonorder.pm 0 → 100644 +69 −0 Original line number Diff line number Diff line package DBInfoscreen::Helper::Wagonorder; use strict; use warnings; use 5.020; use DateTime; use Encode qw(decode encode); use Mojo::JSON qw(decode_json); use XML::LibXML; sub new { my ( $class, %opt ) = @_; my $version = $opt{version}; $opt{header} = { 'User-Agent' => "dbf/${version} +https://finalrewind.org/projects/db-fakedisplay" }; return bless( \%opt, $class ); } sub is_available { my ( $self, $train, $wr_link ) = @_; if ( $self->check_wagonorder( $train->train_no, $wr_link ) ) { return 1; } elsif ( $train->is_wing ) { my $wing = $train->wing_of; if ( $self->check_wagonorder( $wing->train_no, $wr_link ) ) { return 1; } } return; } sub check_wagonorder { my ( $self, $train_no, $wr_link ) = @_; my $url = "https://lib.finalrewind.org/dbdb/has_wagonorder/${train_no}/${wr_link}"; my $cache = $self->{cache}; if ( my $content = $self->{cache}->get($url) ) { return $content eq 'y' ? 1 : undef; } my $ua = $self->{user_agent}->request_timeout(2); my $res = eval { $ua->head( $url => $self->{header} )->result }; if ($@) { $self->{log}->debug("check_wagonorder($url): $@"); return; } if ( $res->is_error ) { $cache->set( $url, 'n' ); return; } else { $cache->set( $url, 'y' ); return 1; } } 1;