2023-07-26 22:31:52 -07:00
|
|
|
/*
|
|
|
|
* SPDX-FileCopyrightText: syuilo and other misskey contributors
|
|
|
|
* SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
*/
|
|
|
|
|
2023-09-19 00:37:43 -07:00
|
|
|
import { Theme } from '@/scripts/theme.js';
|
|
|
|
import { miLocalStorage } from '@/local-storage.js';
|
|
|
|
import { api } from '@/os.js';
|
|
|
|
import { $i } from '@/account.js';
|
2021-01-11 05:31:17 -08:00
|
|
|
|
2023-01-06 17:13:02 -08:00
|
|
|
const lsCacheKey = $i ? `themes:${$i.id}` as const : null;
|
2021-01-11 05:31:17 -08:00
|
|
|
|
|
|
|
export function getThemes(): Theme[] {
|
2023-01-06 17:13:02 -08:00
|
|
|
if ($i == null) return [];
|
2023-02-21 22:28:17 -08:00
|
|
|
return JSON.parse(miLocalStorage.getItem(lsCacheKey!) ?? '[]');
|
2021-01-11 05:31:17 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
export async function fetchThemes(): Promise<void> {
|
|
|
|
if ($i == null) return;
|
|
|
|
|
|
|
|
try {
|
|
|
|
const themes = await api('i/registry/get', { scope: ['client'], key: 'themes' });
|
2023-01-06 17:13:02 -08:00
|
|
|
miLocalStorage.setItem(lsCacheKey!, JSON.stringify(themes));
|
2022-05-26 06:53:09 -07:00
|
|
|
} catch (err) {
|
|
|
|
if (err.code === 'NO_SUCH_KEY') return;
|
|
|
|
throw err;
|
2021-01-11 05:31:17 -08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export async function addTheme(theme: Theme): Promise<void> {
|
2023-01-06 17:13:02 -08:00
|
|
|
if ($i == null) return;
|
2021-01-11 05:31:17 -08:00
|
|
|
await fetchThemes();
|
|
|
|
const themes = getThemes().concat(theme);
|
|
|
|
await api('i/registry/set', { scope: ['client'], key: 'themes', value: themes });
|
2023-01-06 17:13:02 -08:00
|
|
|
miLocalStorage.setItem(lsCacheKey!, JSON.stringify(themes));
|
2021-01-11 05:31:17 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
export async function removeTheme(theme: Theme): Promise<void> {
|
2023-01-06 17:13:02 -08:00
|
|
|
if ($i == null) return;
|
2022-05-26 06:53:09 -07:00
|
|
|
const themes = getThemes().filter(t => t.id !== theme.id);
|
2021-01-11 05:31:17 -08:00
|
|
|
await api('i/registry/set', { scope: ['client'], key: 'themes', value: themes });
|
2023-01-06 17:13:02 -08:00
|
|
|
miLocalStorage.setItem(lsCacheKey!, JSON.stringify(themes));
|
2021-01-11 05:31:17 -08:00
|
|
|
}
|