diff --git a/src/assets/graphicarts/favicon-144.png b/src/assets/graphicarts/favicon-144.png new file mode 100644 index 0000000..9555059 Binary files /dev/null and b/src/assets/graphicarts/favicon-144.png differ diff --git a/src/assets/index.html b/src/assets/index.html index 33e44c0..c63bd75 100644 --- a/src/assets/index.html +++ b/src/assets/index.html @@ -3,16 +3,22 @@ yarr! - - - - - + + + + + diff --git a/src/assets/javascripts/sw.js b/src/assets/javascripts/sw.js new file mode 100644 index 0000000..1ab5f90 --- /dev/null +++ b/src/assets/javascripts/sw.js @@ -0,0 +1,34 @@ +const VERSION = "v2.4" +const APP_STATIC_RESOURCES = [ + "/", + "/static/stylesheets/bootstrap.min.css", + "/static/stylesheets/app.css", + "/static/graphicarts/favicon.svg", + "/static/graphicarts/favicon.png", +] +const CACHE_NAME = `yarr-${VERSION}`; + +self.addEventListener("install", (e) => { + e.waitUntil((async () => { + const cache = await caches.open(CACHE_NAME) + await cache.addAll(APP_STATIC_RESOURCES) + })() + ) +}) + +// delete old caches on activate +self.addEventListener("activate", (event) => { + event.waitUntil( + (async () => { + const names = await caches.keys() + await Promise.all( + names.map((name) => { + if (name !== CACHE_NAME) { + return caches.delete(name) + } + }), + ) + await clients.claim() + })(), + ) +}) diff --git a/src/server/routes.go b/src/server/routes.go index ee4b6c6..f22f161 100644 --- a/src/server/routes.go +++ b/src/server/routes.go @@ -41,6 +41,7 @@ func (s *Server) handler() http.Handler { r.For("/", s.handleIndex) r.For("/manifest.json", s.handleManifest) + r.For("/sw.js", s.handleServiceWorker) r.For("/static/*path", s.handleStatic) r.For("/api/status", s.handleStatus) r.For("/api/folders", s.handleFolderList) @@ -93,10 +94,24 @@ func (s *Server) handleManifest(c *router.Context) { "sizes": "64x64", "type": "image/png", }, + { + "src": s.BasePath + "/static/graphicarts/favicon-144.png", + "sizes": "144x144", + "type": "image/png", + }, + { + "src": s.BasePath + "/static/graphicarts/favicon.svg", + "sizes": "any", + "type": "image/svg", + }, }, }) } +func (s *Server) handleServiceWorker(c *router.Context) { + http.ServeFile(c.Out, c.Req, "src/assets/javascripts/sw.js") +} + func (s *Server) handleStatus(c *router.Context) { c.JSON(http.StatusOK, map[string]interface{}{ "running": s.worker.FeedsPending(),