import type { Theme } from "./scripts/theme"; import { isSignedIn, me } from "@/me"; import { api } from "@/os"; const lsCacheKey = isSignedIn(me) ? `themes:${me.id}` : ""; export function getThemes(): Theme[] { return JSON.parse(localStorage.getItem(lsCacheKey) || "[]"); } export async function fetchThemes(): Promise { if (!isSignedIn(me)) return; try { const themes = await api("i/registry/get", { scope: ["client"], key: "themes", }); localStorage.setItem(lsCacheKey, JSON.stringify(themes)); // biome-ignore lint/suspicious/noExplicitAny: Safely any } catch (err: any) { if (err.code === "NO_SUCH_KEY") return; throw err; } } export async function addTheme(theme: Theme): Promise { await fetchThemes(); const themes = getThemes().concat(theme); await api("i/registry/set", { scope: ["client"], key: "themes", value: themes, }); localStorage.setItem(lsCacheKey, JSON.stringify(themes)); } export async function removeTheme(theme: Theme): Promise { const themes = getThemes().filter((t) => t.id !== theme.id); await api("i/registry/set", { scope: ["client"], key: "themes", value: themes, }); localStorage.setItem(lsCacheKey, JSON.stringify(themes)); }