aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFuwn <[email protected]>2024-12-27 02:21:01 -0800
committerFuwn <[email protected]>2024-12-27 02:21:01 -0800
commit5b4ad037099762f9013211d22a6eb79c78e7723e (patch)
tree3805c0b601d8fa7f826b7fec74a48364f0abfbc8
parentfeat(wrapped): exclude unrated & unwatched toggle (diff)
downloaddue.moe-5b4ad037099762f9013211d22a6eb79c78e7723e.tar.xz
due.moe-5b4ad037099762f9013211d22a6eb79c78e7723e.zip
feat(Wrapped): start and end data filters
-rw-r--r--src/lib/Data/AniList/media.ts6
-rw-r--r--src/lib/Tools/Wrapped/Tool.svelte62
2 files changed, 63 insertions, 5 deletions
diff --git a/src/lib/Data/AniList/media.ts b/src/lib/Data/AniList/media.ts
index f8aeb401..b9e70a7d 100644
--- a/src/lib/Data/AniList/media.ts
+++ b/src/lib/Data/AniList/media.ts
@@ -65,9 +65,13 @@ export interface Media {
repeat: number;
startedAt: {
year: number;
+ month: number;
+ day: number;
};
completedAt: {
year: number;
+ month: number;
+ day: number;
};
createdAt: number;
updatedAt: number;
@@ -148,7 +152,7 @@ const collectionQueryTemplate = (type: Type, userId: number, options: Collection
nextAiringEpisode { episode airingAt }
mediaListEntry {
progress progressVolumes status repeat createdAt updatedAt
- score(format: POINT_100) startedAt { year } completedAt { year }
+ score(format: POINT_100) startedAt { year month day } completedAt { year month day }
}
startDate { year }
endDate { year }
diff --git a/src/lib/Tools/Wrapped/Tool.svelte b/src/lib/Tools/Wrapped/Tool.svelte
index a68de8b9..a0fa9214 100644
--- a/src/lib/Tools/Wrapped/Tool.svelte
+++ b/src/lib/Tools/Wrapped/Tool.svelte
@@ -70,6 +70,9 @@
let activityHistoryPosition: 'TOP' | 'BELOW_TOP' | 'ORIGINAL' = 'ORIGINAL';
let includeOngoingMediaFromPreviousYears = false;
let exlcludeUnratedUnwatched = true;
+ let startDateFilter: Date | null = null;
+ let endDateFilter: Date | null = null;
+ let dateTicked = false;
$: {
if (browser && mounted) {
@@ -284,7 +287,7 @@
$anime,
$lastPruneTimes.anime,
{
- forcePrune: true,
+ forcePrune: dateTicked ? false : true,
includeCompleted: true,
all: true
}
@@ -310,7 +313,21 @@
(includeSpecials ? true : item.format !== 'SPECIAL') &&
(includeOVAs ? true : item.format !== 'OVA') &&
(exlcludeUnratedUnwatched ? item.mediaListEntry?.score !== 0 : true) &&
- (exlcludeUnratedUnwatched ? item.mediaListEntry?.progress !== 0 : true)
+ (exlcludeUnratedUnwatched ? item.mediaListEntry?.progress !== 0 : true) &&
+ (startDateFilter && item.mediaListEntry?.startedAt
+ ? new Date(
+ item.mediaListEntry.startedAt.year,
+ item.mediaListEntry?.startedAt.month - 1,
+ item.mediaListEntry.startedAt.day
+ ) >= new Date(startDateFilter)
+ : true) &&
+ (endDateFilter && item.mediaListEntry?.startedAt
+ ? new Date(
+ item.mediaListEntry.completedAt.year,
+ item.mediaListEntry?.completedAt.month - 1,
+ item.mediaListEntry.completedAt.day
+ ) <= new Date(endDateFilter)
+ : true)
)
.sort((a, b) => {
switch (mediaSort) {
@@ -383,7 +400,7 @@
$manga,
$lastPruneTimes.manga,
{
- forcePrune: true,
+ forcePrune: dateTicked ? false : true,
includeCompleted: true,
all: true
}
@@ -401,7 +418,21 @@
? item.mediaListEntry?.progress >= 1
: false)) &&
(exlcludeUnratedUnwatched ? item.mediaListEntry?.score !== 0 : true) &&
- (exlcludeUnratedUnwatched ? item.mediaListEntry?.progress !== 0 : true)
+ (exlcludeUnratedUnwatched ? item.mediaListEntry?.progress !== 0 : true) &&
+ (startDateFilter && item.mediaListEntry?.startedAt
+ ? new Date(
+ item.mediaListEntry.startedAt.year,
+ item.mediaListEntry?.startedAt.month - 1,
+ item.mediaListEntry.startedAt.day
+ ) >= new Date(startDateFilter)
+ : true) &&
+ (endDateFilter && item.mediaListEntry?.startedAt
+ ? new Date(
+ item.mediaListEntry.completedAt.year,
+ item.mediaListEntry?.completedAt.month - 1,
+ item.mediaListEntry.completedAt.day
+ ) <= new Date(endDateFilter)
+ : true)
)
.sort((a, b) => {
if (a.mediaListEntry?.score === undefined) return 1;
@@ -438,6 +469,7 @@
episodes = 0;
minutesWatched = 0;
chapters = 0;
+ dateTicked = false;
for (const media of calculatedAnimeList) {
episodes += media.mediaListEntry?.progress || 0;
@@ -719,6 +751,28 @@
{/each}
</select>
Calculate for year<br />
+ <input
+ type="date"
+ bind:value={startDateFilter}
+ placeholder="Start date"
+ on:change={() => {
+ dateTicked = true;
+
+ update();
+ }}
+ />
+ Start date filter<br />
+ <input
+ type="date"
+ bind:value={endDateFilter}
+ placeholder="End date"
+ on:change={() => {
+ dateTicked = true;
+
+ update();
+ }}
+ />
+ End date filter<br />
<select bind:value={mediaSort}>
<option value={SortOptions.SCORE}>Score</option>
<option value={SortOptions.MINUTES_WATCHED}>Minutes Watched/Read</option>