summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2022-04-14 11:16:43 +0200
committerDaniel Friesel <derf@finalrewind.org>2022-04-14 11:18:18 +0200
commite2753e2a9604e9687e1ba8dda26174cc013d75c8 (patch)
treea377b331c0c4692cbec9dd0b79e869be3cb9112c
parentdd1143470f634a05fcbcbc2f0724b219026add77 (diff)
stationboard: directly render json
The render_to_string path is only needed for legacy callback requests. With this change, renderer->compression(0) is no longer required for non-callback json requests to work.
-rw-r--r--lib/DBInfoscreen.pm3
-rw-r--r--lib/DBInfoscreen/Controller/Stationboard.pm54
2 files changed, 25 insertions, 32 deletions
diff --git a/lib/DBInfoscreen.pm b/lib/DBInfoscreen.pm
index 519e837..7730f90 100644
--- a/lib/DBInfoscreen.pm
+++ b/lib/DBInfoscreen.pm
@@ -43,7 +43,8 @@ sub startup {
chomp $self->config->{version};
# Generally, the reverse proxy handles compression.
- # Also, Mojolicious compression breaks JSON endpoints for some clients.
+ # Also, Mojolicious compression breaks legacy callback-based JSON endpoints
+ # for some clients.
$self->renderer->compress(0);
$self->hook(
diff --git a/lib/DBInfoscreen/Controller/Stationboard.pm b/lib/DBInfoscreen/Controller/Stationboard.pm
index 7aff03b..6931e42 100644
--- a/lib/DBInfoscreen/Controller/Stationboard.pm
+++ b/lib/DBInfoscreen/Controller/Stationboard.pm
@@ -77,13 +77,11 @@ sub handle_no_results_json {
$self->res->headers->access_control_allow_origin(q{*});
my $json;
if ($errstr) {
- $json = $self->render_to_string(
- json => {
- api_version => $api_version,
- version => $self->config->{version},
- error => $errstr,
- }
- );
+ $json = {
+ api_version => $api_version,
+ version => $self->config->{version},
+ error => $errstr,
+ };
}
else {
my @candidates = map { { code => $_->[0], name => $_->[1] } }
@@ -91,26 +89,23 @@ sub handle_no_results_json {
if ( @candidates > 1
or ( @candidates == 1 and $candidates[0]{code} ne $station ) )
{
- $json = $self->render_to_string(
- json => {
- api_version => $api_version,
- version => $self->config->{version},
- error => 'ambiguous station code/name',
- candidates => \@candidates,
- }
- );
+ $json = {
+ api_version => $api_version,
+ version => $self->config->{version},
+ error => 'ambiguous station code/name',
+ candidates => \@candidates,
+ };
}
else {
- $json = $self->render_to_string(
- json => {
- api_version => $api_version,
- version => $self->config->{version},
- error => ( $errstr // "Got no results for '$station'" )
- }
- );
+ $json = {
+ api_version => $api_version,
+ version => $self->config->{version},
+ error => ( $errstr // "Got no results for '$station'" )
+ };
}
}
if ($callback) {
+ $json = $self->render_to_string( json => $json );
$self->render(
data => "$callback($json);",
format => 'json'
@@ -118,8 +113,7 @@ sub handle_no_results_json {
}
else {
$self->render(
- data => $json,
- format => 'json'
+ json => $json,
);
}
return;
@@ -1386,12 +1380,11 @@ sub handle_result {
if ( $template eq 'json' ) {
$self->res->headers->access_control_allow_origin(q{*});
- my $json = $self->render_to_string(
- json => {
- departures => \@departures,
- }
- );
+ my $json = {
+ departures => \@departures,
+ };
if ($callback) {
+ $json = $self->render_to_string( json => $json );
$self->render(
data => "$callback($json);",
format => 'json'
@@ -1399,8 +1392,7 @@ sub handle_result {
}
else {
$self->render(
- data => $json,
- format => 'json'
+ json => $json,
);
}
}