aboutsummaryrefslogtreecommitdiff
path: root/src/lib/List
diff options
context:
space:
mode:
authorFuwn <[email protected]>2026-06-05 11:10:22 +0000
committerFuwn <[email protected]>2026-06-05 11:10:22 +0000
commit4b56194ee6807acb56abf0949394efadabf830d4 (patch)
tree5cb2074a8d012bf9b7c900e7e44cbdfd0e15123f /src/lib/List
parentfix(lists): tick count down when media leaves a list (diff)
downloaddue.moe-4b56194ee6807acb56abf0949394efadabf830d4.tar.xz
due.moe-4b56194ee6807acb56abf0949394efadabf830d4.zip
feat(airing): replace SubsPlease with AnimeSchedule (sub+dub)
Source both subbed and dubbed episode schedules from AnimeSchedule.net v3 (absolute timestamps, episode numbers, delay windows, streams), keyed to AniList shows by title. Removes SubsPlease and its ~650-line fuzzy matcher. Countdown source is now a setting (native|sub|dub) with a dub->sub->native fallback. Requires ANIMESCHEDULE_CLIENT_TOKEN.
Diffstat (limited to 'src/lib/List')
-rw-r--r--src/lib/List/Anime/AnimeListTemplate.svelte10
-rw-r--r--src/lib/List/Anime/DueAnimeList.svelte8
-rw-r--r--src/lib/List/Anime/UpcomingAnimeList.svelte8
3 files changed, 13 insertions, 13 deletions
diff --git a/src/lib/List/Anime/AnimeListTemplate.svelte b/src/lib/List/Anime/AnimeListTemplate.svelte
index 5d769640..86bf2077 100644
--- a/src/lib/List/Anime/AnimeListTemplate.svelte
+++ b/src/lib/List/Anime/AnimeListTemplate.svelte
@@ -5,10 +5,10 @@ import { browser } from "$app/environment";
import type { AniListAuthorisation } from "$lib/Data/AniList/identity";
import type { Media } from "$lib/Data/AniList/media";
import RateLimitedError from "$lib/Error/RateLimited.svelte";
-import type { SubsPlease } from "$lib/Media/Anime/Airing/Subtitled/subsPlease";
+import type { AiringSchedule } from "$lib/Media/Anime/Airing/animeSchedule";
+import airingSchedule from "$stores/airingSchedule";
import identity from "$stores/identity";
import settings from "$stores/settings";
-import subsPlease from "$stores/subsPlease";
import ListTitle from "../ListTitle.svelte";
import type { Title } from "../mediaTitle";
import CleanAnimeList from "./CleanAnimeList.svelte";
@@ -18,7 +18,7 @@ export let endTime: number;
export let cleanMedia: (
media: Media[],
displayUnresolved: boolean,
- subsPlease: SubsPlease | null,
+ schedule: AiringSchedule | null,
plannedOnly?: boolean,
) => Media[];
export let animeLists: Promise<Media[]>;
@@ -57,7 +57,7 @@ onMount(async () => {
});
</script>
-{#if !$subsPlease && !dummy}
+{#if !$airingSchedule && !dummy}
<PlaceholderList count={lastListSize} {title} />
{:else if !animeLists}
<PlaceholderList count={lastListSize} {title} />
@@ -89,7 +89,7 @@ onMount(async () => {
<PlaceholderList count={lastListSize} {title} />
{:else}
<CleanAnimeList
- media={cleanMedia(media, $settings.displayUnresolved, $subsPlease, plannedOnly)}
+ media={cleanMedia(media, $settings.displayUnresolved, $airingSchedule ?? null, plannedOnly)}
{title}
bind:animeLists
{user}
diff --git a/src/lib/List/Anime/DueAnimeList.svelte b/src/lib/List/Anime/DueAnimeList.svelte
index 8ff0539d..563e728d 100644
--- a/src/lib/List/Anime/DueAnimeList.svelte
+++ b/src/lib/List/Anime/DueAnimeList.svelte
@@ -3,12 +3,12 @@ import { onDestroy, onMount } from "svelte";
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 type { AiringSchedule } from "$lib/Media/Anime/Airing/animeSchedule";
import {
hasDueEpisodes,
hasNoAiredEpisodes,
} from "$lib/Media/Anime/Airing/classify";
-import { injectAiringTime } from "$lib/Media/Anime/Airing/Subtitled/match";
-import type { SubsPlease } from "$lib/Media/Anime/Airing/Subtitled/subsPlease";
+import { injectAiringTime } from "$lib/Media/Anime/Airing/match";
import { addNotification } from "$lib/Notification/store";
import anime from "$stores/anime";
import identity from "$stores/identity";
@@ -85,12 +85,12 @@ onDestroy(() => {
const cleanMedia = (
anime: Media[],
displayUnresolved: boolean,
- subsPlease: SubsPlease | null,
+ schedule: AiringSchedule | null,
) => {
if (anime === undefined) return [];
let dueAnime = anime
- .map((media) => injectAiringTime(media, subsPlease))
+ .map((media) => injectAiringTime(media, schedule))
.filter(
// Releasing media
(media: Media) =>
diff --git a/src/lib/List/Anime/UpcomingAnimeList.svelte b/src/lib/List/Anime/UpcomingAnimeList.svelte
index b88937e9..2e128d8f 100644
--- a/src/lib/List/Anime/UpcomingAnimeList.svelte
+++ b/src/lib/List/Anime/UpcomingAnimeList.svelte
@@ -4,12 +4,12 @@ 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 Spacer from "$lib/Layout/Spacer.svelte";
+import type { AiringSchedule } from "$lib/Media/Anime/Airing/animeSchedule";
import {
hasDueEpisodes,
hasNoAiredEpisodes,
} from "$lib/Media/Anime/Airing/classify";
-import { injectAiringTime } from "$lib/Media/Anime/Airing/Subtitled/match";
-import type { SubsPlease } from "$lib/Media/Anime/Airing/Subtitled/subsPlease";
+import { injectAiringTime } from "$lib/Media/Anime/Airing/match";
import { addNotification } from "$lib/Notification/store";
import anime from "$stores/anime";
import identity from "$stores/identity";
@@ -44,7 +44,7 @@ onMount(async () => {
const cleanMedia = (
anime: Media[],
displayUnresolved: boolean,
- subsPlease: SubsPlease | null,
+ schedule: AiringSchedule | null,
plannedOnly = true,
) => {
if (anime === undefined) return [];
@@ -55,7 +55,7 @@ const cleanMedia = (
(media: Media) =>
media.status === status && media.nextAiringEpisode !== null,
)
- .map((media) => injectAiringTime(media, subsPlease))
+ .map((media) => injectAiringTime(media, schedule))
.filter(
(media: Media) =>
// Outdated media