mirror of
https://github.com/Donkie/Spoolman.git
synced 2026-10-21 17:42:16 -05:00
The legacy client got its manifest and icons from vite-plugin-pwa. client_v2 has no such plugin, and nothing replaced them: static/ held only favicon.svg, spoolman.svg and the Ko-fi logo. So the upgrade silently un-installs the app for everyone who had added Spoolman to a home screen -- no manifest means no standalone display mode, no home-screen icon, and no install prompt ever offered again. The manifest and icons are plain files in static/ rather than plugin output. The icons are the v1 set, unchanged, so an already-installed app keeps the icon it had; name, colors and display mode are v1's too, and start_url resolves to the same URL at a root deploy, which keeps the app identity stable across the upgrade instead of orphaning the old install. Every URL inside the manifest is relative to the manifest itself, so the one file is correct under any SPOOLMAN_BASE_PATH with no rebuild. Only the document's link to it needs help: the prerendered pages emit "./manifest.webmanifest" and resolve fine, but the SPA fallback (200.html, which serves deep routes like the /spool/show/<id> a printed QR points at) carries absolute paths, so the existing base-path fixup gains two patterns for the manifest and the touch icon. Also register the .webmanifest media type. StaticFiles takes Content-Type from the stdlib mimetypes registry, whose built-in table only learned this extension in recent Pythons and otherwise falls back to the host's /etc/mime.types -- absent in slim images. We support 3.10+, so leaving it to the environment means some installs serve the manifest as text/plain. Claude-Session: https://claude.ai/code/session_01UB5KocsTBm9GL5x3Uuup5F