aboutsummaryrefslogtreecommitdiff
path: root/src/lib/List/Anime/UpcomingAnimeList.svelte
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/List/Anime/UpcomingAnimeList.svelte')
-rw-r--r--src/lib/List/Anime/UpcomingAnimeList.svelte148
1 files changed, 87 insertions, 61 deletions
diff --git a/src/lib/List/Anime/UpcomingAnimeList.svelte b/src/lib/List/Anime/UpcomingAnimeList.svelte
index 109584f0..2dd69a68 100644
--- a/src/lib/List/Anime/UpcomingAnimeList.svelte
+++ b/src/lib/List/Anime/UpcomingAnimeList.svelte
@@ -1,19 +1,22 @@
<script lang="ts">
-import Spacer from '$lib/Layout/Spacer.svelte';
-import { mediaListCollection, Type, type Media } from '$lib/Data/AniList/media';
-import type { AniListAuthorisation } from '$lib/Data/AniList/identity';
-import { onMount } from 'svelte';
-import anime from '$stores/anime';
-import lastPruneTimes from '$stores/lastPruneTimes';
-import AnimeList from './AnimeListTemplate.svelte';
-import settings from '$stores/settings';
-import type { SubsPlease } from '$lib/Media/Anime/Airing/Subtitled/subsPlease';
-import { addNotification } from '$lib/Notification/store';
-import locale from '$stores/locale';
-import identity from '$stores/identity';
-import { injectAiringTime } from '$lib/Media/Anime/Airing/Subtitled/match';
-import { hasDueEpisodes, hasNoAiredEpisodes } from '$lib/Media/Anime/Airing/classify';
-import revalidateAnime from '$stores/revalidateAnime';
+import Spacer from "$lib/Layout/Spacer.svelte";
+import { mediaListCollection, Type, type Media } from "$lib/Data/AniList/media";
+import type { AniListAuthorisation } from "$lib/Data/AniList/identity";
+import { onMount } from "svelte";
+import anime from "$stores/anime";
+import lastPruneTimes from "$stores/lastPruneTimes";
+import AnimeList from "./AnimeListTemplate.svelte";
+import settings from "$stores/settings";
+import type { SubsPlease } from "$lib/Media/Anime/Airing/Subtitled/subsPlease";
+import { addNotification } from "$lib/Notification/store";
+import locale from "$stores/locale";
+import identity from "$stores/identity";
+import { injectAiringTime } from "$lib/Media/Anime/Airing/Subtitled/match";
+import {
+ hasDueEpisodes,
+ hasNoAiredEpisodes,
+} from "$lib/Media/Anime/Airing/classify";
+import revalidateAnime from "$stores/revalidateAnime";
export let user: AniListAuthorisation;
let animeLists: Promise<Media[]>;
@@ -21,65 +24,88 @@ let startTime: number;
let endTime: number;
onMount(async () => {
- startTime = performance.now();
- animeLists = mediaListCollection(user, $identity, Type.Anime, $anime, $lastPruneTimes.anime, {
- addNotification,
- notificationType: 'Upcoming Episodes'
- });
+ startTime = performance.now();
+ animeLists = mediaListCollection(
+ user,
+ $identity,
+ Type.Anime,
+ $anime,
+ $lastPruneTimes.anime,
+ {
+ addNotification,
+ notificationType: "Upcoming Episodes",
+ },
+ );
});
const cleanMedia = (
- anime: Media[],
- displayUnresolved: boolean,
- subsPlease: SubsPlease | null,
- plannedOnly = true
+ anime: Media[],
+ displayUnresolved: boolean,
+ subsPlease: SubsPlease | null,
+ plannedOnly = true,
) => {
- if (anime === undefined) return [];
+ if (anime === undefined) return [];
- const filterAnime = (status: 'RELEASING' | 'NOT_YET_RELEASED') =>
- anime
- .filter((media: Media) => media.status === status && media.nextAiringEpisode !== null)
- .map((media) => injectAiringTime(media, subsPlease))
- .filter(
- (media: Media) =>
- // Outdated media
- ($settings.displayPlannedAnime ? media.mediaListEntry?.status === 'PLANNING' : false) ||
- !hasDueEpisodes(media)
- )
- .map((media: Media) => {
- // Adjust for planned anime
- if (
- ($settings.displayPlannedAnime ? media.episodes !== 1 : true) &&
- hasNoAiredEpisodes(media)
- )
- media.nextAiringEpisode = { episode: -1 };
+ const filterAnime = (status: "RELEASING" | "NOT_YET_RELEASED") =>
+ anime
+ .filter(
+ (media: Media) =>
+ media.status === status && media.nextAiringEpisode !== null,
+ )
+ .map((media) => injectAiringTime(media, subsPlease))
+ .filter(
+ (media: Media) =>
+ // Outdated media
+ ($settings.displayPlannedAnime
+ ? media.mediaListEntry?.status === "PLANNING"
+ : false) || !hasDueEpisodes(media),
+ )
+ .map((media: Media) => {
+ // Adjust for planned anime
+ if (
+ ($settings.displayPlannedAnime ? media.episodes !== 1 : true) &&
+ hasNoAiredEpisodes(media)
+ )
+ media.nextAiringEpisode = { episode: -1 };
- return media;
- });
- let upcomingAnime = filterAnime(plannedOnly ? 'NOT_YET_RELEASED' : 'RELEASING');
+ return media;
+ });
+ let upcomingAnime = filterAnime(
+ plannedOnly ? "NOT_YET_RELEASED" : "RELEASING",
+ );
- if (!displayUnresolved)
- upcomingAnime = upcomingAnime.filter((media: Media) => media.nextAiringEpisode?.episode !== -1);
+ if (!displayUnresolved)
+ upcomingAnime = upcomingAnime.filter(
+ (media: Media) => media.nextAiringEpisode?.episode !== -1,
+ );
- upcomingAnime.sort(
- (a: Media, b: Media) =>
- (a.nextAiringEpisode?.airingAt || 9999) - (b.nextAiringEpisode?.airingAt || 9999)
- );
+ upcomingAnime.sort(
+ (a: Media, b: Media) =>
+ (a.nextAiringEpisode?.airingAt || 9999) -
+ (b.nextAiringEpisode?.airingAt || 9999),
+ );
- if (!endTime) endTime = performance.now() - startTime;
+ if (!endTime) endTime = performance.now() - startTime;
- return upcomingAnime;
+ return upcomingAnime;
};
$: {
- if ($revalidateAnime) {
- $revalidateAnime = false;
- $lastPruneTimes.anime = -1;
- animeLists = mediaListCollection(user, $identity, Type.Anime, $anime, $lastPruneTimes.anime, {
- addNotification,
- notificationType: 'Upcoming Episodes'
- });
- }
+ if ($revalidateAnime) {
+ $revalidateAnime = false;
+ $lastPruneTimes.anime = -1;
+ animeLists = mediaListCollection(
+ user,
+ $identity,
+ Type.Anime,
+ $anime,
+ $lastPruneTimes.anime,
+ {
+ addNotification,
+ notificationType: "Upcoming Episodes",
+ },
+ );
+ }
}
</script>