diff options
| author | Fuwn <[email protected]> | 2023-12-17 06:17:44 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2023-12-17 06:17:44 -0800 |
| commit | 3c763625661b14e0a9b66b5e438090f020e89bb0 (patch) | |
| tree | 043ea8ed7567cbc6bb9d868ed7b37a23455302b1 /src | |
| parent | fix(airing): closest match mishits (diff) | |
| download | due.moe-3c763625661b14e0a9b66b5e438090f020e89bb0.tar.xz due.moe-3c763625661b14e0a9b66b5e438090f020e89bb0.zip | |
refactor(airing): airing time via injection
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/Media/Anime/airing.ts | 52 |
1 files changed, 36 insertions, 16 deletions
diff --git a/src/lib/Media/Anime/airing.ts b/src/lib/Media/Anime/airing.ts index e0cb9528..c7d4a4ea 100644 --- a/src/lib/Media/Anime/airing.ts +++ b/src/lib/Media/Anime/airing.ts @@ -59,18 +59,21 @@ const findClosestMatch = (times: Time[], titles: string[]) => { return closestMatch as Time | null; }; -export const airingTime = (anime: Media, subsPlease: SubsPlease | null, upcoming = false) => { +export const injectAiringTime = (anime: Media, subsPlease: SubsPlease | null) => { const airingAt = anime.nextAiringEpisode?.airingAt; + const nativeUntilAiring = airingAt + ? Math.round((airingAt - Date.now() / 1000) * 100) / 100 + : undefined; let untilAiring; - let time = new Date(airingAt ? airingAt * 1000 : 0).toLocaleTimeString([], { - hour12: !settings.get().display24HourTime, - hour: 'numeric', - minute: '2-digit' - }); + let time = new Date(airingAt ? airingAt * 1000 : 0); - if (get(settings).displayNativeCountdown || !subsPlease) { - untilAiring = airingAt ? Math.round((airingAt - Date.now() / 1000) * 100) / 100 : undefined; - } else { + if ( + !( + get(settings).displayNativeCountdown || + !subsPlease || + !(nativeUntilAiring !== undefined && nativeUntilAiring < 24 * 60 * 60) + ) + ) { const times: Time[] = []; for (const [key, value] of Object.entries(subsPlease.schedule)) { @@ -93,15 +96,32 @@ export const airingTime = (anime: Media, subsPlease: SubsPlease | null, upcoming if (foundTime) { untilAiring = secondsUntil((foundTime as Time).time, (foundTime as Time).day); - time = new Date(Date.now() + untilAiring * 1000).toLocaleTimeString([], { - hour12: !settings.get().display24HourTime, - hour: 'numeric', - minute: '2-digit' - }); - } else - untilAiring = airingAt ? Math.round((airingAt - Date.now() / 1000) * 100) / 100 : undefined; + time = new Date(Date.now() + untilAiring * 1000); + } } + return { + ...anime, + nextAiringEpisode: { + ...anime.nextAiringEpisode, + airingAt: time.getTime() / 1000 + } + } 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; |