diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/routes/api/badges/+server.ts | 13 | ||||
| -rw-r--r-- | src/routes/user/[user]/badges/+page.svelte | 34 |
2 files changed, 36 insertions, 11 deletions
diff --git a/src/routes/api/badges/+server.ts b/src/routes/api/badges/+server.ts index 4b52a17b..dedb84b3 100644 --- a/src/routes/api/badges/+server.ts +++ b/src/routes/api/badges/+server.ts @@ -1,5 +1,5 @@ import { userIdentity } from '$lib/AniList/identity'; -import { removeUserBadge, updateUserBadge } from '$lib/Database/badges'; +import { removeUserBadge, updateUserBadge, type Badge } from '$lib/Database/badges'; import { getUserBadges } from '$lib/Database/badges'; import { addUserBadge } from '$lib/Database/badges'; @@ -34,7 +34,7 @@ export const DELETE = async ({ url, cookies }) => { return await badges(identity.id); }; -export const PUT = async ({ cookies, url }) => { +export const PUT = async ({ cookies, url, request }) => { const userCookie = cookies.get('user'); if (!userCookie) return unauthorised; @@ -46,6 +46,15 @@ export const PUT = async ({ cookies, url }) => { accessToken: user['access_token'], refreshToken: user['refresh_token'] }); + + if (url.searchParams.get('import') || undefined) { + await Promise.all( + (await request.json()).map(async (badge: Badge) => await addUserBadge(identity.id, badge)) + ); + + return await badges(identity.id); + } + const badge = { post: url.searchParams.get('post') || undefined, image: url.searchParams.get('image') || undefined, diff --git a/src/routes/user/[user]/badges/+page.svelte b/src/routes/user/[user]/badges/+page.svelte index 523f9030..96c12e5a 100644 --- a/src/routes/user/[user]/badges/+page.svelte +++ b/src/routes/user/[user]/badges/+page.svelte @@ -377,15 +377,26 @@ }; const importBadges = () => - importImages?.forEach((image) => { - badgesPromise = fetch( - `/api/badges?image=${encodeURIComponent(image.image)}&post=${encodeURIComponent( - image.link || '#' - )}${importCategory.length > 0 ? `&category=${encodeURIComponent(importCategory)}` : ''}`, - { - method: 'PUT' - } - ); + fetch( + `/api/badges?import=true + ${importCategory.length > 0 ? `&category=${encodeURIComponent(importCategory)}` : ''} + `, + { + method: 'PUT', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify( + importImages?.map((image) => ({ + image: image.image, + post: image.link || '#', + category: importCategory + })) + ) + } + ).then(() => { + importMode = false; + importImages = undefined; }); </script> @@ -723,6 +734,11 @@ <button on:click={() => importBadges()} class="button-lined no-shadow"> {$locale().user.badges.importMode.import} </button> + + <SettingHint lineBreak> + Please wait until import mode automatically disables after importing, otherwise you risk + skipping or duplicating badges. + </SettingHint> {/if} </div> </div> |