Merge branch 'feat/pwa-use-site-ico' into 'develop'

Draft: feat: Generate PWA icons from the server logo (Catodon issue 7)

Co-authored-by: Lhcfl <Lhcfl@outlook.com>

See merge request firefish/firefish!10783
This commit is contained in:
Linca 2024-05-08 02:48:47 +00:00
commit de353241c1
1 changed files with 56 additions and 4 deletions

View File

@ -3,19 +3,71 @@ import { fetchMeta } from "backend-rs";
import { config } from "@/config.js";
import manifest from "./manifest.json" assert { type: "json" };
interface Manifest {
short_name: string;
name: string;
description: string;
start_url: string;
scope: string;
display: string;
background_color: string;
theme_color: string;
orientation: string;
icons: {
src: string;
sizes?: string;
type?: string;
purpose?: "any" | "maskable" | "monochrome";
}[];
share_target: {
action: "/share/";
params: {
title: "title";
text: "text";
url: "url";
};
};
screenshots: {
src: string;
sizes: string;
type: string;
platform: string;
label: string;
}[];
shortcuts: {
name: string;
short_name?: string;
url: string;
}[];
categories: string[];
}
export const manifestHandler = async (ctx: Koa.Context) => {
// TODO
//const res = structuredClone(manifest);
const res = JSON.parse(JSON.stringify(manifest));
const res: Manifest = JSON.parse(JSON.stringify(manifest));
const instance = await fetchMeta(false);
res.short_name = instance.name || "Firefish";
res.name = instance.name || "Firefish";
if (instance.themeColor) res.theme_color = instance.themeColor;
for (const icon of res.icons) {
icon.src = `${icon.src}?v=${config.version.replace(/[^0-9]/g, "")}`;
if (instance.iconUrl) {
res.icons = [
{
src: instance.iconUrl,
sizes: "48x48 72x72 96x96 128x128 192x192 256x256",
purpose: "any",
},
];
} else {
for (const icon of res.icons) {
icon.src = `${icon.src}?v=${config.version.replace(/[^0-9]/g, "")}`;
}
}
if (instance.themeColor) res.theme_color = instance.themeColor;
for (const screenshot of res.screenshots) {
screenshot.src = `${screenshot.src}?v=${config.version.replace(
/[^0-9]/g,