2024-03-16 16:49:12 +01:00
|
|
|
import { isSignedIn, me } from "@/me";
|
2023-10-22 10:33:40 +02:00
|
|
|
import { api } from "@/os";
|
2024-03-28 17:26:52 +01:00
|
|
|
import type { Theme } from "./scripts/theme";
|
2021-01-11 14:31:17 +01:00
|
|
|
|
2024-03-07 03:06:45 +01:00
|
|
|
const lsCacheKey = isSignedIn ? `themes:${me.id}` : "";
|
2021-01-11 14:31:17 +01:00
|
|
|
|
|
|
|
export function getThemes(): Theme[] {
|
2023-01-13 05:40:33 +01:00
|
|
|
return JSON.parse(localStorage.getItem(lsCacheKey) || "[]");
|
2021-01-11 14:31:17 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
export async function fetchThemes(): Promise<void> {
|
2024-01-11 02:21:21 +01:00
|
|
|
if (!isSignedIn) return;
|
2021-01-11 14:31:17 +01:00
|
|
|
|
|
|
|
try {
|
2023-01-13 05:40:33 +01:00
|
|
|
const themes = await api("i/registry/get", {
|
|
|
|
scope: ["client"],
|
|
|
|
key: "themes",
|
|
|
|
});
|
2021-01-11 14:31:17 +01:00
|
|
|
localStorage.setItem(lsCacheKey, JSON.stringify(themes));
|
2022-05-26 15:53:09 +02:00
|
|
|
} catch (err) {
|
2023-01-13 05:40:33 +01:00
|
|
|
if (err.code === "NO_SUCH_KEY") return;
|
2022-05-26 15:53:09 +02:00
|
|
|
throw err;
|
2021-01-11 14:31:17 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export async function addTheme(theme: Theme): Promise<void> {
|
|
|
|
await fetchThemes();
|
|
|
|
const themes = getThemes().concat(theme);
|
2023-01-13 05:40:33 +01:00
|
|
|
await api("i/registry/set", {
|
|
|
|
scope: ["client"],
|
|
|
|
key: "themes",
|
|
|
|
value: themes,
|
|
|
|
});
|
2021-01-11 14:31:17 +01:00
|
|
|
localStorage.setItem(lsCacheKey, JSON.stringify(themes));
|
|
|
|
}
|
|
|
|
|
|
|
|
export async function removeTheme(theme: Theme): Promise<void> {
|
2023-01-13 05:40:33 +01:00
|
|
|
const themes = getThemes().filter((t) => t.id !== theme.id);
|
|
|
|
await api("i/registry/set", {
|
|
|
|
scope: ["client"],
|
|
|
|
key: "themes",
|
|
|
|
value: themes,
|
|
|
|
});
|
2021-01-11 14:31:17 +01:00
|
|
|
localStorage.setItem(lsCacheKey, JSON.stringify(themes));
|
|
|
|
}
|