This commit is contained in:
Renan LE CARO 2025-03-14 20:12:02 +01:00
parent cdfe6a4978
commit 934670b2a7
11 changed files with 84 additions and 3 deletions

View file

@ -33,6 +33,11 @@ sed -i -e "s/^[[:space:]]*versionCode = .*/ versionCode = $versionCode/"
echo "\"$versionCode\"" > src/version.json echo "\"$versionCode\"" > src/version.json
# Update service worker
sed -i -e "s/VERSION = .*/ VERSION = '$versionCode'/" ./public/sw-b71.js
# remove all exif metadata from pictures, because i think fdroid doesn't like that. odd # remove all exif metadata from pictures, because i think fdroid doesn't like that. odd
find -name '*.jp*g' -o -name '*.png' | xargs exiftool -all= find -name '*.jp*g' -o -name '*.png' | xargs exiftool -all=

15
package-lock.json generated
View file

@ -9,6 +9,7 @@
"version": "1.0.0", "version": "1.0.0",
"license": "GNU AGPLv3", "license": "GNU AGPLv3",
"dependencies": { "dependencies": {
"@parcel/service-worker": "^2.13.3",
"@parcel/transformer-less": "^2.13.3", "@parcel/transformer-less": "^2.13.3",
"@types/react": "^19.0.10", "@types/react": "^19.0.10",
"@types/react-dom": "^19.0.4", "@types/react-dom": "^19.0.4",
@ -1922,6 +1923,20 @@
"url": "https://opencollective.com/parcel" "url": "https://opencollective.com/parcel"
} }
}, },
"node_modules/@parcel/service-worker": {
"version": "2.13.3",
"resolved": "https://registry.npmjs.org/@parcel/service-worker/-/service-worker-2.13.3.tgz",
"integrity": "sha512-b/wbbQPusfPsXvHx4mgI/hSQYIk6B5pkEL2ubNrtedjdzLPvjveZ161MxuF3XLvpDWINl7y8qPbmFZrf+pa8lg==",
"license": "MIT",
"engines": {
"node": ">= 16.0.0",
"parcel": "^2.13.3"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/source-map": { "node_modules/@parcel/source-map": {
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/@parcel/source-map/-/source-map-2.1.1.tgz", "resolved": "https://registry.npmjs.org/@parcel/source-map/-/source-map-2.1.1.tgz",

View file

@ -13,6 +13,7 @@
"author": "Renan LE CARO", "author": "Renan LE CARO",
"license": "GNU AGPLv3", "license": "GNU AGPLv3",
"dependencies": { "dependencies": {
"@parcel/service-worker": "^2.13.3",
"@parcel/transformer-less": "^2.13.3", "@parcel/transformer-less": "^2.13.3",
"@types/react": "^19.0.10", "@types/react": "^19.0.10",
"@types/react-dom": "^19.0.4", "@types/react-dom": "^19.0.4",

BIN
public/icon-128.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 749 B

View file

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Before After
Before After

BIN
public/icon-64.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 479 B

View file

@ -3,12 +3,22 @@
"name": "Breakout 71", "name": "Breakout 71",
"icons": [ "icons": [
{ {
"src": "/icon.png", "src": "/icon-512.png",
"sizes": "512x512", "sizes": "512x512",
"type": "image/png" "type": "image/png"
},
{
"src": "/icon-128.png",
"sizes": "128x128",
"type": "image/png"
},
{
"src": "/icon-64.png",
"sizes": "64x64",
"type": "image/png"
} }
], ],
"start_url": ".", "start_url": "/index.html?isPWA=true",
"display": "fullscreen", "display": "fullscreen",
"theme_color": "#5DA3EA", "theme_color": "#5DA3EA",
"background_color": "#ffffff" "background_color": "#ffffff"

44
public/sw-b71.js Normal file
View file

@ -0,0 +1,44 @@
// The version of the cache.
const VERSION = '29032991'
// The name of the cache
const CACHE_NAME = `breakout-71-${VERSION}`;
// The static resources that the app needs to function.
const APP_STATIC_RESOURCES = [
"/"
];
// On install, cache the static resources
self.addEventListener("install", (event) => {
event.waitUntil(
(async () => {
const cache = await caches.open(CACHE_NAME);
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();
})(),
);
});
self.addEventListener("fetch", (event) => {
if (event.request.mode === "navigate" && event.request.url.endsWith('/index.html?isPWA=true')) {
event.respondWith(caches.match("/"));
return;
}
});

View file

@ -17,6 +17,7 @@ import {putBallsAtPuck, resetBalls} from "./resetBalls";
import {makeEmptyPerksMap, sumOfKeys} from "./game_utils"; import {makeEmptyPerksMap, sumOfKeys} from "./game_utils";
import {baseCombo, decreaseCombo, resetCombo} from "./combo"; import {baseCombo, decreaseCombo, resetCombo} from "./combo";
import './sw_loader'
const gameCanvas = document.getElementById("game") as HTMLCanvasElement; const gameCanvas = document.getElementById("game") as HTMLCanvasElement;
const ctx = gameCanvas.getContext("2d", { const ctx = gameCanvas.getContext("2d", {
@ -2382,6 +2383,7 @@ async function openSettingsPanel() {
}); });
} }
} }
actions.push({ actions.push({
text: "Sandbox mode", text: "Sandbox mode",
help: help:

View file

@ -46,7 +46,7 @@ export const options = {
disabled() { disabled() {
return window.location.search.includes("isInWebView=true"); return window.location.search.includes("isInWebView=true");
}, },
}, }
} as const satisfies { [k: string]: OptionDef }; } as const satisfies { [k: string]: OptionDef };
export type OptionDef = { export type OptionDef = {

4
src/sw_loader.ts Normal file
View file

@ -0,0 +1,4 @@
if ("serviceWorker" in navigator &&
window.location.search.includes("isPWA=true")) {
navigator.serviceWorker.register("sw-b71.js");
}