diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/List/Anime/CleanAnimeList.svelte | 2 | ||||
| -rw-r--r-- | src/lib/List/Anime/DueAnimeList.svelte | 2 | ||||
| -rw-r--r-- | src/lib/Media/Anime/Airing/subtitled.ts (renamed from src/lib/Media/Anime/airing.ts) | 83 | ||||
| -rw-r--r-- | src/lib/Media/Anime/Airing/time.ts | 83 | ||||
| -rw-r--r-- | src/lib/Tools/SequelSpy.svelte | 2 | ||||
| -rw-r--r-- | src/routes/schedule/+page.svelte | 2 |
6 files changed, 89 insertions, 85 deletions
diff --git a/src/lib/List/Anime/CleanAnimeList.svelte b/src/lib/List/Anime/CleanAnimeList.svelte index 3da3556e..64af9ddd 100644 --- a/src/lib/List/Anime/CleanAnimeList.svelte +++ b/src/lib/List/Anime/CleanAnimeList.svelte @@ -5,7 +5,7 @@ import type { Media } from '$lib/AniList/media'; import { cleanCache, updateMedia } from '$lib/Media/Anime/cache'; import { totalEpisodes } from '$lib/Media/Anime/episodes'; - import { airingTime } from '$lib/Media/Anime/airing'; + import { airingTime } from '$lib/Media/Anime/Airing/time'; import type { AniListAuthorisation, UserIdentity } from '$lib/AniList/identity'; import ListTitle from '../ListTitle.svelte'; import MediaTitle from '../MediaTitleDisplay.svelte'; diff --git a/src/lib/List/Anime/DueAnimeList.svelte b/src/lib/List/Anime/DueAnimeList.svelte index ac370892..98cc43c0 100644 --- a/src/lib/List/Anime/DueAnimeList.svelte +++ b/src/lib/List/Anime/DueAnimeList.svelte @@ -7,7 +7,7 @@ import lastPruneTimes from '../../../stores/lastPruneTimes'; import AnimeList from './AnimeListTemplate.svelte'; import type { SubsPlease } from '$lib/subsPlease'; - import { injectAiringTime } from '$lib/Media/Anime/airing'; + import { injectAiringTime } from '$lib/Media/Anime/Airing/subtitled'; export let user: AniListAuthorisation; export let identity: UserIdentity; diff --git a/src/lib/Media/Anime/airing.ts b/src/lib/Media/Anime/Airing/subtitled.ts index 5d51386b..73e4bddd 100644 --- a/src/lib/Media/Anime/airing.ts +++ b/src/lib/Media/Anime/Airing/subtitled.ts @@ -1,10 +1,8 @@ import { get } from 'svelte/store'; -import type { Media } from '../../AniList/media'; -import settings from '../../../stores/settings'; -import type { MediaPrequel } from '$lib/AniList/prequels'; +import type { Media } from '../../../AniList/media'; +import settings from '../../../../stores/settings'; import type { SubsPlease } from '$lib/subsPlease'; import levenshtein from 'fast-levenshtein'; -import { totalEpisodes } from './episodes'; export interface Time { title: string; @@ -156,80 +154,3 @@ export const injectAiringTime = (anime: Media, subsPlease: SubsPlease | null) => } } as Media; }; - -export const airingTime = ( - originalAnime: Media, - subsPlease: SubsPlease | null, - upcoming = 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; - - 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; - - if (minutes > 60) { - hours = minutes / 60; - - if (hours >= 24) { - // let weeks = Math.floor(Math.floor(hours / 24) / 7); - - few = false; - - // if (weeks >= 1) { - // weeks = Math.round(weeks); - - // timeFrame = `${weeks} week${weeks === 1 ? '' : 's'}`; - // } else { - const days = Math.round(Math.floor(hours / 24)); - - timeFrame = `${days.toFixed(0)} day${days === 1 ? '' : 's'}`; - // } - } else timeFrame = `${hours.toFixed(1)} hour${hours === 1 ? '' : 's'}`; - } else { - minutes = Math.round(minutes); - - timeFrame = `${minutes} minute${minutes === 1 ? '' : 's'}`; - } - - const opacity = Math.max(50, 100 - (untilAiring / 60 / 60 / 24 / 7) * 50); - - if (upcoming) - return `<span title="${ - hours ? `${hours.toFixed(3)} hours` : '' - }" style="opacity: ${opacity}%;">${anime.nextAiringEpisode?.episode}${totalEpisodes( - anime - )} in ${timeFrame} <span style="opacity: 50%">${few ? `(${time})` : ''}</span></span>`; - else - return `<span title="${ - hours ? `${hours.toFixed(3)} hours` : '' - }" style="opacity: ${opacity}%;">${anime.nextAiringEpisode?.episode} in ${ - few ? '<b>' : '' - }${timeFrame}${few ? '</b>' : ''} ${few ? `(${time})` : ''}</span>`; - } - - return ''; -}; diff --git a/src/lib/Media/Anime/Airing/time.ts b/src/lib/Media/Anime/Airing/time.ts new file mode 100644 index 00000000..59e9e073 --- /dev/null +++ b/src/lib/Media/Anime/Airing/time.ts @@ -0,0 +1,83 @@ +import type { Media } from '$lib/AniList/media'; +import type { MediaPrequel } from '$lib/AniList/prequels'; +import type { SubsPlease } from '$lib/subsPlease'; +import settings from '../../../../stores/settings'; +import { injectAiringTime } from './subtitled'; +import { totalEpisodes } from '../episodes'; + +export const airingTime = ( + originalAnime: Media, + subsPlease: SubsPlease | null, + upcoming = 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; + + 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; + + if (minutes > 60) { + hours = minutes / 60; + + if (hours >= 24) { + // let weeks = Math.floor(Math.floor(hours / 24) / 7); + + few = false; + + // if (weeks >= 1) { + // weeks = Math.round(weeks); + + // timeFrame = `${weeks} week${weeks === 1 ? '' : 's'}`; + // } else { + const days = Math.round(Math.floor(hours / 24)); + + timeFrame = `${days.toFixed(0)} day${days === 1 ? '' : 's'}`; + // } + } else timeFrame = `${hours.toFixed(1)} hour${hours === 1 ? '' : 's'}`; + } else { + minutes = Math.round(minutes); + + timeFrame = `${minutes} minute${minutes === 1 ? '' : 's'}`; + } + + const opacity = Math.max(50, 100 - (untilAiring / 60 / 60 / 24 / 7) * 50); + + if (upcoming) + return `<span title="${ + hours ? `${hours.toFixed(3)} hours` : '' + }" style="opacity: ${opacity}%;">${anime.nextAiringEpisode?.episode}${totalEpisodes( + anime + )} in ${timeFrame} <span style="opacity: 50%">${few ? `(${time})` : ''}</span></span>`; + else + return `<span title="${ + hours ? `${hours.toFixed(3)} hours` : '' + }" style="opacity: ${opacity}%;">${anime.nextAiringEpisode?.episode} in ${ + few ? '<b>' : '' + }${timeFrame}${few ? '</b>' : ''} ${few ? `(${time})` : ''}</span>`; + } + + return ''; +}; diff --git a/src/lib/Tools/SequelSpy.svelte b/src/lib/Tools/SequelSpy.svelte index 2ff7832b..44e453fe 100644 --- a/src/lib/Tools/SequelSpy.svelte +++ b/src/lib/Tools/SequelSpy.svelte @@ -4,7 +4,7 @@ import MediaTitle from '$lib/List/MediaTitleDisplay.svelte'; import { onMount } from 'svelte'; import { clearAllParameters, parseOrDefault } from './tool'; - import { airingTime } from '$lib/Media/Anime/airing'; + import { airingTime } from '$lib/Media/Anime/Airing/time'; import type { Media } from '$lib/AniList/media'; import { page } from '$app/stores'; import { browser } from '$app/environment'; diff --git a/src/routes/schedule/+page.svelte b/src/routes/schedule/+page.svelte index d88535cb..fd3ac442 100644 --- a/src/routes/schedule/+page.svelte +++ b/src/routes/schedule/+page.svelte @@ -8,7 +8,7 @@ import type { Media } from '$lib/AniList/media'; import { scheduleMediaListCollection } from '$lib/AniList/schedule'; import { season } from '$lib/Media/Anime/season'; - import { findClosestMedia } from '$lib/Media/Anime/airing'; + import { findClosestMedia } from '$lib/Media/Anime/Airing/subtitled'; import MediaTitleDisplay from '$lib/List/MediaTitleDisplay.svelte'; import { outboundLink } from '$lib/Media/links'; |