aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFuwn <[email protected]>2023-12-17 06:17:44 -0800
committerFuwn <[email protected]>2023-12-17 06:17:44 -0800
commit3c763625661b14e0a9b66b5e438090f020e89bb0 (patch)
tree043ea8ed7567cbc6bb9d868ed7b37a23455302b1 /src
parentfix(airing): closest match mishits (diff)
downloaddue.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.ts52
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;