diff options
| author | Fuwn <[email protected]> | 2025-03-29 15:25:47 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2025-03-29 15:25:47 -0700 |
| commit | 2e209e9f1ab1571d2333504da59f097fd4844089 (patch) | |
| tree | 880f8fabaec0e7272fb5f8718a9782655a6369f4 /src/lib | |
| parent | fix(BadgePreview): Correct badge preview width (diff) | |
| download | due.moe-2e209e9f1ab1571d2333504da59f097fd4844089.tar.xz due.moe-2e209e9f1ab1571d2333504da59f097fd4844089.zip | |
feat(Anime): Add additional sort options
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/Data/AniList/media.ts | 6 | ||||
| -rw-r--r-- | src/lib/List/Anime/CompletedAnimeList.svelte | 28 | ||||
| -rw-r--r-- | src/lib/List/Anime/DueAnimeList.svelte | 35 | ||||
| -rw-r--r-- | src/lib/Settings/Categories/Display.svelte | 17 |
4 files changed, 62 insertions, 24 deletions
diff --git a/src/lib/Data/AniList/media.ts b/src/lib/Data/AniList/media.ts index b9e70a7d..c032edaa 100644 --- a/src/lib/Data/AniList/media.ts +++ b/src/lib/Data/AniList/media.ts @@ -78,9 +78,11 @@ export interface Media { }; startDate: { year: number; + month: number; }; endDate: { year: number; + month: number; }; coverImage: { extraLarge: string; @@ -154,8 +156,8 @@ const collectionQueryTemplate = (type: Type, userId: number, options: Collection progress progressVolumes status repeat createdAt updatedAt score(format: POINT_100) startedAt { year month day } completedAt { year month day } } - startDate { year } - endDate { year } + startDate { year month } + endDate { year month } coverImage { extraLarge medium } ${ options.includeRelations diff --git a/src/lib/List/Anime/CompletedAnimeList.svelte b/src/lib/List/Anime/CompletedAnimeList.svelte index 76ec7207..1fa775c4 100644 --- a/src/lib/List/Anime/CompletedAnimeList.svelte +++ b/src/lib/List/Anime/CompletedAnimeList.svelte @@ -85,10 +85,32 @@ ); outdatedCompletedAnime.sort((a: Media, b: Media) => { - const difference = (anime: Media) => - anime.episodes - (anime.mediaListEntry || { progress: 0 }).progress; + switch ($settings.displayAnimeSort) { + case 'difference': { + const difference = (anime: Media) => + (anime.nextAiringEpisode?.episode === -1 + ? 99999 + : anime.nextAiringEpisode?.episode || -1) - + (anime.mediaListEntry || { progress: 0 }).progress; - return difference(a) - difference(b); + return difference(a) - difference(b); + } + + case 'end_date': + return ( + new Date(a.endDate.year, a.endDate.month - 1).getTime() - + new Date(b.endDate.year, b.endDate.month - 1).getTime() + ); + + case 'start_date': + return ( + new Date(a.startDate.year, a.startDate.month - 1).getTime() - + new Date(b.startDate.year, b.startDate.month - 1).getTime() + ); + + case 'time_remaining': + return (a.nextAiringEpisode?.airingAt || 9999) - (b.nextAiringEpisode?.airingAt || 9999); + } }); if (!endTime) endTime = performance.now() - startTime; diff --git a/src/lib/List/Anime/DueAnimeList.svelte b/src/lib/List/Anime/DueAnimeList.svelte index 1453baeb..8650590b 100644 --- a/src/lib/List/Anime/DueAnimeList.svelte +++ b/src/lib/List/Anime/DueAnimeList.svelte @@ -73,16 +73,31 @@ dueAnime = dueAnime.filter((media: Media) => media.nextAiringEpisode?.episode !== -1); dueAnime.sort((a: Media, b: Media) => { - if ($settings.displaySortedByDifference === true) { - const difference = (anime: Media) => - (anime.nextAiringEpisode?.episode === -1 - ? 99999 - : anime.nextAiringEpisode?.episode || -1) - - (anime.mediaListEntry || { progress: 0 }).progress; - - return difference(a) - difference(b); - } else { - return (a.nextAiringEpisode?.airingAt || 9999) - (b.nextAiringEpisode?.airingAt || 9999); + switch ($settings.displayAnimeSort) { + case 'difference': { + const difference = (anime: Media) => + (anime.nextAiringEpisode?.episode === -1 + ? 99999 + : anime.nextAiringEpisode?.episode || -1) - + (anime.mediaListEntry || { progress: 0 }).progress; + + return difference(a) - difference(b); + } + + case 'end_date': + return ( + new Date(a.endDate.year, a.endDate.month - 1).getTime() - + new Date(b.endDate.year, b.endDate.month - 1).getTime() + ); + + case 'start_date': + return ( + new Date(a.startDate.year, a.startDate.month - 1).getTime() - + new Date(b.startDate.year, b.startDate.month - 1).getTime() + ); + + case 'time_remaining': + return (a.nextAiringEpisode?.airingAt || 9999) - (b.nextAiringEpisode?.airingAt || 9999); } }); diff --git a/src/lib/Settings/Categories/Display.svelte b/src/lib/Settings/Categories/Display.svelte index e47bf2ae..a2803d98 100644 --- a/src/lib/Settings/Categories/Display.svelte +++ b/src/lib/Settings/Categories/Display.svelte @@ -316,16 +316,15 @@ <p /> <b>List sort</b><br /> -<SettingCheckboxToggle setting="displayReverseSort" text="Reverse anime sort order" /> +<select bind:value={$settings.displayAnimeSort}> + <option value="time_remaining">Time Remaining Until Next Airing Episode</option> + <option value="difference">Difference Between Progress and Next Airing Episode</option> + <option value="start_date">Start Date</option> + <option value="end_date">End Date</option> +</select> +Anime sort order <br /> -<SettingCheckboxToggle - setting="displaySortedByDifference" - text={$locale().settings.display.categories.media.fields.sortBy.title} -> - <SettingHint lineBreak> - {$locale().settings.display.categories.media.fields.sortBy.hint} - </SettingHint> -</SettingCheckboxToggle> +<SettingCheckboxToggle setting="displayReverseSort" text="Reverse anime sort order" /> <br /> <b>{$locale().settings.display.categories.media.title}</b><br /> |