summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2022-11-09 18:14:07 +0100
committerDaniel Friesel <derf@finalrewind.org>2022-11-09 18:14:07 +0100
commitc26c8820f296de41ce7093416b584cfdb6b657fa (patch)
treee00798de3b1966840cc6d82736fe8d13abe2b0bb /lib
parentfc05987b14924e51c37092876e7c156b748b457b (diff)
Switch to internal HAFAS client for connection details
Diffstat (limited to 'lib')
-rwxr-xr-xlib/Travelynx.pm3
-rwxr-xr-xlib/Travelynx/Controller/Traveling.pm85
-rw-r--r--lib/Travelynx/Helper/HAFAS.pm16
3 files changed, 47 insertions, 57 deletions
diff --git a/lib/Travelynx.pm b/lib/Travelynx.pm
index 7c8b48e..07b2a89 100755
--- a/lib/Travelynx.pm
+++ b/lib/Travelynx.pm
@@ -93,8 +93,6 @@ sub startup {
$self->secrets( $self->config->{secrets} );
}
- $self->config->{backend}{hafas_rest_api} //= 'https://v5.db.transport.rest';
-
chomp $self->config->{version};
$self->plugin(
@@ -300,7 +298,6 @@ sub startup {
my ($self) = @_;
state $hafas = Travelynx::Helper::HAFAS->new(
log => $self->app->log,
- hafas_rest_api => $self->app->config->{backend}{hafas_rest_api},
main_cache => $self->app->cache_iris_main,
realtime_cache => $self->app->cache_iris_rt,
root_url => $self->base_url_for('/')->to_abs,
diff --git a/lib/Travelynx/Controller/Traveling.pm b/lib/Travelynx/Controller/Traveling.pm
index c70d44a..8d16811 100755
--- a/lib/Travelynx/Controller/Traveling.pm
+++ b/lib/Travelynx/Controller/Traveling.pm
@@ -241,15 +241,14 @@ sub get_connecting_trains_p {
}
my $hafas_promise = Mojo::Promise->new;
- my $rest_api = $self->config->{backend}{hafas_rest_api};
- $self->hafas->get_json_p(
-"${rest_api}/stops/${eva}/departures?results=120&duration=${lookahead}&stopovers=true&when=10 minutes ago",
- realtime => 1,
- encoding => 'utf-8'
+ $self->hafas->get_departures_p(
+ eva => $eva,
+ lookbehind => 10,
+ lookahead => $lookahead
)->then(
sub {
- my ($json) = @_;
- $hafas_promise->resolve($json);
+ my ($status) = @_;
+ $hafas_promise->resolve( [ $status->results ] );
return;
}
)->catch(
@@ -268,11 +267,6 @@ sub get_connecting_trains_p {
my @hafas_trains = @{ $hafas->[0] };
my @transit_fyi;
- my $strp = DateTime::Format::Strptime->new(
- pattern => '%Y-%m-%dT%H:%M:%S%z',
- time_zone => 'Europe/Berlin',
- );
-
# We've already got a list of connecting trains; this function
# only adds further information to them. We ignore errors, as
# partial data is better than no data.
@@ -282,25 +276,19 @@ sub get_connecting_trains_p {
next;
}
for my $hafas_train (@hafas_trains) {
- if ( $hafas_train->{line}{fahrtNr}
+ if ( $hafas_train->number
+ and $hafas_train->number
== $iris_train->[0]->train_no )
{
- for my $stop (
- @{ $hafas_train->{nextStopovers} // [] } )
- {
- if ( $stop->{stop}{name}
- and $stop->{stop}{name} eq $iris_train->[1]
- and $stop->{arrival} )
+ for my $stop ( $hafas_train->route ) {
+ if ( $stop->{name}
+ and $stop->{name} eq $iris_train->[1]
+ and $stop->{arr} )
{
- $iris_train->[2] = $strp->parse_datetime(
- $stop->{arrival} );
- if ( $iris_train->[2]
- and $iris_train->[0]->departure_delay
- and $stop->{arrival} eq
- $stop->{plannedArrival} )
+ $iris_train->[2] = $stop->{arr};
+ if ( $iris_train->[0]->departure_delay
+ and not $stop->{arr_delay} )
{
-# If the departure is delayed, but the arrival supposedly on time, we assume that this is an API issue and manually compute the expected arrival time.
-# This avoids cases where a connection is shown as arriving at its destination before having departed at a previous stop.
$iris_train->[2]
->add( minutes => $iris_train->[0]
->departure_delay );
@@ -315,29 +303,20 @@ sub get_connecting_trains_p {
if ( $use_history & 0x04 and @{$lt_stops} ) {
my %via_count = map { $_ => 0 } @{$lt_stops};
for my $hafas_train (@hafas_trains) {
- for
- my $stop ( @{ $hafas_train->{nextStopovers} // [] } )
- {
+ for my $stop ( $hafas_train->route ) {
for my $dest ( @{$lt_stops} ) {
- if ( $stop->{stop}{name}
- and $stop->{stop}{name} eq $dest
+ if ( $stop->{name}
+ and $stop->{name} eq $dest
and $via_count{$dest} < 2
- and $hafas_train->{when} )
+ and $hafas_train->datetime )
{
- my $departure = $strp->parse_datetime(
- $hafas_train->{when} );
- my $arrival
- = $strp->parse_datetime(
- $stop->{arrival} );
- my $delay = undef;
- if ( defined $hafas_train->{delay} ) {
- $delay = $hafas_train->{delay} / 60;
- if ( $delay
- and $stop->{arrival} eq
- $stop->{plannedArrival} )
- {
- $arrival->add( minutes => $delay );
- }
+ my $departure = $hafas_train->datetime;
+ my $arrival = $stop->{arr};
+ my $delay = $hafas_train->delay;
+ if ( $delay
+ and $stop->{arr} == $stop->{sched_arr} )
+ {
+ $arrival->add( minutes => $delay );
}
if ( $departure->epoch >= $exclude_before )
{
@@ -346,9 +325,7 @@ sub get_connecting_trains_p {
@transit_fyi,
[
{
- line =>
- $hafas_train->{line}
- {name},
+ line => $hafas_train->line,
departure => $departure,
departure_delay => $delay
},
@@ -1164,18 +1141,18 @@ sub station {
}
)->catch(
sub {
- my ($status) = @_;
- if ( $status->{errstr} ) {
+ my ($err) = @_;
+ if ( ref($err) eq 'HASH' ) {
$self->render(
'landingpage',
version => $self->app->config->{version} // 'UNKNOWN',
with_autocomplete => 1,
with_geolocation => 1,
- error => $status->{errstr}
+ error => $err->{errstr},
);
}
else {
- $self->render( 'exception', exception => $status );
+ $self->render( 'exception', exception => $err );
}
}
)->wait;
diff --git a/lib/Travelynx/Helper/HAFAS.pm b/lib/Travelynx/Helper/HAFAS.pm
index 7b42384..a8fbbfb 100644
--- a/lib/Travelynx/Helper/HAFAS.pm
+++ b/lib/Travelynx/Helper/HAFAS.pm
@@ -83,6 +83,22 @@ sub get_json_p {
return $promise;
}
+sub get_departures_p {
+ my ( $self, %opt ) = @_;
+
+ my $when = DateTime->now( time_zone => 'Europe/Berlin' )
+ ->subtract( minutes => $opt{lookbehind} );
+ return Travel::Status::DE::HAFAS->new_p(
+ station => $opt{eva},
+ datetime => $when,
+ duration => $opt{lookahead},
+ results => 120,
+ cache => $self->{realtime_cache},
+ promise => 'Mojo::Promise',
+ user_agent => $self->{user_agent}->request_timeout(5),
+ );
+}
+
sub get_route_timestamps_p {
my ( $self, %opt ) = @_;