summaryrefslogtreecommitdiff
path: root/lib/DBInfoscreen/Helper/HAFAS.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/DBInfoscreen/Helper/HAFAS.pm')
-rw-r--r--lib/DBInfoscreen/Helper/HAFAS.pm43
1 files changed, 36 insertions, 7 deletions
diff --git a/lib/DBInfoscreen/Helper/HAFAS.pm b/lib/DBInfoscreen/Helper/HAFAS.pm
index cdb84f0..e16bad8 100644
--- a/lib/DBInfoscreen/Helper/HAFAS.pm
+++ b/lib/DBInfoscreen/Helper/HAFAS.pm
@@ -7,13 +7,14 @@ package DBInfoscreen::Helper::HAFAS;
use strict;
use warnings;
use 5.020;
+use utf8;
use DateTime;
use Encode qw(decode encode);
use Travel::Status::DE::HAFAS;
use Mojo::JSON qw(decode_json);
use Mojo::Promise;
-use XML::LibXML;
+use Mojo::UserAgent;
sub new {
my ( $class, %opt ) = @_;
@@ -29,6 +30,18 @@ sub new {
}
+sub get_coverage {
+ my ( $self, $service ) = @_;
+
+ my $service_definition = Travel::Status::DE::HAFAS::get_service($service);
+
+ if ( not $service_definition ) {
+ return {};
+ }
+
+ return $service_definition->{coverage}{area} // {};
+}
+
sub get_route_p {
my ( $self, %opt ) = @_;
@@ -37,16 +50,23 @@ sub get_route_p {
my $hafas_promise;
+ my $agent = $self->{user_agent};
+ if ( $opt{service} and $opt{service} eq 'PKP' ) {
+
+ # PKP needs proxying
+ $agent = Mojo::UserAgent->new;
+ }
+
if ( $opt{trip_id} ) {
$hafas_promise = Travel::Status::DE::HAFAS->new_p(
- service => $opt{service},
+ service => $opt{service} // 'ÖBB',
journey => {
id => $opt{trip_id},
},
language => $opt{language},
cache => $self->{realtime_cache},
promise => 'Mojo::Promise',
- user_agent => $self->{user_agent}->request_timeout(10)
+ user_agent => $agent->request_timeout(10)
);
}
elsif ( $opt{train} ) {
@@ -58,12 +78,13 @@ sub get_route_p {
}
$hafas_promise //= Travel::Status::DE::HAFAS->new_p(
+ service => $opt{service} // 'ÖBB',
journeyMatch => $opt{train_req} =~ s{^- }{}r,
datetime => ( $opt{train} ? $opt{train}->start : $opt{datetime} ),
language => $opt{language},
cache => $self->{realtime_cache},
promise => 'Mojo::Promise',
- user_agent => $self->{user_agent}->request_timeout(10)
+ user_agent => $agent->request_timeout(10)
)->then(
sub {
my ($hafas) = @_;
@@ -88,13 +109,14 @@ sub get_route_p {
}
return Travel::Status::DE::HAFAS->new_p(
+ service => $opt{service} // 'ÖBB',
journey => {
id => $result->id,
},
language => $opt{language},
cache => $self->{realtime_cache},
promise => 'Mojo::Promise',
- user_agent => $self->{user_agent}->request_timeout(10)
+ user_agent => $agent->request_timeout(10)
);
}
);
@@ -253,9 +275,16 @@ sub get_polyline_p {
my $trip_id = $opt{id};
my $line = $opt{line};
- my $service = $opt{service};
+ my $service = $opt{service} // 'ÖBB';
my $promise = Mojo::Promise->new;
+ my $agent = $self->{user_agent};
+ if ( $opt{service} and $opt{service} eq 'PKP' ) {
+
+ # PKP needs proxying
+ $agent = Mojo::UserAgent->new;
+ }
+
Travel::Status::DE::HAFAS->new_p(
service => $service,
journey => {
@@ -265,7 +294,7 @@ sub get_polyline_p {
with_polyline => 1,
cache => $self->{realtime_cache},
promise => 'Mojo::Promise',
- user_agent => $self->{user_agent}->request_timeout(10)
+ user_agent => $agent->request_timeout(10)
)->then(
sub {
my ($hafas) = @_;