aboutsummaryrefslogtreecommitdiffstats
path: root/perllib/FixMyStreet/App/Controller/Offline.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perllib/FixMyStreet/App/Controller/Offline.pm')
-rw-r--r--perllib/FixMyStreet/App/Controller/Offline.pm62
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;