Skip to content

Commit 3e310bc

Browse files
committed
8 Feb 2024
Changed client storage cache mechanism - So developers can push a "force update", flush cached files on all clients. 1) ADDED CACHE_VER to settings. 2) Added LIB-CCache.php 3) Updated LIB-Install.php > Run CCache->init() on installation end. 4) CB-worker.js - Removed storage cache, moved to PAGE-cbwork.js instead. 5) Updated TEMPLATE-top.php - Load PAGE-cbwork.js 6) Renamed assets/head-storage-boxx.webp to banner.webp 7) Page settings - Will not show "CACHE_VER" TLDR) Jut run CCache->init() after updating asset files.
1 parent 84e2739 commit 3e310bc

File tree

10 files changed

+65
-69
lines changed

10 files changed

+65
-69
lines changed

CB-worker.js

Lines changed: 6 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,11 @@
1-
// (A) CREATE/INSTALL CACHE
2-
self.addEventListener("install", evt => {
3-
self.skipWaiting();
4-
evt.waitUntil(
5-
caches.open("StorageBoxx")
6-
.then(cache => cache.addAll([
7-
"assets/bootstrap.bundle.min.js",
8-
"assets/bootstrap.bundle.min.js.map",
9-
"assets/bootstrap.min.css",
10-
"assets/bootstrap.min.css.map",
11-
"assets/CB-autocomplete.js",
12-
"assets/csv.min.js",
13-
"assets/favicon.png",
14-
"assets/head-storage-boxx.webp",
15-
"assets/html5-qrcode.min.js",
16-
"assets/ico-512.png",
17-
"assets/icomoon.woff",
18-
"assets/PAGE-cb.css",
19-
"assets/PAGE-cb.js",
20-
"assets/PAGE-check.js",
21-
"assets/PAGE-cus.js",
22-
"assets/PAGE-deliver.js",
23-
"assets/PAGE-forgot.js",
24-
"assets/PAGE-home.js",
25-
"assets/PAGE-import.js",
26-
"assets/PAGE-items.js",
27-
"assets/PAGE-items-check.js",
28-
"assets/PAGE-login.css",
29-
"assets/PAGE-login.js",
30-
"assets/PAGE-move.js",
31-
"assets/PAGE-nfc.js",
32-
"assets/PAGE-push.js",
33-
"assets/PAGE-qrscan.js",
34-
"assets/PAGE-scanner.css",
35-
"assets/PAGE-settings.js",
36-
"assets/PAGE-sup.js",
37-
"assets/PAGE-sup-items.js",
38-
"assets/PAGE-users.js",
39-
"assets/PAGE-wa.js",
40-
"assets/PAGE-wa-helper.js",
41-
"assets/qrcode.min.js",
42-
"assets/REPORT-deliver.css",
43-
"assets/REPORT-qr.css",
44-
"assets/users.webp",
45-
// @TODO - ADD MORE OF YOUR OWN TO CACHE
46-
]))
47-
.catch(err => console.error(err))
48-
);
49-
});
50-
51-
// (B) CLAIM CONTROL INSTANTLY
52-
self.addEventListener("activate", evt => self.clients.claim());
53-
54-
// (C) LOAD FROM CACHE FIRST, FALLBACK TO NETWORK IF NOT FOUND
55-
self.addEventListener("fetch", evt => evt.respondWith(
56-
caches.match(evt.request).then(res => res || fetch(evt.request))
1+
// (A) LOAD FROM CACHE FIRST, FALLBACK TO NETWORK IF NOT FOUND
2+
self.addEventListener("fetch", e => e.respondWith(
3+
caches.match(e.request).then(r => r || fetch(e.request))
574
));
585

59-
// (D) LISTEN TO PUSH NOTIFICATIONS
60-
self.addEventListener("push", evt => {
61-
const data = evt.data.json();
6+
// (B) LISTEN TO PUSH NOTIFICATIONS
7+
self.addEventListener("push", e => {
8+
const data = e.data.json();
629
self.registration.showNotification(data.title, {
6310
body: data.body,
6411
icon: data.icon,

assets/PAGE-cbwork.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
if ("serviceWorker" in navigator) {
2+
// (A) REGISTER SERVICE WORKER
3+
navigator.serviceWorker.register(cbhost.base+"CB-worker.js", {scope: cbhost.basepath});
4+
5+
// (B) UPDATE CACHE
6+
if (cbcache.s > cbcache.c) {
7+
// (B1) GET FILES LIST FROM SERVER
8+
fetch(cbhost.base+"CB-cache-files.json")
9+
.then(r => r.json())
10+
.then(async f => {
11+
// (B2) DELETE OLD CACHE
12+
if (await caches.has(cbcache.n)) {
13+
await caches.delete(cbcache.n);
14+
}
15+
16+
// (B3) UPDATE CACHE
17+
(await caches.open(cbcache.n)).addAll(f);
18+
localStorage.setItem("CBCACHE", cbcache.s);
19+
});
20+
}
21+
}
File renamed without changes.

lib/LIB-CCache.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
class CCache extends Core {
3+
// (A) REGENERATE CLIENT STORAGE CACHE LIST
4+
function init () : void {
5+
// (A1) GET FILES TO STORE IN CACHE
6+
$all = [HOST_ASSETS . "favicon.png", HOST_ASSETS . "ico-512.png"];
7+
if (file_exists(PATH_ASSETS . "banner.webp")) {
8+
$all[] = HOST_ASSETS."banner.webp";
9+
}
10+
if (file_exists(PATH_ASSETS . "users.webp")) {
11+
$all[] = HOST_ASSETS."users.webp";
12+
}
13+
foreach (glob(PATH_ASSETS . "*.{js,css,map,woff}", GLOB_BRACE) as $f) {
14+
$all[] = HOST_ASSETS . basename($f);
15+
}
16+
file_put_contents(PATH_BASE . "CB-cache-files.json", json_encode($all));
17+
18+
// (A2) UPDATE DATABASE TIMESTAMP
19+
$this->Core->load("DB");
20+
$this->DB->update("settings", ["setting_value"], "`setting_name`=?", [strtotime("now"), "CACHE_VER"]);
21+
}
22+
}

lib/LIB-Install.php

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -227,16 +227,20 @@ function F () {
227227

228228
// (PHASE G) CLEAN UP
229229
function G () {
230-
// (G1) SWAP OUT INDEX
230+
// (G1) GENERATE LIST OF ASSET FILES FOR CLIENTS TO CACHE
231+
$this->Core->load("CCache");
232+
$this->CCache->init();
233+
234+
// (G2) SWAP OUT INDEX
231235
file_put_contents(PATH_BASE . "index.php", <<<EOF
232236
<?php
233237
require __DIR__ . DIRECTORY_SEPARATOR . "lib" . DIRECTORY_SEPARATOR . "CORE-Go.php";
234238
\$_CORE->load("Route");
235239
\$_CORE->Route->run();
236240
EOF);
237241

238-
// (G2) INSTALL COMPLETE!
242+
// (G3) INSTALL COMPLETE!
239243
if (defined("I_RELOAD")) { $this->Core->redirect(); }
240244
exit("OK");
241245
}
242-
}
246+
}

lib/LIB-Route.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,4 +185,4 @@ function init ($hbase=HOST_BASE_PATH) : void {
185185
throw new Exception("Failed to write $file");
186186
}
187187
}
188-
}
188+
}

lib/LIB-Session.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,4 +89,4 @@ function destroy () {
8989
// (D2) CLEAR ALL SESSION DATA
9090
$_SESSION = [];
9191
}
92-
}
92+
}

lib/SQL-Storage-Boxx-0.sql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ ALTER TABLE `settings`
1212

1313
INSERT INTO `settings` (`setting_name`, `setting_description`, `setting_value`, `setting_group`) VALUES
1414
('APP_VER', 'App version', 1, 0),
15+
('CACHE_VER', 'Client storage cache timestamp', 0, 1),
1516
('EMAIL_FROM', 'System email from', 'sys@site.com', 1),
1617
('PAGE_PER', 'Number of entries per page', 20, 1),
1718
('SUGGEST_LIMIT', 'Autocomplete suggestion limit', 5, 1),

pages/PAGE-settings.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@
99
require PATH_PAGES . "TEMPLATE-top.php"; ?>
1010
<h3 class="mb-3">SYSTEM SETTINGS</h3>
1111
<form id="set-list" onsubmit="return save()">
12-
<?php foreach ($settings as $o) { ?>
12+
<?php foreach ($settings as $o) { if ($o["setting_name"]!="CACHE_VER") { ?>
1313
<div class="form-floating mb-3">
1414
<input type="text" class="form-control" required
1515
name="<?=$o["setting_name"]?>" value="<?=$o["setting_value"]?>">
1616
<label><?=$o["setting_description"]?></label>
1717
</div>
18-
<?php } ?>
18+
<?php }} ?>
1919

2020
<button type="submit" class="my-1 btn btn-primary d-flex-inline">
2121
<i class="ico-sm icon-floppy-disk"></i> Save Settings

pages/TEMPLATE-top.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,12 @@
2525
<!-- https://web.dev/add-manifest/ -->
2626
<link rel="manifest" href="<?=HOST_BASE?>CB-manifest.json">
2727

28-
<!-- (A4) SERVICE WORKER + HOST -->
28+
<!-- (A4) HOST + SERVICE WORKER + CACHE -->
2929
<script>
30-
if ("serviceWorker" in navigator) { navigator.serviceWorker.register("<?=HOST_BASE?>CB-worker.js", {scope: "<?=HOST_BASE_PATH?>"}); }
31-
var cbhost={base:"<?=HOST_BASE?>",basepath:"<?=HOST_BASE_PATH?>",api:"<?=HOST_API_BASE?>",assets:"<?=HOST_ASSETS?>"};
30+
const cbhost={base:"<?=HOST_BASE?>",basepath:"<?=HOST_BASE_PATH?>",api:"<?=HOST_API_BASE?>",assets:"<?=HOST_ASSETS?>"},
31+
cbcache={n:"CBCACHE",s:<?=CACHE_VER?>,c:localStorage.getItem("CBCACHE") || 0};
3232
</script>
33+
<script async src="<?=HOST_ASSETS?>PAGE-cbwork.js"></script>
3334

3435
<!-- (A5) LIBRARIES & SCRIPTS -->
3536
<!-- https://getbootstrap.com/ -->

0 commit comments

Comments
 (0)