From 00a37d80baff59b57fec2bd475ab7de531580199 Mon Sep 17 00:00:00 2001 From: Fuwn Date: Sun, 3 Sep 2023 17:58:56 -0700 Subject: feat(stores): settings store for all settings --- src/lib/List/Due/AnimeList.svelte | 7 ++-- src/lib/List/Due/MangaList.svelte | 7 ++-- src/routes/+page.svelte | 20 ++++-------- src/routes/settings/+page.svelte | 66 ++++++++++++++++--------------------- src/stores/closeAnimeByDefault.ts | 14 -------- src/stores/closeMangaByDefault.ts | 14 -------- src/stores/displayNotStarted.ts | 14 -------- src/stores/displayUnresolved.ts | 14 -------- src/stores/roundDownChapters.ts | 14 -------- src/stores/settings.ts | 68 +++++++++++++++++++++++++++++++++++++++ src/stores/sortByDifference.ts | 14 -------- 11 files changed, 108 insertions(+), 144 deletions(-) delete mode 100644 src/stores/closeAnimeByDefault.ts delete mode 100644 src/stores/closeMangaByDefault.ts delete mode 100644 src/stores/displayNotStarted.ts delete mode 100644 src/stores/displayUnresolved.ts delete mode 100644 src/stores/roundDownChapters.ts create mode 100644 src/stores/settings.ts delete mode 100644 src/stores/sortByDifference.ts (limited to 'src') diff --git a/src/lib/List/Due/AnimeList.svelte b/src/lib/List/Due/AnimeList.svelte index 9f38090b..0cfd5994 100644 --- a/src/lib/List/Due/AnimeList.svelte +++ b/src/lib/List/Due/AnimeList.svelte @@ -6,9 +6,8 @@ import { onDestroy, onMount } from 'svelte'; import anime from '../../../stores/anime'; import animeLastPrune from '../../../stores/mangaLastPrune'; - import sortByDifference from '../../../stores/sortByDifference'; - import displayNotStarted from '../../../stores/displayNotStarted'; import cacheMinutes from '../../../stores/cacheMinutes'; + import settings from '../../../stores/settings'; export let user: AniListAuthorisation; export let identity: UserIdentity; @@ -43,7 +42,7 @@ (media: Media) => media.status == 'RELEASING' && (media.mediaListEntry || { progress: 0 }).progress >= - ($displayNotStarted === 'true' ? 0 : 1) + ($settings.displayNotStarted === true ? 0 : 1) ); const outdatedMedia = releasingMedia.filter((media: Media) => { return ( @@ -64,7 +63,7 @@ } finalMedia.sort((a: Media, b: Media) => { - if ($sortByDifference === 'true') { + if ($settings.sortByDifference === true) { const difference = (anime: Media) => { return ( (anime.nextAiringEpisode?.episode === -1 diff --git a/src/lib/List/Due/MangaList.svelte b/src/lib/List/Due/MangaList.svelte index a7f8d208..43976e0d 100644 --- a/src/lib/List/Due/MangaList.svelte +++ b/src/lib/List/Due/MangaList.svelte @@ -7,10 +7,9 @@ import manga from '../../../stores/manga'; import { chapterDatabase } from '$lib/chapterDatabase'; import cacheMangaMinutes from '../../../stores/cacheMangaMinutes'; - import roundDownChapters from '../../../stores/roundDownChapters'; import mangaLastPrune from '../../../stores/mangaLastPrune'; - import displayNotStarted from '../../../stores/displayNotStarted'; import cacheMinutes from '../../../stores/cacheMinutes'; + import settings from '../../../stores/settings'; export let user: AniListAuthorisation; export let identity: UserIdentity; @@ -64,7 +63,7 @@ media.status == 'RELEASING' && media.format != 'NOVEL' && (media.mediaListEntry || { progress: 0 }).progress >= - ($displayNotStarted === 'true' ? 0 : 1) + ($settings.displayNotStarted === true ? 0 : 1) ); let finalMedia = releasingMedia; @@ -95,7 +94,7 @@ (item.episodes === -1337 && displayUnresolved ? true : (item.mediaListEntry?.progress || 0) < - ($roundDownChapters === 'true' ? Math.floor(item.episodes) : item.episodes)) + ($settings.roundDownChapters === true ? Math.floor(item.episodes) : item.episodes)) ); }); diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index cfcf016a..1e49411e 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -3,18 +3,12 @@ import { userIdentity as getUserIdentity } from '$lib/AniList/identity'; import AnimeList from '$lib/List/Due/AnimeList.svelte'; import MangaList from '$lib/List/Due/MangaList.svelte'; - import displayUnresolved from '../stores/displayUnresolved'; - import closeAnimeByDefault from '../stores/closeAnimeByDefault'; - import closeMangaByDefault from '../stores/closeMangaByDefault'; import UpcomingAnimeList from '$lib/List/UpcomingAnimeList.svelte'; import userIdentity from '../stores/userIdentity'; + import settings from '../stores/settings'; export let data; - $: displayingUnresolved = $displayUnresolved === 'true'; - $: mangaClosed = $closeMangaByDefault === 'false'; - $: animeClosed = $closeAnimeByDefault === 'false'; - let currentUserIdentity = { name: '', id: -1 }; onMount(async () => { @@ -39,12 +33,12 @@ {:else}

-

+
{#if currentUserIdentity.id != -1} {:else} Upcoming Episodes [...] ...s @@ -54,12 +48,12 @@

-

+
{#if currentUserIdentity.id != -1} {:else} Anime [...] ...s @@ -69,12 +63,12 @@

-

+
{#if currentUserIdentity.id != -1} {:else} Manga [...] ...s diff --git a/src/routes/settings/+page.svelte b/src/routes/settings/+page.svelte index f1ea627f..c2af5e5e 100644 --- a/src/routes/settings/+page.svelte +++ b/src/routes/settings/+page.svelte @@ -1,17 +1,12 @@ Home @@ -53,10 +39,10 @@ - $displayUnresolved === 'true' - ? displayUnresolved.set('false') - : displayUnresolved.set('true')} - >{$displayUnresolved === 'true' ? 'Hide' : 'Show'} unresolved{$settings.displayUnresolved === true ? 'Hide' : 'Show'} unresolved
Displays unresolved chapter counts as "?" @@ -66,10 +52,10 @@ - $displayNotStarted === 'true' - ? displayNotStarted.set('false') - : displayNotStarted.set('true')} - >{$displayNotStarted === 'true' ? 'Hide' : 'Show'} media with zero progress{$settings.displayNotStarted === true ? 'Hide' : 'Show'} media with zero progress
- $closeAnimeByDefault === 'true' - ? closeAnimeByDefault.set('false') - : closeAnimeByDefault.set('true')} - >{$closeAnimeByDefault === 'true' ? 'Expand' : 'Close'} anime panel by default{$settings.closeAnimeByDefault === true ? 'Expand' : 'Close'} anime panel by default
@@ -93,10 +79,10 @@ - $closeMangaByDefault === 'true' - ? closeMangaByDefault.set('false') - : closeMangaByDefault.set('true')} - >{$closeMangaByDefault === 'true' ? 'Expand' : 'Close'} manga panel by default{$settings.closeMangaByDefault === true ? 'Expand' : 'Close'} manga panel by default
@@ -104,8 +90,10 @@ - $sortByDifference === 'true' ? sortByDifference.set('false') : sortByDifference.set('true')} - >Sort anime by {@html $sortByDifference === 'false' + $settings.sortByDifference === true + ? settings.setKey('sortByDifference', false) + : settings.setKey('sortByDifference', true)} + >Sort anime by {@html $settings.sortByDifference === false ? 'difference between last watched and next episode' : 'days left until next episode'} @@ -115,14 +103,14 @@ - $roundDownChapters === 'true' - ? roundDownChapters.set('false') - : roundDownChapters.set('true')} - >{$roundDownChapters === 'false' ? 'Round down' : 'Maintain'} chapters{$settings.roundDownChapters === false ? 'Round down' : 'Maintain'} chapters
50/50.6 would {@html $roundDownChapters === 'true' ? 'not' : ''} be due50/50.6 would {@html $settings.roundDownChapters === true ? 'not' : ''} be due

Cache

@@ -151,7 +139,7 @@

Reset

- Reset ALL settings + Reset ALL settings

diff --git a/src/stores/closeAnimeByDefault.ts b/src/stores/closeAnimeByDefault.ts deleted file mode 100644 index 481fabfd..00000000 --- a/src/stores/closeAnimeByDefault.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { browser } from '$app/environment'; -import { writable } from 'svelte/store'; - -const closeAnimeByDefault = writable( - browser ? localStorage.getItem('closeAnimeByDefault') ?? 'false' : 'false' -); - -closeAnimeByDefault.subscribe((value) => { - if (browser) { - localStorage.setItem('closeAnimeByDefault', value); - } -}); - -export default closeAnimeByDefault; diff --git a/src/stores/closeMangaByDefault.ts b/src/stores/closeMangaByDefault.ts deleted file mode 100644 index b0b27537..00000000 --- a/src/stores/closeMangaByDefault.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { browser } from '$app/environment'; -import { writable } from 'svelte/store'; - -const closeMangaByDefault = writable( - browser ? localStorage.getItem('closeMangaByDefault') ?? 'false' : 'false' -); - -closeMangaByDefault.subscribe((value) => { - if (browser) { - localStorage.setItem('closeMangaByDefault', value); - } -}); - -export default closeMangaByDefault; diff --git a/src/stores/displayNotStarted.ts b/src/stores/displayNotStarted.ts deleted file mode 100644 index f8c1c42a..00000000 --- a/src/stores/displayNotStarted.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { browser } from '$app/environment'; -import { writable } from 'svelte/store'; - -const displayNotStarted = writable( - browser ? localStorage.getItem('displayNotStarted') ?? 'false' : 'false' -); - -displayNotStarted.subscribe((value) => { - if (browser) { - localStorage.setItem('displayNotStarted', value); - } -}); - -export default displayNotStarted; diff --git a/src/stores/displayUnresolved.ts b/src/stores/displayUnresolved.ts deleted file mode 100644 index 9b67925f..00000000 --- a/src/stores/displayUnresolved.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { browser } from '$app/environment'; -import { writable } from 'svelte/store'; - -const displayUnresolved = writable( - browser ? localStorage.getItem('displayUnresolved') ?? 'false' : 'false' -); - -displayUnresolved.subscribe((value) => { - if (browser) { - localStorage.setItem('displayUnresolved', value); - } -}); - -export default displayUnresolved; diff --git a/src/stores/roundDownChapters.ts b/src/stores/roundDownChapters.ts deleted file mode 100644 index 8cbdbdc1..00000000 --- a/src/stores/roundDownChapters.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { browser } from '$app/environment'; -import { writable } from 'svelte/store'; - -const roundDownChapters = writable( - browser ? localStorage.getItem('roundDownChapters') ?? 'true' : 'true' -); - -roundDownChapters.subscribe((value) => { - if (browser) { - localStorage.setItem('roundDownChapters', value); - } -}); - -export default roundDownChapters; 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(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; diff --git a/src/stores/sortByDifference.ts b/src/stores/sortByDifference.ts deleted file mode 100644 index 1a26371e..00000000 --- a/src/stores/sortByDifference.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { browser } from '$app/environment'; -import { writable } from 'svelte/store'; - -const sortByDifference = writable( - browser ? localStorage.getItem('sortByDifference') ?? 'true' : 'true' -); - -sortByDifference.subscribe((value) => { - if (browser) { - localStorage.setItem('sortByDifference', value); - } -}); - -export default sortByDifference; -- cgit v1.2.3