Compare commits

..

No commits in common. "90f8f501664bb3a35e004ed635c2398784609d84" and "dea57e6b28024fc1a13b2dc3275ac5f4304f99f1" have entirely different histories.

7 changed files with 32 additions and 52 deletions

View File

@ -3,7 +3,7 @@ import { collectGenres } from "@/lib/genres";
import { GenreTabs } from "@/components/GenreTabs";
import type { Metadata } from "next";
export const revalidate = 300;
export const dynamic = "force-dynamic";
export const metadata: Metadata = {
title: "Genres",

View File

@ -1,5 +1,4 @@
import { notFound } from "next/navigation";
import { unstable_cache } from "next/cache";
import { prisma } from "@/lib/db";
import { PageReader } from "@/components/PageReader";
import { encodeId } from "@/lib/hashids";
@ -10,32 +9,6 @@ type Props = {
searchParams: Promise<{ resume?: string }>;
};
const getMangaForReader = unstable_cache(
async (slug: string) =>
prisma.manga.findUnique({
where: { slug },
include: {
chapters: {
orderBy: { number: "asc" },
include: { _count: { select: { pages: true } } },
},
},
}),
["reader-manga"],
{ revalidate: 300 }
);
const getChapterPageMeta = unstable_cache(
async (slug: string, chapterNum: number) =>
prisma.page.findMany({
where: { chapter: { number: chapterNum, manga: { slug } } },
orderBy: { number: "asc" },
select: { number: true, width: true, height: true },
}),
["reader-chapter-meta"],
{ revalidate: 3600 }
);
export async function generateMetadata({
params,
}: {
@ -45,7 +18,7 @@ export async function generateMetadata({
const chapterNum = parseInt(chapter, 10);
if (isNaN(chapterNum)) return { title: "Not Found" };
const manga = await getMangaForReader(slug);
const manga = await prisma.manga.findUnique({ where: { slug } });
if (!manga) return { title: "Not Found" };
return {
@ -64,8 +37,22 @@ export default async function ChapterReaderPage({
if (isNaN(chapterNum)) notFound();
const [manga, initialChapterMeta] = await Promise.all([
getMangaForReader(slug),
getChapterPageMeta(slug, chapterNum),
prisma.manga.findUnique({
where: { slug },
include: {
chapters: {
orderBy: { number: "asc" },
include: {
_count: { select: { pages: true } },
},
},
},
}),
prisma.page.findMany({
where: { chapter: { number: chapterNum, manga: { slug } } },
orderBy: { number: "asc" },
select: { number: true, width: true, height: true },
}),
]);
if (!manga) notFound();

View File

@ -5,8 +5,6 @@ import { ChapterList } from "@/components/ChapterList";
import { ReadingProgressButton } from "@/components/ReadingProgressButton";
import type { Metadata } from "next";
export const revalidate = 300;
type Props = {
params: Promise<{ slug: string }>;
};

View File

@ -3,7 +3,7 @@ import { collectGenres } from "@/lib/genres";
import { TrendingCarousel } from "@/components/TrendingCarousel";
import { GenreTabs } from "@/components/GenreTabs";
export const revalidate = 300;
export const dynamic = "force-dynamic";
export default async function Home() {
const manga = await prisma.manga.findMany({

View File

@ -1,4 +1,3 @@
import { unstable_cache } from "next/cache";
import { prisma } from "@/lib/db";
import { MangaGrid } from "@/components/MangaGrid";
import type { Metadata } from "next";
@ -11,23 +10,19 @@ type Props = {
searchParams: Promise<{ q?: string }>;
};
const searchManga = unstable_cache(
async (q: string) =>
prisma.manga.findMany({
where: {
status: "PUBLISHED",
title: { contains: q, mode: "insensitive" },
},
orderBy: { title: "asc" },
include: { _count: { select: { chapters: true } } },
}),
["search-manga"],
{ revalidate: 60 }
);
export default async function SearchPage({ searchParams }: Props) {
const { q } = await searchParams;
const manga = q ? await searchManga(q) : [];
const manga = q
? await prisma.manga.findMany({
where: {
status: "PUBLISHED",
title: { contains: q, mode: "insensitive" },
},
orderBy: { title: "asc" },
include: { _count: { select: { chapters: true } } },
})
: [];
return (
<div className="max-w-7xl mx-auto px-4 py-6">

View File

@ -1,7 +1,7 @@
import type { MetadataRoute } from "next";
import { prisma } from "@/lib/db";
export const revalidate = 3600;
export const dynamic = "force-dynamic";
export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
const manga = await prisma.manga.findMany({

View File

@ -659,7 +659,7 @@ export function PageReader({
src={url}
alt={`Page ${p.number}`}
fetchPriority={isVisible ? "high" : "low"}
className="absolute inset-0 w-full h-full object-contain [-webkit-touch-callout:none]"
className="w-full h-auto block [-webkit-touch-callout:none]"
draggable={false}
onError={() => {
setImages((prev) => {