aboutsummaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorFuwn <[email protected]>2023-11-22 17:32:09 -0800
committerFuwn <[email protected]>2023-11-22 17:32:09 -0800
commit07acfb05dcb902707594f14c318e9ea774ba8145 (patch)
treeab273ad86c45a04ee0211a5bcc1853a66f5c79ff /src/lib
parentfeat(upcoming): move to dedicated section (diff)
downloaddue.moe-07acfb05dcb902707594f14c318e9ea774ba8145.tar.xz
due.moe-07acfb05dcb902707594f14c318e9ea774ba8145.zip
feat(wrapped): optional reread filter
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/AniList/media.ts3
-rw-r--r--src/lib/Tools/Wrapped.svelte16
2 files changed, 13 insertions, 6 deletions
diff --git a/src/lib/AniList/media.ts b/src/lib/AniList/media.ts
index 8e8f8fb5..7ba52589 100644
--- a/src/lib/AniList/media.ts
+++ b/src/lib/AniList/media.ts
@@ -42,6 +42,7 @@ export interface Media {
progressVolumes: number;
status: 'CURRENT' | 'PLANNING' | 'COMPLETED' | 'DROPPED' | 'PAUSED' | 'REPEATING';
score: number;
+ repeat: number;
startedAt: {
year: number;
};
@@ -91,7 +92,7 @@ const collectionQueryTemplate = (type: Type, userId: number, includeCompleted: b
title { romaji english native }
nextAiringEpisode { episode timeUntilAiring }
mediaListEntry {
- progress progressVolumes status
+ progress progressVolumes status repeat
score(format: POINT_100) startedAt { year }
}
startDate { year }
diff --git a/src/lib/Tools/Wrapped.svelte b/src/lib/Tools/Wrapped.svelte
index b9b3a1c8..56099af9 100644
--- a/src/lib/Tools/Wrapped.svelte
+++ b/src/lib/Tools/Wrapped.svelte
@@ -27,10 +27,12 @@
let watermark = false;
let includeMusic = false;
let includeSpecials = false;
+ let includeRepeats = false;
$: {
includeMusic = includeMusic;
includeSpecials = includeSpecials;
+ includeRepeats = includeRepeats;
update().then(() => {});
}
@@ -68,7 +70,8 @@
(item, index, self) =>
self.findIndex((itemToCompare) => itemToCompare.id === item.id) === index &&
item.mediaListEntry?.startedAt.year === currentYear &&
- (includeMusic ? true : item.format !== 'MUSIC')
+ (includeMusic ? true : item.format !== 'MUSIC') &&
+ (includeRepeats ? true : item.mediaListEntry?.repeat === 0)
)
.sort((a, b) => {
if (a.mediaListEntry?.score === undefined) {
@@ -93,7 +96,8 @@
.filter(
(item, index, self) =>
self.findIndex((itemToCompare) => itemToCompare.id === item.id) === index &&
- item.mediaListEntry?.startedAt.year === currentYear
+ item.mediaListEntry?.startedAt.year === currentYear &&
+ (includeRepeats ? true : item.mediaListEntry?.repeat === 0)
)
.sort((a, b) => {
if (a.mediaListEntry?.score === undefined) {
@@ -105,15 +109,16 @@
}
});
+ episodes = 0;
+
for (const media of animeList) {
episodes += media.mediaListEntry?.progress || 0;
}
};
/* eslint-disable @typescript-eslint/no-explicit-any */
- const year = (statistic: { startYears: any }) => {
- return statistic.startYears.find((y: { startYear: number }) => y.startYear === 2023);
- };
+ const year = (statistic: { startYears: any }) =>
+ statistic.startYears.find((y: { startYear: number }) => y.startYear === 2023);
const screenshot = async (dark = false) => {
let element = document.querySelector('.categories-grid') as HTMLElement;
@@ -333,6 +338,7 @@
<input type="checkbox" bind:checked={watermark} /> Enable watermark<br />
<input type="checkbox" bind:checked={transparency} /> Enable background transparency<br />
<input type="checkbox" bind:checked={includeMusic} /> Include music<br />
+ <input type="checkbox" bind:checked={includeRepeats} /> Include rewatches & rereads<br />
<input type="checkbox" bind:checked={includeSpecials} /> Include specials and OVAs<br />
<input type="checkbox" bind:checked={abbreviateTitles} /> Fit long titles<br />
{#if abbreviateTitles}