stationboard: add HAFAS support
This commit is contained in:
parent
3acee2b285
commit
c3c7a0c78b
6 changed files with 153 additions and 66 deletions
|
@ -795,22 +795,56 @@ sub station {
|
|||
my $train = $self->param('train');
|
||||
|
||||
$self->render_later;
|
||||
$self->iris->get_departures_p(
|
||||
|
||||
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
|
||||
)->then(
|
||||
with_related => 1,
|
||||
);
|
||||
}
|
||||
$promise->then(
|
||||
sub {
|
||||
my ($status) = @_;
|
||||
|
||||
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
|
||||
my @results = grep { $_->departure } @{ $status->{results} };
|
||||
@results = grep { $_->departure } @{ $status->{results} };
|
||||
|
||||
@results = map { $_->[0] }
|
||||
sort { $b->[1] <=> $a->[1] }
|
||||
map { [ $_, $_->departure->epoch // $_->sched_departure->epoch ] }
|
||||
@results;
|
||||
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}",
|
||||
|
|
|
@ -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),
|
||||
|
|
44
templates/_departures_hafas.html.ep
Normal file
44
templates/_departures_hafas.html.ep
Normal file
|
@ -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>
|
52
templates/_departures_iris.html.ep
Normal file
52
templates/_departures_iris.html.ep
Normal file
|
@ -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>
|
|
@ -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') %>)
|
||||
% if ($hafas) {
|
||||
%= include '_departures_hafas', results => $results;
|
||||
% }
|
||||
% else {
|
||||
%= $result->departure->strftime('%H:%M')
|
||||
%= include '_departures_iris', results => $results;
|
||||
% }
|
||||
% 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>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in a new issue