aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorreal-zephex <[email protected]>2024-05-26 22:29:35 +0530
committerreal-zephex <[email protected]>2024-05-26 22:29:35 +0530
commit3da8e6263d1900571cc8565b19d1b383dfbbf631 (patch)
treec9aefb831b91e9f8c531d246be2cd88cd0af669a /src
parent🚀 feat(download): add download feature for movies (diff)
downloaddramalama-3da8e6263d1900571cc8565b19d1b383dfbbf631.tar.xz
dramalama-3da8e6263d1900571cc8565b19d1b383dfbbf631.zip
⚡️ perf(kdrama, anime): cache video links, replace next/image
Diffstat (limited to 'src')
-rw-r--r--src/app/anime/[id]/page.jsx4
-rw-r--r--src/app/anime/components/cacher.js4
-rw-r--r--src/app/anime/components/search_results.jsx11
-rw-r--r--src/app/anime/data-fetch/request.js2
-rw-r--r--src/app/anime/page.jsx11
-rw-r--r--src/app/kdrama/[id]/page.jsx3
-rw-r--r--src/app/kdrama/components/cacher.js21
-rw-r--r--src/app/kdrama/components/requests.js6
-rw-r--r--src/app/kdrama/components/searchFormatter.jsx12
-rw-r--r--src/app/kdrama/page.jsx13
-rw-r--r--src/app/movies/components/searchFormatter.jsx11
-rw-r--r--src/app/movies/page.jsx11
-rw-r--r--src/app/page.jsx12
13 files changed, 60 insertions, 61 deletions
diff --git a/src/app/anime/[id]/page.jsx b/src/app/anime/[id]/page.jsx
index f8cbe0c..0e62310 100644
--- a/src/app/anime/[id]/page.jsx
+++ b/src/app/anime/[id]/page.jsx
@@ -2,13 +2,15 @@ import { Chip, Image } from "@nextui-org/react";
import { anime_info } from "../data-fetch/request";
import DescriptionTabs from "../components/infoTabs";
-
import EpisodesContainer from "../components/vidButtonContainer";
+import { preFetchVideoLinks } from "../components/cacher";
const AnimeInfoHomepage = async ({ params }) => {
const id = params.id;
const data = await anime_info(id);
+ preFetchVideoLinks(data.episodes);
+
return (
<section className="pt-12 lg:w-9/12 m-auto">
<div className="flex items-center justify-center lg:justify-start md:justify-start">
diff --git a/src/app/anime/components/cacher.js b/src/app/anime/components/cacher.js
index 164dafd..ae9b10b 100644
--- a/src/app/anime/components/cacher.js
+++ b/src/app/anime/components/cacher.js
@@ -1,6 +1,6 @@
"use server";
-import { anime_info } from "../data-fetch/request";
+import { anime_info, video_url } from "../data-fetch/request";
export async function preFetchAnimeInfo(data) {
try {
@@ -18,7 +18,7 @@ export async function preFetchAnimeInfo(data) {
export async function preFetchVideoLinks(data) {
try {
const fetchPromises = data.map(async (element) => {
- await fetch(watch_url(element.id), { next: { revalidate: 21600 } });
+ await video_url(element.id);
});
await Promise.all(fetchPromises);
diff --git a/src/app/anime/components/search_results.jsx b/src/app/anime/components/search_results.jsx
index 3097a96..2018680 100644
--- a/src/app/anime/components/search_results.jsx
+++ b/src/app/anime/components/search_results.jsx
@@ -2,8 +2,8 @@ import { search_results } from "../data-fetch/request";
import { preFetchAnimeInfo } from "./cacher";
import styles from "../../page.module.css";
-import { Card, CardHeader, CardBody, Image, Link } from "@nextui-org/react";
-import NextImage from "next/image";
+import { Card, CardHeader, CardBody, Link } from "@nextui-org/react";
+import Image from "next/image";
const SearchResults = async (title) => {
const data = await search_results(title);
@@ -25,14 +25,11 @@ const SearchResults = async (title) => {
<Card className="overflow-hidden" isPressable>
<CardBody>
<Image
- as={NextImage}
- isBlurred
- alt="Anime Poster"
+ alt="Searched Anime Poster"
src={item.image}
width={190}
height={120}
- shadow="lg"
- className="h-64"
+ className="rounded-md h-64"
priority
/>
</CardBody>
diff --git a/src/app/anime/data-fetch/request.js b/src/app/anime/data-fetch/request.js
index 3d22b7a..579f693 100644
--- a/src/app/anime/data-fetch/request.js
+++ b/src/app/anime/data-fetch/request.js
@@ -47,7 +47,7 @@ export const anime_info = async (id) => {
export const video_url = async (episodeId) => {
const res = await fetch(watch_url(episodeId), {
- next: { revalidate: 21600 },
+ cache: "force-cache",
});
const data = await res.json();
return data;
diff --git a/src/app/anime/page.jsx b/src/app/anime/page.jsx
index a2d5777..ce5ca34 100644
--- a/src/app/anime/page.jsx
+++ b/src/app/anime/page.jsx
@@ -1,5 +1,5 @@
-import { Card, CardHeader, CardBody, Image, Link } from "@nextui-org/react";
-import NextImage from "next/image";
+import { Card, CardHeader, CardBody, Link } from "@nextui-org/react";
+import Image from "next/image";
import styles from "../page.module.css";
import { top_airing, recent, popular } from "./data-fetch/request";
@@ -38,14 +38,11 @@ const AnimeHomepage = async () => {
<Card className="overflow-visible " isPressable>
<CardBody>
<Image
- as={NextImage}
- isBlurred
alt="Anime Poster"
- src={item.image}
+ src={`https://sup-proxy.zephex0-f6c.workers.dev/api-content?url=${item.image}`}
width={270}
height={160}
- className="h-60 overflow-hidden"
- shadow="lg"
+ className="h-60 rounded-md overflow-hidden"
priority
/>
</CardBody>
diff --git a/src/app/kdrama/[id]/page.jsx b/src/app/kdrama/[id]/page.jsx
index d94810e..90acded 100644
--- a/src/app/kdrama/[id]/page.jsx
+++ b/src/app/kdrama/[id]/page.jsx
@@ -2,11 +2,14 @@ import { Chip, Image } from "@nextui-org/react";
import DescriptionTabs from "../components/infoTabs";
import { dramaInfo } from "../components/requests";
import EpisodesContainer from "../components/episodesContainer";
+import { PreFetchVideoLinks } from "../components/cacher";
export default async function DramaInfo({ params }) {
const id = decodeURIComponent(params.id);
const data = await dramaInfo(id);
+ PreFetchVideoLinks(data.episodes, data.id);
+
return (
<section className="pt-12 lg:w-9/12 m-auto">
<div className="flex items-center justify-center lg:justify-start md:justify-start">
diff --git a/src/app/kdrama/components/cacher.js b/src/app/kdrama/components/cacher.js
index fdfa272..476ed95 100644
--- a/src/app/kdrama/components/cacher.js
+++ b/src/app/kdrama/components/cacher.js
@@ -1,10 +1,14 @@
"use server";
+import { drama_info_url } from "../../../../utils/kdrama_urls";
+import { videoLink } from "./requests";
+
export async function PreFetchKdramaInfo(data) {
try {
const fetchPromises = data.results.map(async (element) => {
- const link = `https://consumet-jade.vercel.app/movies/dramacool/info?id=${element.id}`;
- await fetch(link, { next: { revalidate: 21600 } });
+ await fetch(drama_info_url(element.id), {
+ next: { revalidate: 21600 },
+ });
});
await Promise.all(fetchPromises);
@@ -13,3 +17,16 @@ export async function PreFetchKdramaInfo(data) {
console.error("Error occurred while pre-fetching video links:", error);
}
}
+
+export const PreFetchVideoLinks = async (data, mediaID) => {
+ try {
+ const fetchPromise = data.map(async (element) => {
+ await videoLink(element.id, mediaID);
+ });
+
+ await Promise.all(fetchPromise);
+ console.log("Kdrama video links pre fetched successfully");
+ } catch (error) {
+ console.error("Error occured while fetching video links");
+ }
+};
diff --git a/src/app/kdrama/components/requests.js b/src/app/kdrama/components/requests.js
index 5609d79..1c82b79 100644
--- a/src/app/kdrama/components/requests.js
+++ b/src/app/kdrama/components/requests.js
@@ -36,9 +36,9 @@ export const dramaInfo = async (id) => {
export const videoLink = async (epiId, mediaId) => {
const res = await fetch(videoURL(epiId, mediaId), {
- next: { revalidate: 21600 },
+ cache: "force-cache",
});
const data = await res.json();
- const videoLink = data.sources[0].url;
- return videoLink;
+ const vidLink = await data.sources[0].url;
+ return vidLink;
};
diff --git a/src/app/kdrama/components/searchFormatter.jsx b/src/app/kdrama/components/searchFormatter.jsx
index bac2549..a9e2f42 100644
--- a/src/app/kdrama/components/searchFormatter.jsx
+++ b/src/app/kdrama/components/searchFormatter.jsx
@@ -1,5 +1,5 @@
-import { Card, CardHeader, CardBody, Image, Link } from "@nextui-org/react";
-import NextImage from "next/image";
+import { Card, CardHeader, CardBody, Link } from "@nextui-org/react";
+import Image from "next/image";
import styles from "../../page.module.css";
@@ -16,18 +16,16 @@ const SearchedDataFormatter = async (data) => {
href={`/kdrama/${encodeURIComponent(item.id)}`}
aria-label="anime redirection links"
className="flex flex-col items-center mx-1"
+ title={item.title}
>
<Card className="overflow-hidden" isPressable>
<CardBody>
<Image
- as={NextImage}
- isBlurred
- alt="Anime Poster"
+ alt="Searched Kdrama Poster"
src={item.image}
width={185}
height={120}
- shadow="lg"
- className="h-64"
+ className="rounded-md h-64"
priority
/>
</CardBody>
diff --git a/src/app/kdrama/page.jsx b/src/app/kdrama/page.jsx
index d5e2855..afcb8a2 100644
--- a/src/app/kdrama/page.jsx
+++ b/src/app/kdrama/page.jsx
@@ -1,5 +1,5 @@
-import { Card, CardHeader, CardBody, Image, Link } from "@nextui-org/react";
-import NextImage from "next/image";
+import { Card, CardHeader, CardBody, Link } from "@nextui-org/react";
+import Image from "next/image";
import { DramaDataFetcher } from "./components/requests";
import styles from "../page.module.css";
@@ -37,14 +37,11 @@ const KdramaHomepage = async () => {
<Card className="overflow-visible " isPressable>
<CardBody>
<Image
- as={NextImage}
- isBlurred
- alt="Anime Poster"
- src={item.image}
+ alt="Kdrama Poster"
+ src={`https://sup-proxy.zephex0-f6c.workers.dev/api-content?url=${item.image}`}
width={270}
height={160}
- className="h-60 overflow-hidden"
- shadow="lg"
+ className="h-60 rounded-md overflow-hidden"
priority
/>
</CardBody>
diff --git a/src/app/movies/components/searchFormatter.jsx b/src/app/movies/components/searchFormatter.jsx
index 47b684f..dc6afb2 100644
--- a/src/app/movies/components/searchFormatter.jsx
+++ b/src/app/movies/components/searchFormatter.jsx
@@ -1,5 +1,5 @@
-import { Card, CardHeader, CardBody, Image, Link } from "@nextui-org/react";
-import NextImage from "next/image";
+import { Card, CardHeader, CardBody, Link } from "@nextui-org/react";
+import Image from "next/image";
import styles from "../../page.module.css";
@@ -21,14 +21,11 @@ const MovieSearchFormatter = async (data) => {
<Card className="overflow-hidden" isPressable>
<CardBody>
<Image
- as={NextImage}
- isBlurred
- alt="Anime Poster"
+ alt="Searched Movie Poster"
src={`https://sup-proxy.zephex0-f6c.workers.dev/api-content?url=https://image.tmdb.org/t/p/original${item.poster_path}`}
width={190}
height={120}
- shadow="lg"
- className="h-64"
+ className="rounded-md h-64"
priority
/>
</CardBody>
diff --git a/src/app/movies/page.jsx b/src/app/movies/page.jsx
index 66ae888..417df28 100644
--- a/src/app/movies/page.jsx
+++ b/src/app/movies/page.jsx
@@ -1,5 +1,5 @@
-import { Card, CardHeader, CardBody, Image, Link } from "@nextui-org/react";
-import NextImage from "next/image";
+import { Card, CardHeader, CardBody, Link } from "@nextui-org/react";
+import Image from "next/image";
import MovieSearchBar from "./components/search";
import { MovieHomepageDataFetcher } from "./components/requestsHandler";
@@ -36,14 +36,11 @@ export default async function MovieHomepage() {
<Card className="overflow-visible " isPressable>
<CardBody>
<Image
- as={NextImage}
- isBlurred
- alt="Anime Poster"
+ alt="Movie Poster"
src={`https://sup-proxy.zephex0-f6c.workers.dev/api-content?url=https://image.tmdb.org/t/p/original${item.poster_path}`}
width={270}
height={180}
- className="h-64 overflow-hidden"
- shadow="lg"
+ className="h-64 rounded-md overflow-hidden"
priority
/>
</CardBody>
diff --git a/src/app/page.jsx b/src/app/page.jsx
index 4c99113..6a8e0aa 100644
--- a/src/app/page.jsx
+++ b/src/app/page.jsx
@@ -1,11 +1,5 @@
-import {
- Card,
- CardHeader,
- CardBody,
- Divider,
- Link,
- Image,
-} from "@nextui-org/react";
+import { Card, CardHeader, CardBody, Divider, Link } from "@nextui-org/react";
+import Image from "next/image";
export default async function Home() {
const homePageCards = (title, message, url) => {
@@ -17,8 +11,8 @@ export default async function Home() {
alt="nextui logo"
height={40}
width={40}
- radius="sm"
src={url}
+ className="rounded-md"
/>
<div className="flex flex-col">
<p className="text-md">{title}</p>