import { get } from 'svelte/store'; import anime from '../../stores/anime'; import { mediaListCollection, type Media, Type } from '../AniList/media'; import lastPruneTimes from '../../stores/lastPruneTimes'; import type { AniListAuthorisation, UserIdentity } from '../AniList/identity'; export const cleanCache = (user: AniListAuthorisation, identity: UserIdentity) => { return mediaListCollection( user, identity, Type.Anime, get(anime), get(lastPruneTimes).anime, true ); }; export const updateMedia = (id: number, progress: number | undefined, callback: () => void) => { fetch(`/api/anilist-increment?id=${id}&progress=${(progress || 0) + 1}`).then(callback); }; export const totalEpisodes = (anime: Media) => { return anime.episodes === null ? '' : `/${anime.episodes}`; }; export const airingTime = (anime: Media, upcoming = false) => { const untilAiring = anime.nextAiringEpisode?.timeUntilAiring; let timeFrame; const time = new Date(Date.now() + (untilAiring || 0) * 1000).toLocaleTimeString([], { hour: 'numeric', minute: '2-digit' }); if (untilAiring !== undefined) { let minutes = untilAiring / 60; let few = true; if (minutes >= 30) { let 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} day${days === 1 ? '' : 's'}`; } } else { hours = Math.round(hours); timeFrame = `${hours} hour${hours === 1 ? '' : 's'}`; } } else { minutes = Math.round(minutes); timeFrame = `${minutes} minute${minutes === 1 ? '' : 's'}`; } const opacity = Math.round(100 - (untilAiring / 60 / 60 / 24 / 7) * 50); if (upcoming) { return `${anime.nextAiringEpisode?.episode}${totalEpisodes( anime )} in ${timeFrame} ${few ? `(${time})` : ''}`; } else { return `${anime.nextAiringEpisode?.episode} in ${ few ? '' : '' }${timeFrame}${few ? '' : ''} ${few ? `(${time})` : ''}`; } } return ''; };