aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFuwn <[email protected]>2023-12-14 16:28:15 -0800
committerFuwn <[email protected]>2023-12-14 16:31:12 -0800
commit29e82820e76d3723b83870f4f119b9b2b8c1aa13 (patch)
tree0f8b9ecd95a749931515a573973307dd5422a9c2
parentci(earthly): add most used directories last (diff)
downloaddue.moe-29e82820e76d3723b83870f4f119b9b2b8c1aa13.tar.xz
due.moe-29e82820e76d3723b83870f4f119b9b2b8c1aa13.zip
feat(sequelspy): display upcoming date
-rw-r--r--src/lib/AniList/prequels.ts24
-rw-r--r--src/lib/Media/anime.ts15
-rw-r--r--src/lib/Tools/SequelSpy.svelte5
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>