aboutsummaryrefslogtreecommitdiff
path: root/src/lib/Schedule/Days.svelte
diff options
context:
space:
mode:
authorFuwn <[email protected]>2026-03-01 16:20:51 -0800
committerFuwn <[email protected]>2026-03-01 16:21:02 -0800
commiteae5d24d9e79e59a19d4721caaeaa0ca650ecb33 (patch)
tree1b685bb248e051dfa26d2bfdebe6689402dd93c5 /src/lib/Schedule/Days.svelte
parentchore(tooling): remove legacy eslint and prettier (diff)
downloaddue.moe-eae5d24d9e79e59a19d4721caaeaa0ca650ecb33.tar.xz
due.moe-eae5d24d9e79e59a19d4721caaeaa0ca650ecb33.zip
chore(biome): drop formatter style overrides
Diffstat (limited to 'src/lib/Schedule/Days.svelte')
-rw-r--r--src/lib/Schedule/Days.svelte159
1 files changed, 87 insertions, 72 deletions
diff --git a/src/lib/Schedule/Days.svelte b/src/lib/Schedule/Days.svelte
index ed0ee4d9..0eb30579 100644
--- a/src/lib/Schedule/Days.svelte
+++ b/src/lib/Schedule/Days.svelte
@@ -1,102 +1,117 @@
<script lang="ts">
-import { browser } from '$app/environment';
-import type { AniListAuthorisation } from '$lib/Data/AniList/identity';
-import { mediaListCollection, Type, type Media } from '$lib/Data/AniList/media';
-import { findClosestMedia } from '$lib/Media/Anime/Airing/Subtitled/match';
-import type { SubsPlease, SubsPleaseEpisode } from '$lib/Media/Anime/Airing/Subtitled/subsPlease';
-import { outboundLink } from '$lib/Media/links';
-import { parseOrDefault } from '$lib/Utility/parameters';
-import settings from '$stores/settings';
-import CoverBypass from './CoverBypass.svelte';
-import '$lib/List/covers.css';
-import ParallaxImage from '$lib/Image/ParallaxImage.svelte';
-import LinkedTooltip from '$lib/Tooltip/LinkedTooltip.svelte';
-import { onMount } from 'svelte';
-import identity from '$stores/identity';
-import anime from '$stores/anime';
-import lastPruneTimes from '$stores/lastPruneTimes';
-import Message from '$lib/Loading/Message.svelte';
-import Skeleton from '$lib/Loading/Skeleton.svelte';
-import RateLimitedError from '$lib/Error/RateLimited.svelte';
+import { browser } from "$app/environment";
+import type { AniListAuthorisation } from "$lib/Data/AniList/identity";
+import { mediaListCollection, Type, type Media } from "$lib/Data/AniList/media";
+import { findClosestMedia } from "$lib/Media/Anime/Airing/Subtitled/match";
+import type {
+ SubsPlease,
+ SubsPleaseEpisode,
+} from "$lib/Media/Anime/Airing/Subtitled/subsPlease";
+import { outboundLink } from "$lib/Media/links";
+import { parseOrDefault } from "$lib/Utility/parameters";
+import settings from "$stores/settings";
+import CoverBypass from "./CoverBypass.svelte";
+import "$lib/List/covers.css";
+import ParallaxImage from "$lib/Image/ParallaxImage.svelte";
+import LinkedTooltip from "$lib/Tooltip/LinkedTooltip.svelte";
+import { onMount } from "svelte";
+import identity from "$stores/identity";
+import anime from "$stores/anime";
+import lastPruneTimes from "$stores/lastPruneTimes";
+import Message from "$lib/Loading/Message.svelte";
+import Skeleton from "$lib/Loading/Skeleton.svelte";
+import RateLimitedError from "$lib/Error/RateLimited.svelte";
export let subsPlease: SubsPlease;
export let scheduledMedia: Partial<Media[]>;
export let forceListMode = false;
export let user: AniListAuthorisation | undefined;
-const urlParameters = browser ? new URLSearchParams(window.location.search) : null;
-let day: string | null = parseOrDefault(urlParameters, 'day', null);
+const urlParameters = browser
+ ? new URLSearchParams(window.location.search)
+ : null;
+let day: string | null = parseOrDefault(urlParameters, "day", null);
let mediaListPromise: Promise<Media[]>;
onMount(async () => {
- if (user === undefined || $identity.id === -2) mediaListPromise = Promise.resolve([]);
- else
- mediaListPromise = mediaListCollection(
- user,
- $identity,
- Type.Anime,
- $anime,
- $lastPruneTimes.anime,
- {
- all: true
- }
- );
+ if (user === undefined || $identity.id === -2)
+ mediaListPromise = Promise.resolve([]);
+ else
+ mediaListPromise = mediaListCollection(
+ user,
+ $identity,
+ Type.Anime,
+ $anime,
+ $lastPruneTimes.anime,
+ {
+ all: true,
+ },
+ );
});
-const shiftSubsPleaseSchedule = (schedule: SubsPlease['schedule']) => {
- const shiftedSchedule: { [key: string]: SubsPleaseEpisode[] } = {};
+const shiftSubsPleaseSchedule = (schedule: SubsPlease["schedule"]) => {
+ const shiftedSchedule: { [key: string]: SubsPleaseEpisode[] } = {};
- if (day && Object.keys(schedule).includes(day)) {
- shiftedSchedule[day] = schedule[day as keyof typeof schedule] as unknown as SubsPleaseEpisode[];
+ if (day && Object.keys(schedule).includes(day)) {
+ shiftedSchedule[day] = schedule[
+ day as keyof typeof schedule
+ ] as unknown as SubsPleaseEpisode[];
- return shiftedSchedule;
- }
+ return shiftedSchedule;
+ }
- const days = Object.keys(schedule);
- const currentDayIndex = days.indexOf(new Date().toLocaleString('en-us', { weekday: 'long' }));
+ const days = Object.keys(schedule);
+ const currentDayIndex = days.indexOf(
+ new Date().toLocaleString("en-us", { weekday: "long" }),
+ );
- days
- .slice(currentDayIndex)
- .concat(days.slice(0, currentDayIndex))
- .forEach((day) => {
- const scheduleEntry = schedule[day as keyof typeof schedule];
+ days
+ .slice(currentDayIndex)
+ .concat(days.slice(0, currentDayIndex))
+ .forEach((day) => {
+ const scheduleEntry = schedule[day as keyof typeof schedule];
- shiftedSchedule[day] = Array.isArray(scheduleEntry)
- ? scheduleEntry
- : ([scheduleEntry] as unknown as SubsPleaseEpisode[]);
- });
+ shiftedSchedule[day] = Array.isArray(scheduleEntry)
+ ? scheduleEntry
+ : ([scheduleEntry] as unknown as SubsPleaseEpisode[]);
+ });
- Object.entries(shiftedSchedule).forEach(([day, scheduleEntry]) => {
- if (scheduleEntry.length === 0) {
- delete shiftedSchedule[day];
- }
- });
+ Object.entries(shiftedSchedule).forEach(([day, scheduleEntry]) => {
+ if (scheduleEntry.length === 0) {
+ delete shiftedSchedule[day];
+ }
+ });
- return shiftedSchedule;
+ return shiftedSchedule;
};
-const associateMedia = (media: (Media | undefined)[], title: string, mediaList: Media[]) => {
- const closestMedia = findClosestMedia(media as Media[], title);
+const associateMedia = (
+ media: (Media | undefined)[],
+ title: string,
+ mediaList: Media[],
+) => {
+ const closestMedia = findClosestMedia(media as Media[], title);
- if ($settings.displayScheduleFilterList && closestMedia && mediaList)
- return mediaList.find((m) => m.id === closestMedia?.id) || null;
+ if ($settings.displayScheduleFilterList && closestMedia && mediaList)
+ return mediaList.find((m) => m.id === closestMedia?.id) || null;
- return closestMedia;
+ return closestMedia;
};
const episode = (media: Media, weekday: string) => {
- if (media.nextAiringEpisode?.episode === 1) return 1;
-
- if (
- media.nextAiringEpisode?.airingAt &&
- weekday === new Date().toLocaleString('en-us', { weekday: 'long' }) &&
- new Date(media.nextAiringEpisode.airingAt * 1000).getTime() - new Date().getTime() >
- 24 * 60 * 60 * 1000
- )
- return media.nextAiringEpisode?.episode - 1;
-
- return media.nextAiringEpisode?.episode || 1;
+ if (media.nextAiringEpisode?.episode === 1) return 1;
+
+ if (
+ media.nextAiringEpisode?.airingAt &&
+ weekday === new Date().toLocaleString("en-us", { weekday: "long" }) &&
+ new Date(media.nextAiringEpisode.airingAt * 1000).getTime() -
+ new Date().getTime() >
+ 24 * 60 * 60 * 1000
+ )
+ return media.nextAiringEpisode?.episode - 1;
+
+ return media.nextAiringEpisode?.episode || 1;
};
</script>