diff options
author | Birte Kristina Friesel <derf@finalrewind.org> | 2024-11-05 21:35:30 +0100 |
---|---|---|
committer | Birte Kristina Friesel <derf@finalrewind.org> | 2024-11-05 21:35:30 +0100 |
commit | 042a59c865ab5a319bee0844368fd42df2e502b9 (patch) | |
tree | b4f60c4989e11042b65d623e7fce72af7505c3c4 /lib/DBInfoscreen/Controller | |
parent | 16d9f3a07c37a5e741c185be36077e7d0523c985 (diff) |
EFA departure board: add JSON interface
Diffstat (limited to 'lib/DBInfoscreen/Controller')
-rw-r--r-- | lib/DBInfoscreen/Controller/Stationboard.pm | 50 |
1 files changed, 33 insertions, 17 deletions
diff --git a/lib/DBInfoscreen/Controller/Stationboard.pm b/lib/DBInfoscreen/Controller/Stationboard.pm index ae3f1ae..0e1c6aa 100644 --- a/lib/DBInfoscreen/Controller/Stationboard.pm +++ b/lib/DBInfoscreen/Controller/Stationboard.pm @@ -1695,6 +1695,11 @@ sub handle_efa { for my $result ( $efa->results ) { my $time; + if ( $template eq 'json' ) { + push( @departures, $result ); + next; + } + if ( $show_realtime and $result->rt_datetime ) { $time = $result->rt_datetime->strftime('%H:%M'); } @@ -1764,23 +1769,34 @@ sub handle_efa { ); } - $self->render( - $template, - description => "Abfahrtstafel $station_name", - departures => \@departures, - station => $efa->stop->name, - version => $self->config->{version}, - title => $efa->stop->name // $station_name, - refresh_interval => $template eq 'app' ? 0 : 120, - hide_opts => $hide_opts, - hide_low_delay => $hide_low_delay, - show_realtime => $show_realtime, - load_marquee => ( - $template eq 'single' - or $template eq 'multi' - ), - force_mobile => ( $template eq 'app' ), - ); + if ( $template eq 'json' ) { + $self->res->headers->access_control_allow_origin(q{*}); + my $json = { + departures => \@departures, + }; + $self->render( + json => $json, + ); + } + else { + $self->render( + $template, + description => "Abfahrtstafel $station_name", + departures => \@departures, + station => $efa->stop->name, + version => $self->config->{version}, + title => $efa->stop->name // $station_name, + refresh_interval => $template eq 'app' ? 0 : 120, + hide_opts => $hide_opts, + hide_low_delay => $hide_low_delay, + show_realtime => $show_realtime, + load_marquee => ( + $template eq 'single' + or $template eq 'multi' + ), + force_mobile => ( $template eq 'app' ), + ); + } } sub handle_result { |