aboutsummaryrefslogtreecommitdiff
path: root/src/stores/settings.ts
diff options
context:
space:
mode:
authorFuwn <[email protected]>2023-09-03 17:58:56 -0700
committerFuwn <[email protected]>2023-09-03 17:58:56 -0700
commit00a37d80baff59b57fec2bd475ab7de531580199 (patch)
tree4c487e8d02859924c1e0abbf45fcf979c0f45489 /src/stores/settings.ts
parentfix(manga): manga collection refresh (diff)
downloaddue.moe-00a37d80baff59b57fec2bd475ab7de531580199.tar.xz
due.moe-00a37d80baff59b57fec2bd475ab7de531580199.zip
feat(stores): settings store for all settings
Diffstat (limited to 'src/stores/settings.ts')
-rw-r--r--src/stores/settings.ts68
1 files changed, 68 insertions, 0 deletions
diff --git a/src/stores/settings.ts b/src/stores/settings.ts
new file mode 100644
index 00000000..30f1c34d
--- /dev/null
+++ b/src/stores/settings.ts
@@ -0,0 +1,68 @@
+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<Settings>(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;