From b7e29a3d67e3e214ba1c958478092ee4075e8171 Mon Sep 17 00:00:00 2001 From: real-zephex Date: Thu, 4 Apr 2024 23:00:53 +0530 Subject: inmidst of rewriting the kdrama section. will complete it soon --- src/app/kdrama/components/popular.jsx | 42 +++++++++++++++++++++++++++++++++++ src/app/kdrama/components/recent.jsx | 42 +++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 src/app/kdrama/components/popular.jsx create mode 100644 src/app/kdrama/components/recent.jsx (limited to 'src/app/kdrama/components') diff --git a/src/app/kdrama/components/popular.jsx b/src/app/kdrama/components/popular.jsx new file mode 100644 index 0000000..d9126ec --- /dev/null +++ b/src/app/kdrama/components/popular.jsx @@ -0,0 +1,42 @@ +import styles from "../styles/popular.module.css"; +import Image from "next/image"; +import Link from "next/link"; + +export default async function PopularDramas() { + const popular = await getPopular(); + + return ( +
+

Popular Dramas

+ +
+ {popular && + popular.results.map((item, index) => ( + +
+ Drama Poster +

{item.title}

+
+ + ))} +
+
+ ); +} + +async function getPopular() { + const res = await fetch("https://dramacool-scraper.vercel.app/popular", { + next: { revalidate: 86400 }, + }); + const data = await res.json(); + return data; +} diff --git a/src/app/kdrama/components/recent.jsx b/src/app/kdrama/components/recent.jsx new file mode 100644 index 0000000..759e179 --- /dev/null +++ b/src/app/kdrama/components/recent.jsx @@ -0,0 +1,42 @@ +import styles from "../styles/popular.module.css"; +import Image from "next/image"; +import Link from "next/link"; + +export default async function RecentDramas() { + const popular = await getPopular(); + + return ( +
+

Recently Released

+ +
+ {popular && + popular.results.map((item, index) => ( + +
+ Drama Poster +

{item.title}

+
+ + ))} +
+
+ ); +} + +async function getPopular() { + const res = await fetch("https://dramacool-scraper.vercel.app/recent", { + next: { revalidate: 86400 }, + }); + const data = await res.json(); + return data; +} -- cgit v1.2.3 From 381a1cb5c14270d9bdc8cd56f17c75d79df231de Mon Sep 17 00:00:00 2001 From: real-zephex Date: Fri, 5 Apr 2024 09:57:47 +0530 Subject: added caching and video player --- src/app/kdrama/components/cacher.js | 8 ++++++++ src/app/kdrama/components/videoLink.js | 11 +++++++++++ 2 files changed, 19 insertions(+) create mode 100644 src/app/kdrama/components/cacher.js create mode 100644 src/app/kdrama/components/videoLink.js (limited to 'src/app/kdrama/components') diff --git a/src/app/kdrama/components/cacher.js b/src/app/kdrama/components/cacher.js new file mode 100644 index 0000000..3ef05be --- /dev/null +++ b/src/app/kdrama/components/cacher.js @@ -0,0 +1,8 @@ +// This file pre fetches all the videolinks and next js automatically caches them! + +export default async function VideoLinkCacher(data, dramaId) { + data.forEach(async (element) => { + const link = `https://consumet-api-di2e.onrender.com/movies/dramacool/watch?episodeId=${element.id}&mediaId=${dramaId}`; + await fetch(link, { cache: "force-cache" }); + }); +} diff --git a/src/app/kdrama/components/videoLink.js b/src/app/kdrama/components/videoLink.js new file mode 100644 index 0000000..fec016d --- /dev/null +++ b/src/app/kdrama/components/videoLink.js @@ -0,0 +1,11 @@ +"use server"; +export default async function getVideoLink(epiId, mediaId) { + let videoLink; + const res = await fetch( + `https://consumet-api-di2e.onrender.com/movies/dramacool/watch?episodeId=${epiId}&mediaId=${mediaId}`, + { cache: "force-cache" } + ); + const data = await res.json(); + videoLink = data.sources[0].url; + return videoLink; +} -- cgit v1.2.3 From 0c7581bb601b748bdb54ba9496b32a34f30c1abe Mon Sep 17 00:00:00 2001 From: real-zephex Date: Sat, 6 Apr 2024 15:31:11 +0530 Subject: added search functionality --- src/app/kdrama/components/cacher.js | 19 +++++++---- src/app/kdrama/components/search.jsx | 56 ++++++++++++++++++++++++++++++++ src/app/kdrama/components/searchQuery.js | 8 +++++ 3 files changed, 77 insertions(+), 6 deletions(-) create mode 100644 src/app/kdrama/components/search.jsx create mode 100644 src/app/kdrama/components/searchQuery.js (limited to 'src/app/kdrama/components') diff --git a/src/app/kdrama/components/cacher.js b/src/app/kdrama/components/cacher.js index 3ef05be..b04c932 100644 --- a/src/app/kdrama/components/cacher.js +++ b/src/app/kdrama/components/cacher.js @@ -1,8 +1,15 @@ -// This file pre fetches all the videolinks and next js automatically caches them! +// This function pre-fetches all the video links for a drama in the background -export default async function VideoLinkCacher(data, dramaId) { - data.forEach(async (element) => { - const link = `https://consumet-api-di2e.onrender.com/movies/dramacool/watch?episodeId=${element.id}&mediaId=${dramaId}`; - await fetch(link, { cache: "force-cache" }); - }); +export default async function PreFetchVideoLinks(data, dramaId) { + try { + const fetchPromises = data.map(async (element) => { + const link = `https://consumet-api-di2e.onrender.com/movies/dramacool/watch?episodeId=${element.id}&mediaId=${dramaId}`; + await fetch(link, { cache: "force-cache" }); + }); + + await Promise.all(fetchPromises); + console.log("Video links pre-fetched successfully!"); + } catch (error) { + console.error("Error occurred while pre-fetching video links:", error); + } } diff --git a/src/app/kdrama/components/search.jsx b/src/app/kdrama/components/search.jsx new file mode 100644 index 0000000..4c9d00c --- /dev/null +++ b/src/app/kdrama/components/search.jsx @@ -0,0 +1,56 @@ +"use client"; + +import styles from "../styles/search.module.css"; +import { useState } from "react"; +import { FaSearch } from "react-icons/fa"; +import FetchSearchTitle from "./searchQuery"; +import Image from "next/image"; +import Link from "next/link"; + +export default function DramaSearch() { + const [title, setTitle] = useState(""); + const [infoTitle, setInfoTitle] = useState(null); + + async function getSearchResults(title) { + const data = await FetchSearchTitle(title); + setInfoTitle(data); + } + + return ( +
+
+ + setTitle(event.target.value)} + onKeyDown={async (e) => { + if ((e.key === "Enter" || e.code === 13) && title) { + await getSearchResults(e.target.value); + } + }} + > +
+ +
+ {infoTitle && + infoTitle.results.map((item, index) => ( + +
+

{item.title}

+ Drama Poster +
+ + ))} +
+
+ ); +} diff --git a/src/app/kdrama/components/searchQuery.js b/src/app/kdrama/components/searchQuery.js new file mode 100644 index 0000000..64e428b --- /dev/null +++ b/src/app/kdrama/components/searchQuery.js @@ -0,0 +1,8 @@ +export default async function FetchSearchTitle(title) { + const res = await fetch( + `https://consumet-api-di2e.onrender.com/movies/dramacool/${title}`, + { cache: "force-cache" } + ); + const data = await res.json(); + return data; +} -- cgit v1.2.3