import { browser } from '$app/environment'; import { writable } from 'svelte/store'; interface Settings { // cacheMangaMinutes: number; // cacheMinutes: number; closeAnimeByDefault: boolean; closeMangaByDefault: boolean; displayNotStarted: boolean; displayUnresolved: boolean; roundDownChapters: boolean; sortByDifference: boolean; } const defaultSettings: Settings = { // cacheMangaMinutes: 60, // cacheMinutes: 30, closeAnimeByDefault: false, closeMangaByDefault: false, displayNotStarted: false, displayUnresolved: false, roundDownChapters: true, sortByDifference: false }; const createStore = () => { const { subscribe, set, update } = writable(defaultSettings); return { subscribe, set, update, reset: () => set(defaultSettings), get: () => { const settings = JSON.parse( browser ? localStorage.getItem('settings') ?? JSON.stringify(defaultSettings) : JSON.stringify(defaultSettings) ); const keys = Object.keys(defaultSettings); const settingsKeys = Object.keys(settings); if (keys.length !== settingsKeys.length) { return defaultSettings; } for (const key of keys) { if (!settingsKeys.includes(key)) { return defaultSettings; } } return settings; }, setKey: (key: keyof Settings, value: any) => update((settings) => ({ ...settings, [key]: value })) }; }; const settings = createStore(); settings.subscribe((value) => { if (browser) { localStorage.setItem('settings', JSON.stringify(value)); } }); export default settings;