diff options
author | Derf Null <derf@finalrewind.org> | 2023-03-27 21:03:25 +0200 |
---|---|---|
committer | Derf Null <derf@finalrewind.org> | 2023-03-27 21:03:25 +0200 |
commit | c3c7a0c78b30cc7ef2b836cca4eb0a4e110955da (patch) | |
tree | b66a6f0dcb4cb8d0e10ad29c84d79d0f309ee402 /lib | |
parent | 3acee2b285ac81405c5d2ce8889c77460f6f58a0 (diff) |
stationboard: add HAFAS support
Diffstat (limited to 'lib')
-rwxr-xr-x | lib/Travelynx/Controller/Traveling.pm | 61 | ||||
-rw-r--r-- | lib/Travelynx/Helper/HAFAS.pm | 2 |
2 files changed, 50 insertions, 13 deletions
diff --git a/lib/Travelynx/Controller/Traveling.pm b/lib/Travelynx/Controller/Traveling.pm index 00cc02a..e9a8bb5 100755 --- a/lib/Travelynx/Controller/Traveling.pm +++ b/lib/Travelynx/Controller/Traveling.pm @@ -795,22 +795,56 @@ sub station { my $train = $self->param('train'); $self->render_later; - $self->iris->get_departures_p( - station => $station, - lookbehind => 120, - lookahead => 30, - with_related => 1 - )->then( + + my $use_hafas = $self->param('hafas'); + my $promise; + if ($use_hafas) { + $promise = $self->hafas->get_departures_p( + eva => $station, + lookbehind => 120, + lookahead => 30, + ); + } + else { + $promise = $self->iris->get_departures_p( + station => $station, + lookbehind => 120, + lookahead => 30, + with_related => 1, + ); + } + $promise->then( sub { my ($status) = @_; - # You can't check into a train which terminates here - my @results = grep { $_->departure } @{ $status->{results} }; + my @results; + if ($use_hafas) { + my $now = $self->now->epoch; + @results = map { $_->[0] } + sort { $b->[1] <=> $a->[1] } + map { [ $_, $_->datetime->epoch ] } + grep { + ( $_->datetime // $_->sched_datetime )->epoch + < $now + 30 * 60 + } $status->results; + $status = { + station_eva => $status->station->{eva}, + station_name => + List::Util::reduce { length($a) < length($b) ? $a : $b } + @{ $status->station->{names} }, + related_stations => [], + }; + } + else { + # You can't check into a train which terminates here + @results = grep { $_->departure } @{ $status->{results} }; - @results = map { $_->[0] } - sort { $b->[1] <=> $a->[1] } - map { [ $_, $_->departure->epoch // $_->sched_departure->epoch ] } - @results; + @results = map { $_->[0] } + sort { $b->[1] <=> $a->[1] } + map { + [ $_, $_->departure->epoch // $_->sched_departure->epoch ] + } @results; + } my $connections_p; if ($train) { @@ -842,6 +876,7 @@ sub station { 'departures', eva => $status->{station_eva}, results => \@results, + hafas => $use_hafas, station => $status->{station_name}, related_stations => $status->{related_stations}, connections => $connecting_trains, @@ -856,6 +891,7 @@ sub station { 'departures', eva => $status->{station_eva}, results => \@results, + hafas => $use_hafas, station => $status->{station_name}, related_stations => $status->{related_stations}, title => "travelynx: $status->{station_name}", @@ -870,6 +906,7 @@ sub station { 'departures', eva => $status->{station_eva}, results => \@results, + hafas => $use_hafas, station => $status->{station_name}, related_stations => $status->{related_stations}, title => "travelynx: $status->{station_name}", diff --git a/lib/Travelynx/Helper/HAFAS.pm b/lib/Travelynx/Helper/HAFAS.pm index 9bff723..a418b61 100644 --- a/lib/Travelynx/Helper/HAFAS.pm +++ b/lib/Travelynx/Helper/HAFAS.pm @@ -91,7 +91,7 @@ sub get_departures_p { station => $opt{eva}, datetime => $when, duration => $opt{lookahead}, - results => 120, + results => 300, cache => $self->{realtime_cache}, promise => 'Mojo::Promise', user_agent => $self->{user_agent}->request_timeout(5), |