aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/routes/api/badges/+server.ts13
-rw-r--r--src/routes/user/[user]/badges/+page.svelte34
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>