diff options
| author | Fuwn <[email protected]> | 2023-12-14 16:28:15 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2023-12-14 16:31:12 -0800 |
| commit | 29e82820e76d3723b83870f4f119b9b2b8c1aa13 (patch) | |
| tree | 0f8b9ecd95a749931515a573973307dd5422a9c2 | |
| parent | ci(earthly): add most used directories last (diff) | |
| download | due.moe-29e82820e76d3723b83870f4f119b9b2b8c1aa13.tar.xz due.moe-29e82820e76d3723b83870f4f119b9b2b8c1aa13.zip | |
feat(sequelspy): display upcoming date
| -rw-r--r-- | src/lib/AniList/prequels.ts | 24 | ||||
| -rw-r--r-- | src/lib/Media/anime.ts | 15 | ||||
| -rw-r--r-- | src/lib/Tools/SequelSpy.svelte | 5 |
3 files changed, 43 insertions, 1 deletions
diff --git a/src/lib/AniList/prequels.ts b/src/lib/AniList/prequels.ts index 726ad66e..2f591a41 100644 --- a/src/lib/AniList/prequels.ts +++ b/src/lib/AniList/prequels.ts @@ -6,6 +6,15 @@ export interface MediaPrequel { title: MediaTitle; episodes: number; seen: number; + nextAiringEpisode?: { + episode: number; + airingAt?: number; + }; + startDate: { + year: number; + month: number; + day: number; + }; } interface PrequelRelations { @@ -29,6 +38,15 @@ interface PrequelsPage { title: MediaTitle; id: number; relations: PrequelRelations; + nextAiringEpisode?: { + episode: number; + airingAt?: number; + }; + startDate: { + year: number; + month: number; + day: number; + }; }[]; pageInfo: { hasNextPage: boolean; @@ -63,6 +81,8 @@ const prequelsPage = async ( romaji } id + nextAiringEpisode { episode airingAt } + startDate { year month day } relations { edges { relationType @@ -131,7 +151,9 @@ export const prequels = async ( id: candidate.id, title: candidate.title, episodes, - seen + seen, + nextAiringEpisode: candidate.nextAiringEpisode, + startDate: candidate.startDate }); } diff --git a/src/lib/Media/anime.ts b/src/lib/Media/anime.ts index 5004a33b..001a7798 100644 --- a/src/lib/Media/anime.ts +++ b/src/lib/Media/anime.ts @@ -4,6 +4,7 @@ import { mediaListCollection, type Media, Type } from '../AniList/media'; import lastPruneTimes from '../../stores/lastPruneTimes'; import type { AniListAuthorisation, UserIdentity } from '../AniList/identity'; import settings from '../../stores/settings'; +import type { MediaPrequel } from '$lib/AniList/prequels'; export const cleanCache = (user: AniListAuthorisation, identity: UserIdentity) => mediaListCollection(user, identity, Type.Anime, get(anime), get(lastPruneTimes).anime, true); @@ -26,6 +27,20 @@ export const airingTime = (anime: Media, upcoming = false) => { }); let hours = null; + if ( + (anime as unknown as MediaPrequel).startDate && + new Date( + anime.startDate.year, + (anime as unknown as MediaPrequel).startDate.month, + (anime as unknown as MediaPrequel).startDate.day + ) < new Date() + ) + return `<span style="opacity: 50%">on ${new Date( + anime.startDate.year, + (anime as unknown as MediaPrequel).startDate.month, + (anime as unknown as MediaPrequel).startDate.day + ).toLocaleDateString()}</span>`; + if (untilAiring !== undefined) { let minutes = untilAiring / 60; let few = true; diff --git a/src/lib/Tools/SequelSpy.svelte b/src/lib/Tools/SequelSpy.svelte index 441585a4..5386066c 100644 --- a/src/lib/Tools/SequelSpy.svelte +++ b/src/lib/Tools/SequelSpy.svelte @@ -4,6 +4,8 @@ import MediaTitle from '$lib/List/MediaTitleDisplay.svelte'; import { onMount } from 'svelte'; import { clearAllParameters } from './tool'; + import { airingTime } from '$lib/Media/anime'; + import type { Media } from '$lib/AniList/media'; export let user: AniListAuthorisation; @@ -24,6 +26,8 @@ $: currentPrequels = prequels(user, year, season); onMount(clearAllParameters); + + const prequelAiringTime = (prequel: MediaPrequel) => airingTime(prequel as unknown as Media); </script> <p> @@ -47,6 +51,7 @@ </a> <span style="opacity: 50%;">|</span> {prequel.seen}<span style="opacity: 50%;">/{prequel.episodes}</span> + {@html prequelAiringTime(prequel)} </li> {/each} </ul> |