aboutsummaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorFuwn <[email protected]>2024-07-07 22:58:04 -0700
committerFuwn <[email protected]>2024-07-07 22:58:04 -0700
commite4246eacbffa15242de69fe0331cac6f1869e410 (patch)
tree47f2079ddb8cd1b53ca3c1b8bf6fab5641653a2b /src/lib
parentfeat(tools): sequel catcher (diff)
downloaddue.moe-e4246eacbffa15242de69fe0331cac6f1869e410.tar.xz
due.moe-e4246eacbffa15242de69fe0331cac6f1869e410.zip
refactor(SequelCatcher): tidy
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/Data/AniList/media.ts32
-rw-r--r--src/lib/Data/AniList/prequels.ts36
-rw-r--r--src/lib/Media/links.ts3
-rw-r--r--src/lib/Tools/SequelCatcher.svelte22
4 files changed, 39 insertions, 54 deletions
diff --git a/src/lib/Data/AniList/media.ts b/src/lib/Data/AniList/media.ts
index 89d6e339..3eb26de7 100644
--- a/src/lib/Data/AniList/media.ts
+++ b/src/lib/Data/AniList/media.ts
@@ -5,7 +5,7 @@ import manga from '$stores/manga';
import settings from '$stores/settings';
import lastPruneTimes from '$stores/lastPruneTimes';
import { options as getOptions, type Options } from '$lib/Notification/options';
-import type { PrequelRelations } from './prequels';
+import type { PrequelRelation, PrequelRelations } from './prequels';
export enum Type {
Anime,
@@ -159,17 +159,9 @@ const collectionQueryTemplate = (type: Type, userId: number, options: Collection
edges {
relationType
node {
- id
- status
- title {
- english
- romaji
- }
- episodes
- mediaListEntry {
- status
- progress
- }
+ id status episodes
+ title { english romaji }
+ mediaListEntry { status progress }
coverImage { extraLarge }
}
}
@@ -479,7 +471,7 @@ export const mediaCover = async (id: number) =>
export interface UnwatchedRelationMap {
media: Media;
- unwatchedRelations: Media[];
+ unwatchedRelations: PrequelRelation[];
}
export const filterRelations = (media: Media[]) => {
@@ -487,7 +479,7 @@ export const filterRelations = (media: Media[]) => {
for (const mediaItem of media) {
const sequels = mediaItem.relations.edges.filter(
- (relation) =>
+ (relation: PrequelRelation) =>
relation.relationType === 'SEQUEL' &&
!media.some((mediaItem) => mediaItem.id === relation.node.id) &&
(relation.node.mediaListEntry
@@ -498,18 +490,10 @@ export const filterRelations = (media: Media[]) => {
relation.node.status !== 'CANCELLED'
);
- if (sequels) {
- const unwatchedRelations: Media[] = [];
-
- unwatchedRelations.push(...sequels);
-
- if (unwatchedRelations.length === 0) {
- continue;
- }
-
+ if (sequels.length > 0) {
unwatchedRelationsMap.push({
media: mediaItem,
- unwatchedRelations
+ unwatchedRelations: sequels
});
}
}
diff --git a/src/lib/Data/AniList/prequels.ts b/src/lib/Data/AniList/prequels.ts
index f92cde26..e372500b 100644
--- a/src/lib/Data/AniList/prequels.ts
+++ b/src/lib/Data/AniList/prequels.ts
@@ -20,23 +20,27 @@ export interface MediaPrequel {
};
}
+export interface PrequelRelationNode {
+ id: number;
+ title: MediaTitle;
+ episodes: number;
+ status: MediaStatus;
+ mediaListEntry: {
+ status: MediaListEntryStatus;
+ progress: number;
+ };
+ coverImage: {
+ extraLarge: string;
+ };
+}
+
+export interface PrequelRelation {
+ relationType: string;
+ node: PrequelRelationNode;
+}
+
export interface PrequelRelations {
- edges: {
- relationType: string;
- node: {
- id: number;
- title: MediaTitle;
- episodes: number;
- status: MediaStatus;
- mediaListEntry: {
- status: MediaListEntryStatus;
- progress: number;
- };
- coverImage: {
- extraLarge: string;
- };
- };
- }[];
+ edges: PrequelRelation[];
}
interface PrequelsPage {
diff --git a/src/lib/Media/links.ts b/src/lib/Media/links.ts
index 3c55ba3a..85b696d9 100644
--- a/src/lib/Media/links.ts
+++ b/src/lib/Media/links.ts
@@ -1,7 +1,8 @@
import type { Media } from '$lib/Data/AniList/media';
+import type { PrequelRelationNode } from '$lib/Data/AniList/prequels';
export const outboundLink = (
- media: Media | null,
+ media: Media | PrequelRelationNode | null,
type: 'anime' | 'manga',
setting: 'anilist' | 'livechartme' | 'animeschedule' | 'myanimelist',
search = false,
diff --git a/src/lib/Tools/SequelCatcher.svelte b/src/lib/Tools/SequelCatcher.svelte
index df6c0d3a..4f783fab 100644
--- a/src/lib/Tools/SequelCatcher.svelte
+++ b/src/lib/Tools/SequelCatcher.svelte
@@ -1,11 +1,9 @@
<script lang="ts">
- import { type AniListAuthorisation } from '$lib/Data/AniList/identity';
+ import type { AniListAuthorisation } from '$lib/Data/AniList/identity';
import userIdentity from '$stores/identity';
import { filterRelations, type Media, mediaListCollection, Type } from '$lib/Data/AniList/media';
import LogInRestricted from '$lib/Error/LogInRestricted.svelte';
- import LinkedTooltip from '$lib/Tooltip/LinkedTooltip.svelte';
import anime from '$stores/anime';
-
import identity from '$stores/identity';
import { onMount } from 'svelte';
import lastPruneTimes from '$stores/lastPruneTimes';
@@ -62,14 +60,20 @@
<ul>
{#each filterRelations(mediaList) as { media, unwatchedRelations }}
- <a href={outboundLink(media, 'anime', $settings.displayOutboundLinksTo)}>
+ <a
+ href={outboundLink(media, 'anime', $settings.displayOutboundLinksTo)}
+ target="_blank"
+ >
<MediaTitleDisplay title={media.title} />
</a>
<ul>
{#each unwatchedRelations as relation}
<li>
- <a href={outboundLink(relation.node, 'anime', $settings.displayOutboundLinksTo)}>
+ <a
+ href={outboundLink(relation.node, 'anime', $settings.displayOutboundLinksTo)}
+ target="_blank"
+ >
<MediaTitleDisplay title={relation.node.title} />
</a>
</li>
@@ -102,11 +106,3 @@
</blockquote>
</div>
{/if}
-
-<style>
- .hint-toggle {
- box-shadow: rgba(0, 0, 11, 0.2) 0px 7px 29px 0px, 0 0 0 5px var(--base02);
- float: right;
- border-radius: 8px;
- }
-</style>