From d210d464ac22e4dcbe9c19d18c46ef3e2e10147f Mon Sep 17 00:00:00 2001 From: Fuwn Date: Sun, 14 Jan 2024 22:19:59 -0800 Subject: feat(tools): likes --- src/lib/AniList/activity.ts | 25 ++++++++++++++++++++ src/lib/AniList/forum.ts | 16 +++++++++++++ src/lib/Tools/InputTemplate.svelte | 9 +++++++ src/lib/Tools/Likes.svelte | 46 ++++++++++++++++++++++++++++++++++++ src/lib/Tools/Picker.svelte | 1 + src/lib/Tools/tools.ts | 5 ++++ src/routes/tools/[tool]/+page.svelte | 3 +++ 7 files changed, 105 insertions(+) create mode 100644 src/lib/Tools/Likes.svelte (limited to 'src') diff --git a/src/lib/AniList/activity.ts b/src/lib/AniList/activity.ts index 926e8fe6..5eafcf2c 100644 --- a/src/lib/AniList/activity.ts +++ b/src/lib/AniList/activity.ts @@ -1,4 +1,5 @@ import { database } from '$lib/Database/activities'; +import type { User } from './follow'; import type { AniListAuthorisation, UserIdentity } from './identity'; export interface ActivityHistoryEntry { @@ -251,3 +252,27 @@ export const fullActivityHistory = async ( return fullLocalActivityHistory; }; + +export const activityLikes = async (id: number): Promise[]> => { + const activityResponse = await ( + await fetch('https://graphql.anilist.co', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Accept: 'application/json' + }, + body: JSON.stringify({ + query: `{ + Activity(id: ${id}) { + __typename + ... on TextActivity { likes { name } } + ... on ListActivity { likes { name } } + ... on MessageActivity { likes { name } } + } + }` + }) + }) + ).json(); + + return activityResponse['data']['Activity']['likes']; +}; diff --git a/src/lib/AniList/forum.ts b/src/lib/AniList/forum.ts index e13528b5..46d569b4 100644 --- a/src/lib/AniList/forum.ts +++ b/src/lib/AniList/forum.ts @@ -1,3 +1,4 @@ +import type { User } from './follow'; import { user } from './user'; export interface Thread { @@ -57,3 +58,18 @@ export const threads = async (username: string): Promise => { return allThreads; }; + +export const threadLikes = async (id: number): Promise[]> => { + const activityResponse = await ( + await fetch('https://graphql.anilist.co', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Accept: 'application/json' + }, + body: JSON.stringify({ query: `{ Thread(id: ${id}) { likes { name } } }` }) + }) + ).json(); + + return activityResponse['data']['Thread']['likes']; +}; diff --git a/src/lib/Tools/InputTemplate.svelte b/src/lib/Tools/InputTemplate.svelte index d0e37f98..42eb695d 100644 --- a/src/lib/Tools/InputTemplate.svelte +++ b/src/lib/Tools/InputTemplate.svelte @@ -1,6 +1,7 @@ + + + {#if submission.match(/https:\/\/anilist.co\/(activity|forum\/thread)\/\d+/)} + {#await likesPromise} + Loading {submissionType} ... 50% + {:then likes} + {#if likes && likes.length > 0} + + {:else} + No likes were found for that {submissionType}. + {/if} + {:catch} + + {/await} + {:else} + Please enter a valid Activity or Thread URL. + {/if} + diff --git a/src/lib/Tools/Picker.svelte b/src/lib/Tools/Picker.svelte index 6ead9624..5276e023 100644 --- a/src/lib/Tools/Picker.svelte +++ b/src/lib/Tools/Picker.svelte @@ -19,6 +19,7 @@ + diff --git a/src/lib/Tools/tools.ts b/src/lib/Tools/tools.ts index c0e499b2..96aaeb47 100644 --- a/src/lib/Tools/tools.ts +++ b/src/lib/Tools/tools.ts @@ -31,6 +31,11 @@ export const tools: { [key: string]: { name: string; description?: string; id: s description: 'Find a random follower of any given user', id: 'random_follower' }, + likes: { + name: 'Likes', + description: 'Get All Likes of an Activity or Forum Thread', + id: 'likes' + }, dump_profile: { name: 'Dump Profile', description: "Dump a user's profile to JSON", diff --git a/src/routes/tools/[tool]/+page.svelte b/src/routes/tools/[tool]/+page.svelte index 967283c1..adcd6442 100644 --- a/src/routes/tools/[tool]/+page.svelte +++ b/src/routes/tools/[tool]/+page.svelte @@ -12,6 +12,7 @@ import { onMount } from 'svelte'; import { goto } from '$app/navigation'; import Picker from '$lib/Tools/Picker.svelte'; + import Likes from '$lib/Tools/Likes.svelte'; export let data; @@ -59,5 +60,7 @@ {:else if tool === 'dump_profile'} + {:else if tool === 'likes'} + {/if} {/if} -- cgit v1.2.3