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