diff options
| -rwxr-xr-x | lib/Travelynx/Controller/Traveling.pm | 39 | ||||
| -rw-r--r-- | lib/Travelynx/Helper/HAFAS.pm | 4 | ||||
| -rw-r--r-- | templates/departures.html.ep | 24 | 
3 files changed, 52 insertions, 15 deletions
| 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}, diff --git a/lib/Travelynx/Helper/HAFAS.pm b/lib/Travelynx/Helper/HAFAS.pm index 64f2949..6cbaf11 100644 --- a/lib/Travelynx/Helper/HAFAS.pm +++ b/lib/Travelynx/Helper/HAFAS.pm @@ -85,7 +85,9 @@ sub get_json_p {  sub get_departures_p {  	my ( $self, %opt ) = @_; -	my $when = DateTime->now( time_zone => 'Europe/Berlin' ) +	my $when +	  = ( $opt{timestamp}->clone +		  // DateTime->now( time_zone => 'Europe/Berlin' ) )  	  ->subtract( minutes => $opt{lookbehind} );  	return Travel::Status::DE::HAFAS->new_p(  		station    => $opt{eva}, diff --git a/templates/departures.html.ep b/templates/departures.html.ep index 039ec28..f3fd25e 100644 --- a/templates/departures.html.ep +++ b/templates/departures.html.ep @@ -9,19 +9,18 @@  		% }  	</div>  </div> +% if ($api_link) {  <div class="row">  	<div class="col s12"> -	% if ($api_link) {  	% if (param('hafas')) {  		<a href="<%= $api_link %>" class="btn-small"><i class="material-icons left"  aria-hidden="true">train</i>zum Schienenverkehr</a>  	% }  	% else {  		<a href="<%= $api_link %>" class="btn-small"><i class="material-icons left"  aria-hidden="true">directions</i>zum Nahverkehr</a>  	% } -	% } -	<a class="btn-small" href="#now"><i class="material-icons left" aria-hidden="true">vertical_align_center</i>Jetzt</a>  	</div>  </div> +% }  % my $have_connections = 0;  % if ($user_status->{checked_in}) { @@ -90,6 +89,25 @@  		</div>  	</div>  % } + +<div class="row"> +	<div class="col s4 center-align"> +		% if ($hafas) { +			<a class="btn-small" href="<%= url_for('sstation', station => stash('station'))->query({hafas => 1, timestamp => $datetime->clone->subtract(hours => 1)->epoch}) %>"><i class="material-icons left" aria-hidden="true">chevron_left</i>früher</a> +		% } +	</div> +	<div class="col s4 center-align"> +		% if ($now_in_range) { +			<a class="btn-small" href="#now"><i class="material-icons left" aria-hidden="true">vertical_align_center</i>Jetzt</a> +		% } +	</div> +	<div class="col s4 center-align"> +		% if ($hafas) { +			<a class="btn-small" href="<%= url_for('sstation', station => stash('station'))->query({hafas => 1, timestamp => $datetime->clone->add(hours => 1)->epoch}) %>">später<i class="material-icons right" aria-hidden="true">chevron_right</i></a> +		% } +	</div> +</div> +  <div class="row">  	<div class="col s12">  		<p> | 
