diff options
Diffstat (limited to 'src/lib/List/Manga/CleanMangaList.svelte')
| -rw-r--r-- | src/lib/List/Manga/CleanMangaList.svelte | 154 |
1 files changed, 75 insertions, 79 deletions
diff --git a/src/lib/List/Manga/CleanMangaList.svelte b/src/lib/List/Manga/CleanMangaList.svelte index bba0fb08..8964c15e 100644 --- a/src/lib/List/Manga/CleanMangaList.svelte +++ b/src/lib/List/Manga/CleanMangaList.svelte @@ -1,83 +1,79 @@ <script lang="ts"> - import Spacer from '$lib/Layout/Spacer.svelte'; - import type { Media } from '$lib/Data/AniList/media'; - import Error from '$lib/Error/RateLimited.svelte'; - import { volumeCount } from '$lib/Media/Manga/volumes'; - import settings from '$stores/settings'; - import ListTitle from '../ListTitle.svelte'; - import { onMount } from 'svelte'; - import root from '$lib/Utility/root'; - import locale from '$stores/locale'; - import Skeleton from '$lib/Loading/Skeleton.svelte'; - import { browser } from '$app/environment'; - import proxy from '$lib/Utility/proxy'; - import '../covers.css'; - import CleanGrid from '../CleanGrid.svelte'; - import CleanList from '../CleanList.svelte'; - import stateBin from '$stores/stateBin'; - import localforage from 'localforage'; - import MediaRoulette from '../MediaRoulette.svelte'; - - export let media: Media[]; - export let cleanCache: () => void; - export let endTime: number; - export let lastUpdatedMedia: number; - export let updateMedia: ( - id: number, - progress: number | undefined, - media: Media[] - ) => Promise<void>; - export let pendingUpdate: number | null; - export let due: boolean; - export let rateLimited: boolean; - export let authorised: boolean; - export let dummy = false; - export let disableFilter = false; - export let limit: number | undefined = undefined; - - let showRoulette = false; - let serviceStatusResponse: Promise<Response>; - let totalEpisodeDueCount = media - .map((manga) => { - if ($settings.displayTotalEpisodes && !$settings.displayTotalDueEpisodes) return 1; - - if (!due && !$settings.displayTotalEpisodes) return 1; - - return (manga.episodes || 1) - (manga.mediaListEntry?.progress || 0); - }) - .reduce((a, b) => a + b, 0); - const lists = Array.from( - new Set( - media - .flatMap((m) => Object.entries(m.mediaListEntry?.customLists ?? {})) - .filter(([_key, value]) => value) - .map(([key]) => key) - ) - ); - const filterKind = due ? 'due' : 'completed'; - const filterKey = `${filterKind}MangaListFilter`; - - $: selectedList = disableFilter ? 'All' : ($stateBin[filterKey] as string) || 'All'; - - $: filteredMedia = - selectedList === 'All' || !$settings.displayMediaListFilter - ? media - : media.filter((m) => m.mediaListEntry?.customLists?.[selectedList]); - - onMount(async () => { - serviceStatusResponse = fetch(proxy('https://api.mangadex.org/ping')); - - if (browser) - await localforage.setItem( - `last${due ? '' : 'Completed'}MangaListLength`, - media.length.toString() - ); - }); - - const increment = (manga: Media) => { - if (!(pendingUpdate === manga.id || dummy)) - updateMedia(manga.id, manga.mediaListEntry?.progress, media); - }; +import Spacer from '$lib/Layout/Spacer.svelte'; +import type { Media } from '$lib/Data/AniList/media'; +import Error from '$lib/Error/RateLimited.svelte'; +import { volumeCount } from '$lib/Media/Manga/volumes'; +import settings from '$stores/settings'; +import ListTitle from '../ListTitle.svelte'; +import { onMount } from 'svelte'; +import root from '$lib/Utility/root'; +import locale from '$stores/locale'; +import Skeleton from '$lib/Loading/Skeleton.svelte'; +import { browser } from '$app/environment'; +import proxy from '$lib/Utility/proxy'; +import '../covers.css'; +import CleanGrid from '../CleanGrid.svelte'; +import CleanList from '../CleanList.svelte'; +import stateBin from '$stores/stateBin'; +import localforage from 'localforage'; +import MediaRoulette from '../MediaRoulette.svelte'; + +export let media: Media[]; +export let cleanCache: () => void; +export let endTime: number; +export let lastUpdatedMedia: number; +export let updateMedia: (id: number, progress: number | undefined, media: Media[]) => Promise<void>; +export let pendingUpdate: number | null; +export let due: boolean; +export let rateLimited: boolean; +export let authorised: boolean; +export let dummy = false; +export let disableFilter = false; +export let limit: number | undefined = undefined; + +let showRoulette = false; +let serviceStatusResponse: Promise<Response>; +let totalEpisodeDueCount = media + .map((manga) => { + if ($settings.displayTotalEpisodes && !$settings.displayTotalDueEpisodes) return 1; + + if (!due && !$settings.displayTotalEpisodes) return 1; + + return (manga.episodes || 1) - (manga.mediaListEntry?.progress || 0); + }) + .reduce((a, b) => a + b, 0); +const lists = Array.from( + new Set( + media + .flatMap((m) => Object.entries(m.mediaListEntry?.customLists ?? {})) + .filter(([_key, value]) => value) + .map(([key]) => key) + ) +); +const filterKind = due ? 'due' : 'completed'; +const filterKey = `${filterKind}MangaListFilter`; + +$: selectedList = disableFilter ? 'All' : ($stateBin[filterKey] as string) || 'All'; + +$: filteredMedia = + selectedList === 'All' || !$settings.displayMediaListFilter + ? media + : media.filter((m) => m.mediaListEntry?.customLists?.[selectedList]); + +onMount(async () => { + serviceStatusResponse = fetch(proxy('https://api.mangadex.org/ping')); + + if (browser) + await localforage.setItem( + `last${due ? '' : 'Completed'}MangaListLength`, + media.length.toString() + ); +}); + +const increment = (manga: Media) => { + if (!(pendingUpdate === manga.id || dummy)) + updateMedia(manga.id, manga.mediaListEntry?.progress, media); +}; </script> {#if authorised} |