diff options
Diffstat (limited to 'perllib/FixMyStreet/App/Controller/Offline.pm')
-rw-r--r-- | perllib/FixMyStreet/App/Controller/Offline.pm | 62 |
1 files changed, 36 insertions, 26 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Offline.pm b/perllib/FixMyStreet/App/Controller/Offline.pm index 75bb7f7ff..adb3de14d 100644 --- a/perllib/FixMyStreet/App/Controller/Offline.pm +++ b/perllib/FixMyStreet/App/Controller/Offline.pm @@ -33,24 +33,12 @@ sub manifest: Path("/.well-known/manifest.webmanifest") { my ($self, $c) = @_; $c->res->content_type('application/manifest+json'); - my $theme = $c->model('DB::ManifestTheme')->find({ cobrand => $c->cobrand->moniker }); - unless ( $theme ) { - $theme = $c->model('DB::ManifestTheme')->new({ - name => $c->stash->{site_name}, - short_name => $c->stash->{site_name}, - background_colour => '#ffffff', - theme_colour => '#ffd000', - }); - } - - $c->forward("_stash_manifest_icons", [ $c->cobrand->moniker ]); - my $data = { - name => $theme->name, - short_name => $theme->short_name, - background_color => $theme->background_colour, - theme_color => $theme->theme_colour, - icons => $c->stash->{manifest_icons}, + name => $c->stash->{manifest_theme}->{name}, + short_name => $c->stash->{manifest_theme}->{short_name}, + background_color => $c->stash->{manifest_theme}->{background_colour}, + theme_color => $c->stash->{manifest_theme}->{theme_colour}, + icons => $c->stash->{manifest_theme}->{icons}, lang => $c->stash->{lang_code}, display => "minimal-ui", start_url => "/?pwa", @@ -64,14 +52,30 @@ sub manifest: Path("/.well-known/manifest.webmanifest") { $c->res->body($json); } -sub _stash_manifest_icons : Private { +sub _stash_manifest_theme : Private { + my ($self, $c, $cobrand) = @_; + + $c->stash->{manifest_theme} = $c->forward('_find_manifest_theme', [ $cobrand ]); +} + +sub _find_manifest_theme : Private { my ($self, $c, $cobrand, $ignore_cache_and_defaults) = @_; - my $key = "manifest_icons:$cobrand"; + my $key = "manifest_theme:$cobrand"; # ignore_cache_and_defaults is only used in the admin, so no harm bypassing cache - my $icons = $ignore_cache_and_defaults ? undef : Memcached::get($key); + my $manifest_theme = $ignore_cache_and_defaults ? undef : Memcached::get($key); + + unless ( $manifest_theme ) { + my $theme = $c->model('DB::ManifestTheme')->find({ cobrand => $cobrand }); + unless ( $theme ) { + $theme = $c->model('DB::ManifestTheme')->new({ + name => $c->stash->{site_name}, + short_name => $c->stash->{site_name}, + background_colour => '#ffffff', + theme_colour => '#ffd000', + }); + } - unless ( $icons ) { my @icons; my $uri = '/theme/' . $cobrand; my $theme_path = path(FixMyStreet->path_to('web' . $uri)); @@ -92,20 +96,26 @@ sub _stash_manifest_icons : Private { { src => "/cobrands/fixmystreet/images/512.png", sizes => "512x512", type => "image/png" }; } - $icons = \@icons; + $manifest_theme = { + icons => \@icons, + background_colour => $theme->background_colour, + theme_colour => $theme->theme_colour, + name => $theme->name, + short_name => $theme->short_name, + }; unless ($ignore_cache_and_defaults) { - Memcached::set($key, $icons); + Memcached::set($key, $manifest_theme); } } - $c->stash->{manifest_icons} = $icons; + return $manifest_theme; } -sub _clear_manifest_icons_cache : Private { +sub _clear_manifest_theme_cache : Private { my ($self, $c, $cobrand ) = @_; - Memcached::set("manifest_icons:$cobrand", ""); + Memcached::delete("manifest_theme:$cobrand"); } __PACKAGE__->meta->make_immutable; |