diff options
| author | Fuwn <[email protected]> | 2023-09-29 17:20:25 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2023-09-29 17:20:25 -0700 |
| commit | 154f92fc9f984726771d5a5b41b2e1067c8d50e4 (patch) | |
| tree | b814cff0b93f4a18b05c79e9211571eae8c44eef /src/lib/List/Anime/UpcomingAnimeList.svelte | |
| parent | refactor(manga): use template (diff) | |
| download | due.moe-154f92fc9f984726771d5a5b41b2e1067c8d50e4.tar.xz due.moe-154f92fc9f984726771d5a5b41b2e1067c8d50e4.zip | |
refactor(anime): move anime to modules
Diffstat (limited to 'src/lib/List/Anime/UpcomingAnimeList.svelte')
| -rw-r--r-- | src/lib/List/Anime/UpcomingAnimeList.svelte | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/src/lib/List/Anime/UpcomingAnimeList.svelte b/src/lib/List/Anime/UpcomingAnimeList.svelte new file mode 100644 index 00000000..fe83a819 --- /dev/null +++ b/src/lib/List/Anime/UpcomingAnimeList.svelte @@ -0,0 +1,65 @@ +<script lang="ts"> + import { mediaListCollection, Type, type Media } from '$lib/AniList/media'; + import type { UserIdentity, AniListAuthorisation } from '$lib/AniList/identity'; + import { onMount } from 'svelte'; + import anime from '../../../stores/anime'; + import lastPruneTimes from '../../../stores/lastPruneTimes'; + import AnimeList from '../Template/AnimeListTemplate.svelte'; + + export let user: AniListAuthorisation; + export let identity: UserIdentity; + + let animeLists: Promise<Media[]>; + let startTime: number; + let endTime: number; + + onMount(async () => { + startTime = performance.now(); + animeLists = mediaListCollection(user, identity, Type.Anime, $anime, $lastPruneTimes.anime); + }); + + const cleanMedia = (media: Media[], displayUnresolved: boolean) => { + if (media === undefined) { + return []; + } + + const releasingMedia = media.filter( + (media: Media) => media.status == 'RELEASING' && media.nextAiringEpisode !== null + /* && + (media['mediaListEntry'] || { progress: 0 })['progress'] >= + ($displayNotStarted === 'true' ? 0 : 1) */ + ); + const outdatedMedia = releasingMedia.filter((media: Media) => { + return ( + (media.nextAiringEpisode || { episode: 0 }).episode - 1 <= + (media.mediaListEntry || { progress: 0 }).progress + ); + }); + let finalMedia = outdatedMedia.map((media: Media) => { + if ((media.nextAiringEpisode || { episode: 0 }).episode - 1 <= 0) { + media.nextAiringEpisode = { episode: -1 }; + } + + return media; + }); + + if (!displayUnresolved) { + finalMedia = finalMedia.filter((media: Media) => media.nextAiringEpisode?.episode !== -1); + } + + finalMedia.sort((a: Media, b: Media) => { + return ( + (a.nextAiringEpisode?.timeUntilAiring || 9999) - + (b.nextAiringEpisode?.timeUntilAiring || 9999) + ); + }); + + if (!endTime) { + endTime = performance.now() - startTime; + } + + return finalMedia; + }; +</script> + +<AnimeList {endTime} {cleanMedia} {animeLists} {user} {identity} title="Upcoming Episodes" /> |