diff --git a/next.config.ts b/next.config.ts index 9b88254..9736afa 100644 --- a/next.config.ts +++ b/next.config.ts @@ -4,7 +4,34 @@ import type { NextConfig } from "next"; const nextConfig: NextConfig = { output: "standalone", images: { - unoptimized: true, + localPatterns: [ + { + pathname: "/mii/*/image", + }, + { + pathname: "/profile/*/picture", + }, + { + pathname: "/tutorial/**", + }, + { + pathname: "/guest.png", + }, + ], + remotePatterns: [ + { + hostname: "avatars.githubusercontent.com", + }, + { + hostname: "cdn.discordapp.com", + }, + { + hostname: "studio.mii.nintendo.com", + }, + { + hostname: "*.googleusercontent.com", + }, + ], }, }; diff --git a/src/app/api/mii/[id]/edit/route.ts b/src/app/api/mii/[id]/edit/route.ts index cb91818..e27d251 100644 --- a/src/app/api/mii/[id]/edit/route.ts +++ b/src/app/api/mii/[id]/edit/route.ts @@ -163,7 +163,7 @@ export async function PATCH(request: NextRequest, { params }: { params: Promise< await Promise.all( images.map(async (image, index) => { const buffer = Buffer.from(await image.arrayBuffer()); - const pngBuffer = await sharp(buffer).resize({ height: 800, fit: "inside", withoutEnlargement: true }).png({ quality: 85 }).toBuffer(); + const pngBuffer = await sharp(buffer).png({ quality: 85 }).toBuffer(); const fileLocation = path.join(miiUploadsDirectory, `image${index}.png`); await fs.writeFile(fileLocation, pngBuffer); diff --git a/src/app/api/submit/route.ts b/src/app/api/submit/route.ts index dc07a9e..136477f 100644 --- a/src/app/api/submit/route.ts +++ b/src/app/api/submit/route.ts @@ -313,7 +313,7 @@ export async function POST(request: NextRequest) { await Promise.all( customImages.map(async (image, index) => { const buffer = Buffer.from(await image.arrayBuffer()); - const pngBuffer = await sharp(buffer).resize({ height: 800, fit: "inside", withoutEnlargement: true }).png({ quality: 85 }).toBuffer(); + const pngBuffer = await sharp(buffer).png({ quality: 85 }).toBuffer(); const fileLocation = path.join(miiUploadsDirectory, `image${index}.png`); await fs.writeFile(fileLocation, pngBuffer); diff --git a/src/app/mii/[id]/image/route.ts b/src/app/mii/[id]/image/route.ts index 1dd6b05..406991e 100644 --- a/src/app/mii/[id]/image/route.ts +++ b/src/app/mii/[id]/image/route.ts @@ -19,7 +19,7 @@ const searchParamsSchema = z.object({ }); export async function GET(request: NextRequest, { params }: { params: Promise<{ id: string }> }) { - const rateLimit = new RateLimit(request, 20000, "/mii/image"); + const rateLimit = new RateLimit(request, 200, "/mii/image"); const check = await rateLimit.handle(); if (check) return check; @@ -110,6 +110,6 @@ export async function GET(request: NextRequest, { params }: { params: Promise<{ return rateLimit.sendResponse(buffer, 200, { "Content-Type": "image/png", "X-Robots-Tag": "noindex, noimageindex, nofollow", - "Cache-Control": "public, max-age=31536000, immutable", + "Cache-Control": "no-store", }); } diff --git a/src/components/mii/author-buttons.tsx b/src/components/mii/author-buttons.tsx index 1a9414b..a237ddd 100644 --- a/src/components/mii/author-buttons.tsx +++ b/src/components/mii/author-buttons.tsx @@ -22,7 +22,7 @@ interface Props { export default function AuthorButtons({ mii }: Props) { const session = useSession(); - if (!session.data || (Number(session.data.user?.id) !== mii.userId && Number(session.data.user?.id) !== Number(process.env.NEXT_PUBLIC_ADMIN_USER_ID))) + if (!session.data || Number(session.data.user?.id) !== mii.userId || Number(session.data.user?.id) !== Number(process.env.NEXT_PUBLIC_ADMIN_USER_ID)) return null; return ( diff --git a/src/components/mii/list/filter-menu.tsx b/src/components/mii/list/filter-menu.tsx index eb17a72..8778bd6 100644 --- a/src/components/mii/list/filter-menu.tsx +++ b/src/components/mii/list/filter-menu.tsx @@ -121,13 +121,18 @@ export default function FilterMenu() { <>

- Face Paint + Makeup
)} +
+
+ Other +
+
)} diff --git a/src/components/mii/list/index.tsx b/src/components/mii/list/index.tsx index 6ac9a1a..0a9a60e 100644 --- a/src/components/mii/list/index.tsx +++ b/src/components/mii/list/index.tsx @@ -1,4 +1,7 @@ +import Link from "next/link"; + import { Prisma } from "@prisma/client"; +import { Icon } from "@iconify/react"; import crypto from "crypto"; import seedrandom from "seedrandom"; @@ -8,6 +11,9 @@ import { auth } from "@/lib/auth"; import { prisma } from "@/lib/prisma"; import SortSelect from "./sort-select"; +import Carousel from "../../carousel"; +import LikeButton from "../../like-button"; +import DeleteMiiButton from "../delete-mii-button"; import Pagination from "./pagination"; import FilterMenu from "./filter-menu"; import MiiGrid from "./mii-grid"; @@ -55,7 +61,7 @@ export default async function MiiList({ searchParams, userId, inLikesPage }: Pro // Makeup ...(makeup && { makeup: { equals: makeup } }), // Quarantined - ...(!quarantined && !userId && { quarantined: false }), + ...(!quarantined && { quarantined: false }), // Profiles ...(userId && { userId }), }; @@ -183,7 +189,7 @@ export default async function MiiList({ searchParams, userId, inLikesPage }: Pro - + ); diff --git a/src/components/mii/list/makeup-select.tsx b/src/components/mii/list/makeup-select.tsx index 53c210a..80ae9ee 100644 --- a/src/components/mii/list/makeup-select.tsx +++ b/src/components/mii/list/makeup-select.tsx @@ -35,39 +35,39 @@ export default function MakeupSelect() { {/* Full Makeup */} {/* Partial Makeup */} {/* No Makeup */} diff --git a/src/components/mii/list/other-filters.tsx b/src/components/mii/list/other-filters.tsx index fac98b2..6ccec92 100644 --- a/src/components/mii/list/other-filters.tsx +++ b/src/components/mii/list/other-filters.tsx @@ -1,13 +1,13 @@ "use client"; +import { Icon } from "@iconify/react"; import { MiiPlatform } from "@prisma/client"; -import { usePathname, useRouter, useSearchParams } from "next/navigation"; +import { useRouter, useSearchParams } from "next/navigation"; import { ChangeEvent, useState, useTransition } from "react"; export default function OtherFilters() { const router = useRouter(); const searchParams = useSearchParams(); - const pathname = usePathname(); const [, startTransition] = useTransition(); const platform = (searchParams.get("platform") as MiiPlatform) || undefined; @@ -48,35 +48,22 @@ export default function OtherFilters() { }); }; - const showAllowCopying = platform !== "SWITCH"; - const showQuarantined = !pathname.startsWith("/profile"); - - if (!showAllowCopying && !showQuarantined) return null; - return ( <> -
-
- Other -
-
- - {showAllowCopying && ( -
+ {platform === "THREE_DS" && ( +
)} - {showQuarantined && ( -
- - -
- )} +
+ + +
); } diff --git a/src/components/submit-form/edit-form.tsx b/src/components/submit-form/edit-form.tsx index 71794e3..15cf51c 100644 --- a/src/components/submit-form/edit-form.tsx +++ b/src/components/submit-form/edit-form.tsx @@ -268,7 +268,7 @@ export default function EditForm({ mii, likes }: Props) { <>
@@ -276,8 +276,8 @@ export default function EditForm({ mii, likes }: Props) {