aboutsummaryrefslogtreecommitdiff
path: root/src/lib/List
diff options
context:
space:
mode:
authorFuwn <[email protected]>2026-04-14 18:19:54 -0700
committerGitHub <[email protected]>2026-04-14 18:19:54 -0700
commitf3ac4e6051d5b18c26d5a876ce12ddd1fd0f7107 (patch)
tree8f54fc3fa12c70b21bf4bf421608c9b9400064da /src/lib/List
parentfix(ui): balance homepage media panels (diff)
parentfeat(cache): instant list revalidation from command palette and debug menu (diff)
downloaddue.moe-f3ac4e6051d5b18c26d5a876ce12ddd1fd0f7107.tar.xz
due.moe-f3ac4e6051d5b18c26d5a876ce12ddd1fd0f7107.zip
Merge pull request #3 from Fuwn/feat/instant-cache-invalidation
feat(cache): instant list revalidation from command palette and debug menu
Diffstat (limited to 'src/lib/List')
-rw-r--r--src/lib/List/Anime/CleanAnimeList.svelte2
-rw-r--r--src/lib/List/Anime/DueAnimeList.svelte22
-rw-r--r--src/lib/List/Anime/UpcomingAnimeList.svelte36
-rw-r--r--src/lib/List/Manga/MangaListTemplate.svelte22
4 files changed, 65 insertions, 17 deletions
diff --git a/src/lib/List/Anime/CleanAnimeList.svelte b/src/lib/List/Anime/CleanAnimeList.svelte
index 808a8e5b..35a12314 100644
--- a/src/lib/List/Anime/CleanAnimeList.svelte
+++ b/src/lib/List/Anime/CleanAnimeList.svelte
@@ -193,7 +193,7 @@ onDestroy(() => clearAiringRefreshTimeout());
const increment = (anime: Media, progress: number) => {
if (!dummy && pendingUpdate !== anime.id) {
- $revalidateAnime = true;
+ $revalidateAnime = $revalidateAnime + 1;
lastUpdatedMedia = anime.id;
pendingUpdate = anime.id;
diff --git a/src/lib/List/Anime/DueAnimeList.svelte b/src/lib/List/Anime/DueAnimeList.svelte
index 2c707ffb..d2c47ebe 100644
--- a/src/lib/List/Anime/DueAnimeList.svelte
+++ b/src/lib/List/Anime/DueAnimeList.svelte
@@ -16,6 +16,7 @@ import {
import { addNotification } from "$lib/Notification/store";
import locale from "$stores/locale";
import identity from "$stores/identity";
+import revalidateAnime from "$stores/revalidateAnime";
export let user: AniListAuthorisation;
let animeLists: Promise<Media[]>;
@@ -68,6 +69,27 @@ onMount(async () => {
$: if (keyCacher && keyCacheMinutes !== $settings.cacheMinutes)
restartKeyCacher($settings.cacheMinutes);
+let lastAnimeRevalidation = 0;
+
+$: if ($revalidateAnime > lastAnimeRevalidation) {
+ lastAnimeRevalidation = $revalidateAnime;
+
+ startTime = performance.now();
+ endTime = -1;
+
+ animeLists = mediaListCollection(
+ user,
+ $identity,
+ Type.Anime,
+ $anime,
+ $lastPruneTimes.anime,
+ {
+ forcePrune: true,
+ addNotification,
+ },
+ );
+}
+
onDestroy(() => {
if (keyCacher) clearInterval(keyCacher);
});
diff --git a/src/lib/List/Anime/UpcomingAnimeList.svelte b/src/lib/List/Anime/UpcomingAnimeList.svelte
index d9b91122..ed47f22f 100644
--- a/src/lib/List/Anime/UpcomingAnimeList.svelte
+++ b/src/lib/List/Anime/UpcomingAnimeList.svelte
@@ -96,22 +96,26 @@ const cleanMedia = (
return upcomingAnime;
};
-$: {
- if ($revalidateAnime) {
- $revalidateAnime = false;
- $lastPruneTimes.anime = -1;
- animeLists = mediaListCollection(
- user,
- $identity,
- Type.Anime,
- $anime,
- $lastPruneTimes.anime,
- {
- addNotification,
- notificationType: "Upcoming Episodes",
- },
- );
- }
+let lastAnimeRevalidation = 0;
+
+$: if ($revalidateAnime > lastAnimeRevalidation) {
+ lastAnimeRevalidation = $revalidateAnime;
+
+ startTime = performance.now();
+ endTime = -1;
+
+ animeLists = mediaListCollection(
+ user,
+ $identity,
+ Type.Anime,
+ $anime,
+ $lastPruneTimes.anime,
+ {
+ forcePrune: true,
+ addNotification,
+ notificationType: "Upcoming Episodes",
+ },
+ );
}
</script>
diff --git a/src/lib/List/Manga/MangaListTemplate.svelte b/src/lib/List/Manga/MangaListTemplate.svelte
index 52649098..df894910 100644
--- a/src/lib/List/Manga/MangaListTemplate.svelte
+++ b/src/lib/List/Manga/MangaListTemplate.svelte
@@ -19,6 +19,7 @@ import identity from "$stores/identity";
import lastPruneTimes from "$stores/lastPruneTimes";
import locale from "$stores/locale";
import manga from "$stores/manga";
+import revalidateManga from "$stores/revalidateManga";
import settings from "$stores/settings";
import ListTitle from "../ListTitle.svelte";
import CleanMangaList from "./CleanMangaList.svelte";
@@ -141,6 +142,27 @@ $: if (
)
restartKeyCacher(Math.max($settings.cacheMangaMinutes, 5));
+let lastMangaRevalidation = 0;
+
+$: if (!dummy && $revalidateManga > lastMangaRevalidation) {
+ lastMangaRevalidation = $revalidateManga;
+
+ startTime = performance.now();
+ endTime = -1;
+
+ mangaLists = mediaListCollection(
+ user,
+ $identity,
+ Type.Manga,
+ $manga,
+ $lastPruneTimes.manga,
+ {
+ forcePrune: true,
+ addNotification,
+ },
+ );
+}
+
onDestroy(() => {
if (keyCacher) clearInterval(keyCacher);
});