From 970e30202dc1caa3f81f3351b4186d8cde3ddd97 Mon Sep 17 00:00:00 2001 From: Birte Kristina Friesel Date: Sun, 31 Mar 2024 14:44:37 +0200 Subject: HAFAS departures: add earlier / later links --- lib/Travelynx/Controller/Traveling.pm | 39 +++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 11 deletions(-) (limited to 'lib/Travelynx/Controller/Traveling.pm') diff --git a/lib/Travelynx/Controller/Traveling.pm b/lib/Travelynx/Controller/Traveling.pm index 7519cf6..89385e1 100755 --- a/lib/Travelynx/Controller/Traveling.pm +++ b/lib/Travelynx/Controller/Traveling.pm @@ -915,11 +915,12 @@ sub travel_action { } sub station { - my ($self) = @_; - my $station = $self->stash('station'); - my $train = $self->param('train'); - my $trip_id = $self->param('trip_id'); - my $uid = $self->current_user->{id}; + my ($self) = @_; + my $station = $self->stash('station'); + my $train = $self->param('train'); + my $trip_id = $self->param('trip_id'); + my $timestamp = $self->param('timestamp'); + my $uid = $self->current_user->{id}; my @timeline = $self->in_transit->get_timeline( uid => $uid, @@ -934,11 +935,22 @@ sub station { $self->render_later; + if ( $timestamp and $timestamp =~ m{ ^ \d+ $ }x ) { + $timestamp = DateTime->from_epoch( + epoch => $timestamp, + time_zone => 'Europe/Berlin' + ); + } + else { + $timestamp = DateTime->now( time_zone => 'Europe/Berlin' ); + } + my $use_hafas = $self->param('hafas'); my $promise; if ($use_hafas) { $promise = $self->hafas->get_departures_p( eva => $station, + timestamp => $timestamp, lookbehind => 30, lookahead => 30, ); @@ -957,6 +969,10 @@ sub station { my $api_link; my @results; + my $now = $self->now->epoch; + my $now_within_range + = abs( $timestamp->epoch - $now ) < 1800 ? 1 : 0; + if ($use_hafas) { my $iris_eva = List::Util::min grep { $_ >= 1000000 } @@ -965,14 +981,9 @@ sub station { $api_link = '/s/' . $iris_eva; } - 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; + map { [ $_, $_->datetime->epoch ] } $status->results; $self->stations->add_meta( eva => $status->station->{eva}, meta => $status->station->{evas} // [] @@ -1049,6 +1060,8 @@ sub station { $self->render( 'departures', eva => $status->{station_eva}, + datetime => $timestamp, + now_in_range => $now_within_range, results => \@results, hafas => $use_hafas, station => $status->{station_name}, @@ -1066,6 +1079,8 @@ sub station { $self->render( 'departures', eva => $status->{station_eva}, + datetime => $timestamp, + now_in_range => $now_within_range, results => \@results, hafas => $use_hafas, station => $status->{station_name}, @@ -1082,6 +1097,8 @@ sub station { $self->render( 'departures', eva => $status->{station_eva}, + datetime => $timestamp, + now_in_range => $now_within_range, results => \@results, hafas => $use_hafas, station => $status->{station_name}, -- cgit v1.2.3