diff options
| -rwxr-xr-x | lib/Travelynx/Controller/Traveling.pm | 61 | ||||
| -rw-r--r-- | lib/Travelynx/Helper/HAFAS.pm | 2 | ||||
| -rw-r--r-- | templates/_departures_hafas.html.ep | 44 | ||||
| -rw-r--r-- | templates/_departures_iris.html.ep | 52 | ||||
| -rw-r--r-- | templates/departures.html.ep | 58 | ||||
| -rw-r--r-- | templates/exception.html.ep | 2 | 
6 files changed, 153 insertions, 66 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), diff --git a/templates/_departures_hafas.html.ep b/templates/_departures_hafas.html.ep new file mode 100644 index 0000000..5b1a057 --- /dev/null +++ b/templates/_departures_hafas.html.ep @@ -0,0 +1,44 @@ +<table class="striped"> +<tbody> +% my $orientation_bar_shown = param('train'); +% my $now_epoch = now()->epoch; +% for my $result (@{$results}) { +	% my $td_class = ''; +	% my $link_class = 'action-checkin'; +	% if ($result->is_cancelled) { +		% $td_class = "cancelled"; +		% $link_class = 'action-cancelled-from'; +	% } +	% if (not $orientation_bar_shown and $result->datetime->epoch < $now_epoch) { +		% $orientation_bar_shown = 1; +		<tr> +			<td> +			</td> +			<td> +				— Anfragezeitpunkt — +			</td> +			<td> +			</td> +		</tr> +	% } +	<tr class="<%= $link_class %>" data-station="<%= $result->station_eva %>" data-train="<%= $result->id %>" data-tr="3"> +		<td> +			<a> +				<%= $result->line %> +			</a> +		</td> +		<td class="<%= $td_class %>"> +			<a> +				<%= $result->destination %> +			</a> +		</td> +		<td class="<%= $td_class %>"> +			%= $result->datetime->strftime('%H:%M') +			% if ($result->delay) { +				(<%= sprintf('%+d', $result->delay) %>) +			% } +		</td> +	</tr> +% } +</tbody> +</table> diff --git a/templates/_departures_iris.html.ep b/templates/_departures_iris.html.ep new file mode 100644 index 0000000..b24c3f1 --- /dev/null +++ b/templates/_departures_iris.html.ep @@ -0,0 +1,52 @@ +<table class="striped"> +<tbody> +% my $orientation_bar_shown = param('train'); +% my $now_epoch = now()->epoch; +% for my $result (@{$results}) { +	% my $td_class = ''; +	% my $link_class = 'action-checkin'; +	% if ($result->departure_is_cancelled) { +		% $td_class = "cancelled"; +		% $link_class = 'action-cancelled-from'; +	% } +	% if (not $orientation_bar_shown and $result->departure->epoch < $now_epoch) { +		% $orientation_bar_shown = 1; +		<tr> +			<td> +			</td> +			<td> +				— Anfragezeitpunkt — +			</td> +			<td> +			</td> +		</tr> +	% } +	<tr class="<%= $link_class %>" data-station="<%= $result->station_uic %>" data-train="<%= $result->train_id %>" data-tr="3"> +		<td> +			<a> +				<%= $result->line %> +			</a> +		</td> +		<td class="<%= $td_class %>"> +			<a> +				<%= $result->destination %> +			</a> +		</td> +		<td class="<%= $td_class %>"> +			% if ($result->departure_hidden) { +				(<%= $result->departure->strftime('%H:%M') %>) +			% } +			% else { +				%= $result->departure->strftime('%H:%M') +			% } +			% if ($result->departure_delay) { +				(<%= sprintf('%+d', $result->departure_delay) %>) +			% } +			% elsif (not $result->has_realtime and $result->start->epoch < $now_epoch) { +				<i class="material-icons" aria-label="Keine Echtzeitdaten vorhanden" style="font-size: 16px;">gps_off</i> +			% } +		</td> +	</tr> +% } +</tbody> +</table> diff --git a/templates/departures.html.ep b/templates/departures.html.ep index 25e752a..857be74 100644 --- a/templates/departures.html.ep +++ b/templates/departures.html.ep @@ -63,58 +63,12 @@  				und maximal 120 Minuten nach Abfahrt möglich.  			% }  		</p> -		<table class="striped"> -			<tbody> -				% my $orientation_bar_shown = param('train'); -				% my $now_epoch = now()->epoch; -				% for my $result (@{$results}) { -					% my $td_class = ''; -					% my $link_class = 'action-checkin'; -					% if ($result->departure_is_cancelled) { -						% $td_class = "cancelled"; -						% $link_class = 'action-cancelled-from'; -					% } -					% if (not $orientation_bar_shown and $result->departure->epoch < $now_epoch) { -						% $orientation_bar_shown = 1; -						<tr> -							<td> -							</td> -							<td> -								— Anfragezeitpunkt — -							</td> -							<td> -							</td> -						</tr> -					% } -					<tr class="<%= $link_class %>" data-station="<%= $result->station_uic %>" data-train="<%= $result->train_id %>" data-tr="3"> -						<td> -							<a> -								<%= $result->line %> -							</a> -						</td> -						<td class="<%= $td_class %>"> -							<a> -								<%= $result->destination %> -							</a> -						</td> -						<td class="<%= $td_class %>"> -							% if ($result->departure_hidden) { -								(<%= $result->departure->strftime('%H:%M') %>) -							% } -							% else { -								%= $result->departure->strftime('%H:%M') -							% } -							% if ($result->departure_delay) { -								(<%= sprintf('%+d', $result->departure_delay) %>) -							% } -							% elsif (not $result->has_realtime and $result->start->epoch < $now_epoch) { -								<i class="material-icons" aria-label="Keine Echtzeitdaten vorhanden" style="font-size: 16px;">gps_off</i> -							% } -						</td> -					</tr> -				% } -			</tbody> -		</table> +		% if ($hafas) { +			%= include '_departures_hafas', results => $results; +		% } +		% else { +			%= include '_departures_iris', results => $results; +		% }  	</div>  </div> diff --git a/templates/exception.html.ep b/templates/exception.html.ep index 290efc5..ec01ad2 100644 --- a/templates/exception.html.ep +++ b/templates/exception.html.ep @@ -21,7 +21,7 @@  			%= DateTime->now(time_zone => 'Europe/Berlin')->strftime("%d/%b/%Y:%H:%M:%S %z")  			<br/><br/>  			Message: -			%= (split(qr{\n}, $exception->message))[0] +			%= ref($exception) ? (split(qr{\n}, $exception->message))[0] : $exception  		</p>  	</div>  </div> | 
