mirror of
https://iceshrimp.dev/limepotato/jormungandr-bite.git
synced 2024-11-15 22:47:29 -07:00
36 lines
1.1 KiB
TypeScript
36 lines
1.1 KiB
TypeScript
|
import { api } from '@/os';
|
||
|
import { $i } from '@/account';
|
||
|
import { ColdDeviceStorage } from './store';
|
||
|
import { Theme } from './scripts/theme';
|
||
|
|
||
|
const lsCacheKey = $i ? `themes:${$i.id}` : '';
|
||
|
|
||
|
export function getThemes(): Theme[] {
|
||
|
return JSON.parse(localStorage.getItem(lsCacheKey) || '[]');
|
||
|
}
|
||
|
|
||
|
export async function fetchThemes(): Promise<void> {
|
||
|
if ($i == null) return;
|
||
|
|
||
|
try {
|
||
|
const themes = await api('i/registry/get', { scope: ['client'], key: 'themes' });
|
||
|
localStorage.setItem(lsCacheKey, JSON.stringify(themes));
|
||
|
} catch (e) {
|
||
|
if (e.code === 'NO_SUCH_KEY') return;
|
||
|
throw e;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export async function addTheme(theme: Theme): Promise<void> {
|
||
|
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<void> {
|
||
|
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));
|
||
|
}
|