diff options
Diffstat (limited to 'src/lib/List')
| -rw-r--r-- | src/lib/List/Manga/CleanMangaList.svelte | 21 | ||||
| -rw-r--r-- | src/lib/List/Manga/MangaListTemplate.svelte | 30 |
2 files changed, 47 insertions, 4 deletions
diff --git a/src/lib/List/Manga/CleanMangaList.svelte b/src/lib/List/Manga/CleanMangaList.svelte index fb41253c..56de1df1 100644 --- a/src/lib/List/Manga/CleanMangaList.svelte +++ b/src/lib/List/Manga/CleanMangaList.svelte @@ -1,3 +1,18 @@ +<script context="module" lang="ts"> +import proxy from "$lib/Utility/proxy"; + +let mangadexServiceStatusResponse: Promise<Response> | undefined; + +const getMangadexServiceStatus = () => { + if (!mangadexServiceStatusResponse) + mangadexServiceStatusResponse = fetch( + proxy("https://api.mangadex.org/ping"), + ); + + return mangadexServiceStatusResponse; +}; +</script> + <script lang="ts"> import Spacer from "$lib/Layout/Spacer.svelte"; import type { Media } from "$lib/Data/AniList/media"; @@ -10,7 +25,6 @@ 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"; @@ -84,7 +98,7 @@ const updateSelectedList = (event: Event) => { }; onMount(async () => { - serviceStatusResponse = fetch(proxy("https://api.mangadex.org/ping")); + if (rateLimited) serviceStatusResponse = getMangadexServiceStatus(); if (browser) await localforage.setItem( @@ -93,6 +107,9 @@ onMount(async () => { ); }); +$: if (rateLimited && !serviceStatusResponse) + serviceStatusResponse = getMangadexServiceStatus(); + const increment = (manga: Media) => { if (!(pendingUpdate === manga.id || dummy)) updateMedia(manga.id, manga.mediaListEntry?.progress, media); diff --git a/src/lib/List/Manga/MangaListTemplate.svelte b/src/lib/List/Manga/MangaListTemplate.svelte index 2ead1303..5760236a 100644 --- a/src/lib/List/Manga/MangaListTemplate.svelte +++ b/src/lib/List/Manga/MangaListTemplate.svelte @@ -3,8 +3,8 @@ import localforage from "localforage"; import { onDestroy, onMount } from "svelte"; import { browser } from "$app/environment"; import { env } from "$env/dynamic/public"; -import type { AniListAuthorisation } from "$lib/Data/AniList/identity"; import { hydrateMediaListCache } from "$lib/Data/AniList/cacheHydration"; +import type { AniListAuthorisation } from "$lib/Data/AniList/identity"; import { type Media, mediaListCollection, Type } from "$lib/Data/AniList/media"; import { database } from "$lib/Database/IDB/chapters"; import RateLimitedError from "$lib/Error/RateLimited.svelte"; @@ -48,6 +48,8 @@ let forceFlag = false; let lastListSize = 5; let keyCacher: ReturnType<typeof setInterval> | undefined; let keyCacheMinutes = -1; +let nativeEnhancementVersion = 0; +let nativeEnhancementKey = ""; $: authorised = env.PUBLIC_ALWAYS_REFRESH_MANGA === "true" || privilegedUser($identity.id); @@ -147,6 +149,7 @@ const cleanMedia = async ( manga: Media[], displayUnresolved: boolean, force: boolean, + nativeVersion: number, ) => { progress = 0; rateLimited = false; @@ -204,12 +207,35 @@ const cleanMedia = async ( ); let finalMedia = releasingMedia; const chapterCounts: (number | null)[] = []; + void nativeVersion; if (due && finalMedia.length > 0) { + const progressiveNative = + $settings.calculatePreferNativeChapterCount === true; + let startDeferredNative = false; + + if (progressiveNative) { + const enhancementKey = finalMedia + .map((media) => `${media.id}:${media.mediaListEntry?.progress || 0}`) + .join("|"); + + if (nativeEnhancementKey !== enhancementKey) { + nativeEnhancementKey = enhancementKey; + startDeferredNative = true; + } + } + const hydration = await hydrateChapterCounts( $identity, finalMedia, $settings.calculateGuessingDisabled, + { + deferNative: progressiveNative, + startDeferredNative, + onNativeChunkResolved: () => { + nativeEnhancementVersion += 1; + }, + }, ); rateLimited = hydration.rateLimited; @@ -368,7 +394,7 @@ const cleanCache = () => { <Skeleton card={false} count={lastListSize} height="0.9rem" list /> {/if} {:then media} - {#await cleanMedia(media, displayUnresolved, forceFlag)} + {#await cleanMedia(media, displayUnresolved, forceFlag, nativeEnhancementVersion)} {#if previousMangaList} <CleanMangaList media={previousMangaList} |