From 0857b21a413eb2d6679e301abc9f2344cdfca3df Mon Sep 17 00:00:00 2001 From: Fuwn Date: Tue, 30 Jan 2024 21:36:08 -0800 Subject: feat(list): use last size as skeleton size --- src/lib/List/Anime/AnimeListTemplate.svelte | 18 ++++++++++++++++-- src/lib/List/Anime/CleanAnimeList.svelte | 13 ++++++++++++- src/lib/List/Anime/PlaceholderList.svelte | 3 ++- src/lib/List/Manga/CleanMangaList.svelte | 8 +++++++- src/lib/List/Manga/MangaListTemplate.svelte | 12 ++++++++++-- 5 files changed, 47 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/lib/List/Anime/AnimeListTemplate.svelte b/src/lib/List/Anime/AnimeListTemplate.svelte index c0314727..8b52e324 100644 --- a/src/lib/List/Anime/AnimeListTemplate.svelte +++ b/src/lib/List/Anime/AnimeListTemplate.svelte @@ -10,6 +10,8 @@ import type { SubsPlease } from '$lib/Media/Anime/Airing/Subtitled/subsPlease'; import root from '$lib/Utility/root'; import PlaceholderList from './PlaceholderList.svelte'; + import { browser } from '$app/environment'; + import { onMount } from 'svelte'; export let endTime: number; export let cleanMedia: ( @@ -30,10 +32,22 @@ let lastUpdatedMedia = -1; let previousAnimeList: Media[]; let pendingUpdate: number | null = null; + let lastListSize = 8; + + onMount(() => { + if (browser) { + const lastStoredList = localStorage.getItem( + `last${ + notYetReleased ? 'NotYetReleased' : upcoming ? 'Upcoming' : completed ? 'Completed' : '' + }AnimeListLength` + ); + if (lastStoredList) lastListSize = parseInt(lastStoredList); + } + }); {#await fetch(root(`/api/subsplease?tz=${Intl.DateTimeFormat().resolvedOptions().timeZone}`)).then( (r) => r.json() )} - + {:then subsPlease} {#await animeLists} {#if previousAnimeList} @@ -52,7 +66,7 @@ bind:pendingUpdate /> {:else} - + {/if} {:then media} { + if (browser) + localStorage.setItem( + `last${ + notYetReleased ? 'NotYetReleased' : upcoming ? 'Upcoming' : completed ? 'Completed' : '' + }AnimeListLength`, + media.length.toString() + ); + }); + onDestroy(() => clearInterval(keyCacher)); diff --git a/src/lib/List/Anime/PlaceholderList.svelte b/src/lib/List/Anime/PlaceholderList.svelte index 3567ce62..7d25ed7c 100644 --- a/src/lib/List/Anime/PlaceholderList.svelte +++ b/src/lib/List/Anime/PlaceholderList.svelte @@ -5,13 +5,14 @@ import type { Title } from '../mediaTitle'; export let title: Title; + export let count = 8; void; @@ -36,7 +37,12 @@ let hoverCoverState: HoverCoverResponse = {}; let serviceStatusResponse: Promise; - onMount(() => (serviceStatusResponse = fetch(proxy('https://mangadex.org')))); + onMount(() => { + serviceStatusResponse = fetch(proxy('https://mangadex.org')); + + if (browser) + localStorage.setItem(`last${due ? '' : 'Completed'}MangaListLength`, media.length.toString()); + }); {#if authorised} diff --git a/src/lib/List/Manga/MangaListTemplate.svelte b/src/lib/List/Manga/MangaListTemplate.svelte index e91c809d..f9cd6124 100644 --- a/src/lib/List/Manga/MangaListTemplate.svelte +++ b/src/lib/List/Manga/MangaListTemplate.svelte @@ -17,6 +17,7 @@ import { options } from '$lib/Notification/options'; import Skeleton from '$lib/Skeleton.svelte'; import locale from '$stores/locale'; + import { browser } from '$app/environment'; export let user: AniListAuthorisation; export let identity: UserIdentity; @@ -34,6 +35,7 @@ let progress = 0; let rateLimited = false; let forceFlag = false; + let lastListSize = 5; const keyCacher = setInterval(() => { startTime = performance.now(); @@ -44,6 +46,12 @@ }, $settings.cacheMinutes * 1000 * 60); onMount(async () => { + if (browser) { + const lastStoredList = localStorage.getItem(`last${due ? '' : 'Completed'}MangaListLength`); + + if (lastStoredList) lastListSize = parseInt(lastStoredList); + } + startTime = performance.now(); mangaLists = mediaListCollection(user, identity, Type.Manga, $manga, $lastPruneTimes.manga, { addNotification @@ -229,7 +237,7 @@ {/if} - + {/if} {:then media} {#await cleanMedia(media, displayUnresolved, forceFlag)} @@ -262,7 +270,7 @@ {/if} - + {/if} {:then cleanedMedia} {#if !authorised} -- cgit v1.2.3