aboutsummaryrefslogtreecommitdiff
path: root/src/lib/List
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/List')
-rw-r--r--src/lib/List/Manga/CleanMangaList.svelte21
-rw-r--r--src/lib/List/Manga/MangaListTemplate.svelte30
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}