aboutsummaryrefslogtreecommitdiff
path: root/src/lib/Media/Anime/Airing/time.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/Media/Anime/Airing/time.ts')
-rw-r--r--src/lib/Media/Anime/Airing/time.ts239
1 files changed, 121 insertions, 118 deletions
diff --git a/src/lib/Media/Anime/Airing/time.ts b/src/lib/Media/Anime/Airing/time.ts
index 76d51668..dadcd6f1 100644
--- a/src/lib/Media/Anime/Airing/time.ts
+++ b/src/lib/Media/Anime/Airing/time.ts
@@ -1,122 +1,125 @@
-import type { Media } from '$lib/Data/AniList/media';
-import type { MediaPrequel } from '$lib/Data/AniList/prequels';
-import type { SubsPlease } from '$lib/Media/Anime/Airing/Subtitled/subsPlease';
-import settings from '$stores/settings';
-import { injectAiringTime } from './Subtitled/match';
-import { totalEpisodes } from '../episodes';
-import { get } from 'svelte/store';
+import type { Media } from "$lib/Data/AniList/media";
+import type { MediaPrequel } from "$lib/Data/AniList/prequels";
+import type { SubsPlease } from "$lib/Media/Anime/Airing/Subtitled/subsPlease";
+import settings from "$stores/settings";
+import { injectAiringTime } from "./Subtitled/match";
+import { totalEpisodes } from "../episodes";
+import { get } from "svelte/store";
export const airingTime = (
- originalAnime: Media,
- subsPlease: SubsPlease | null,
- upcoming = false,
- forceDays = false
+ originalAnime: Media,
+ subsPlease: SubsPlease | null,
+ upcoming = false,
+ forceDays = false,
) => {
- const anime = injectAiringTime(originalAnime, subsPlease);
- const airingAt = anime.nextAiringEpisode?.airingAt;
- const untilAiring = airingAt ? Math.round((airingAt - Date.now() / 1000) * 100) / 100 : undefined;
- const time = new Date(airingAt ? airingAt * 1000 : 0).toLocaleTimeString([], {
- hour12: !settings.get().display24HourTime,
- hour: 'numeric',
- minute: '2-digit'
- });
- let timeFrame = '';
- let hours = null;
- const shortenCountdown = get(settings).displayShortCountdown;
-
- 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 class="opaque">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;
-
- if (minutes > 60) {
- hours = minutes / 60;
-
- if (hours > 24) {
- let weeks = Math.floor(hours / 24) / 7;
-
- few = false;
-
- if (weeks >= 1.5 && !forceDays) {
- weeks = Math.round(weeks);
-
- timeFrame = `${weeks}${shortenCountdown ? 'w' : ' week'}${
- weeks === 1 || shortenCountdown ? '' : 's'
- }`;
- } else {
- const days = Math.round(Math.floor(hours / 24));
- const residualHours = Math.floor(hours - days * 24);
-
- timeFrame += `${days.toFixed(0)}${shortenCountdown ? 'd' : ' day'}${
- days === 1 || shortenCountdown ? '' : 's'
- }`;
-
- if (residualHours > 0)
- timeFrame += `${shortenCountdown ? '' : ' '}${residualHours}${
- shortenCountdown ? 'h' : ' hour'
- }${residualHours === 1 || shortenCountdown ? '' : 's'}`;
- }
- } else {
- const residualMinutes = Math.round(minutes - Math.floor(hours) * 60);
-
- timeFrame += `${hours.toFixed(0)}${shortenCountdown ? 'h' : ' hour'}${
- hours === 1 || shortenCountdown ? '' : 's'
- }`;
-
- if (residualMinutes > 0)
- timeFrame += `${shortenCountdown ? '' : ' '}${residualMinutes}${
- shortenCountdown ? 'm' : ' minute'
- }${residualMinutes === 1 || shortenCountdown ? '' : 's'}`;
- }
- } else {
- minutes = Math.round(minutes);
-
- timeFrame += `${minutes}${shortenCountdown ? 'm' : ' minute'}${
- minutes === 1 || shortenCountdown ? '' : 's'
- }`;
- }
-
- const opacity = Math.max(50, 100 - (untilAiring / 60 / 60 / 24 / 7) * 50);
- const nextEpisode =
- anime.nextAiringEpisode?.nativeAiringAt &&
- !upcoming &&
- anime.nextAiringEpisode.nativeAiringAt < Date.now() / 1000 + 1 * 24 * 60 * 60
- ? anime.nextAiringEpisode.episode - 1
- : anime.nextAiringEpisode?.episode || 0;
- const dateString =
- new Date(airingAt ? airingAt * 1000 : 0).toLocaleDateString([], {
- weekday: 'long',
- year: 'numeric',
- month: 'long',
- day: 'numeric'
- }) +
- ' ' +
- time;
-
- if (upcoming)
- return `<span title="${dateString}" style="opacity: ${opacity}%;">${nextEpisode}${totalEpisodes(
- anime
- )} in ${timeFrame} <span class="opaque">${
- few && get(settings).displayCoverModeAnime ? '<br>' : ''
- }${few ? `(${time})` : ''}</span></span>`;
- else
- return `<span title="${dateString}" style="opacity: ${opacity}%;">${nextEpisode} in ${
- few && get(settings).displayCoverModeAnime ? '<br>' : ''
- }${few ? '<b>' : ''}${timeFrame}${few ? '</b>' : ''} ${few ? `(${time})` : ''}</span>`;
- }
-
- return '';
+ const anime = injectAiringTime(originalAnime, subsPlease);
+ const airingAt = anime.nextAiringEpisode?.airingAt;
+ const untilAiring = airingAt
+ ? Math.round((airingAt - Date.now() / 1000) * 100) / 100
+ : undefined;
+ const time = new Date(airingAt ? airingAt * 1000 : 0).toLocaleTimeString([], {
+ hour12: !settings.get().display24HourTime,
+ hour: "numeric",
+ minute: "2-digit",
+ });
+ let timeFrame = "";
+ let hours = null;
+ const shortenCountdown = get(settings).displayShortCountdown;
+
+ 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 class="opaque">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;
+
+ if (minutes > 60) {
+ hours = minutes / 60;
+
+ if (hours > 24) {
+ let weeks = Math.floor(hours / 24) / 7;
+
+ few = false;
+
+ if (weeks >= 1.5 && !forceDays) {
+ weeks = Math.round(weeks);
+
+ timeFrame = `${weeks}${shortenCountdown ? "w" : " week"}${
+ weeks === 1 || shortenCountdown ? "" : "s"
+ }`;
+ } else {
+ const days = Math.round(Math.floor(hours / 24));
+ const residualHours = Math.floor(hours - days * 24);
+
+ timeFrame += `${days.toFixed(0)}${shortenCountdown ? "d" : " day"}${
+ days === 1 || shortenCountdown ? "" : "s"
+ }`;
+
+ if (residualHours > 0)
+ timeFrame += `${shortenCountdown ? "" : " "}${residualHours}${
+ shortenCountdown ? "h" : " hour"
+ }${residualHours === 1 || shortenCountdown ? "" : "s"}`;
+ }
+ } else {
+ const residualMinutes = Math.round(minutes - Math.floor(hours) * 60);
+
+ timeFrame += `${hours.toFixed(0)}${shortenCountdown ? "h" : " hour"}${
+ hours === 1 || shortenCountdown ? "" : "s"
+ }`;
+
+ if (residualMinutes > 0)
+ timeFrame += `${shortenCountdown ? "" : " "}${residualMinutes}${
+ shortenCountdown ? "m" : " minute"
+ }${residualMinutes === 1 || shortenCountdown ? "" : "s"}`;
+ }
+ } else {
+ minutes = Math.round(minutes);
+
+ timeFrame += `${minutes}${shortenCountdown ? "m" : " minute"}${
+ minutes === 1 || shortenCountdown ? "" : "s"
+ }`;
+ }
+
+ const opacity = Math.max(50, 100 - (untilAiring / 60 / 60 / 24 / 7) * 50);
+ const nextEpisode =
+ anime.nextAiringEpisode?.nativeAiringAt &&
+ !upcoming &&
+ anime.nextAiringEpisode.nativeAiringAt <
+ Date.now() / 1000 + 1 * 24 * 60 * 60
+ ? anime.nextAiringEpisode.episode - 1
+ : anime.nextAiringEpisode?.episode || 0;
+ const dateString =
+ new Date(airingAt ? airingAt * 1000 : 0).toLocaleDateString([], {
+ weekday: "long",
+ year: "numeric",
+ month: "long",
+ day: "numeric",
+ }) +
+ " " +
+ time;
+
+ if (upcoming)
+ return `<span title="${dateString}" style="opacity: ${opacity}%;">${nextEpisode}${totalEpisodes(
+ anime,
+ )} in ${timeFrame} <span class="opaque">${
+ few && get(settings).displayCoverModeAnime ? "<br>" : ""
+ }${few ? `(${time})` : ""}</span></span>`;
+ else
+ return `<span title="${dateString}" style="opacity: ${opacity}%;">${nextEpisode} in ${
+ few && get(settings).displayCoverModeAnime ? "<br>" : ""
+ }${few ? "<b>" : ""}${timeFrame}${few ? "</b>" : ""} ${few ? `(${time})` : ""}</span>`;
+ }
+
+ return "";
};