| const { getIdType } = require('../utils/idType');
|
| const { getHandlersForId } = require('../handlers/index');
|
| const { getStreamsFromCuevana } = require('../services/cuevanaService');
|
| const { getStreamsFromPeliplus } = require('../services/peliplusService.test');
|
| const { getMoviesFromCinecalidadrs } = require('../services/cinecalidad rs.js');
|
|
|
| async function getStreams(req, res) {
|
| try {
|
| const id = req.params.id;
|
| const type = 'movie';
|
|
|
| const handlers = getHandlersForId(getIdType(id));
|
|
|
| if (handlers.length === 0) {
|
| return res.status(400).json({ error: "Tipo de ID no soportado" });
|
| }
|
|
|
| let movieData = null;
|
|
|
|
|
| for (const handler of handlers) {
|
| if (handler == 'tmdb') {
|
| movieData = await handler(id, type);
|
| } else {
|
| movieData = await handler(id);
|
| }
|
| if (movieData) break;
|
| }
|
|
|
| if (!movieData) {
|
| return res.status(404).json({ error: "Película no encontrada" });
|
| }
|
| const [cuevanaResult, peliplusResult, cinecalidadResult] = await Promise.allSettled([
|
| getStreamsFromCuevana(movieData),
|
| getStreamsFromPeliplus(movieData),
|
| getMoviesFromCinecalidadrs(movieData)
|
| ]);
|
|
|
| const allStreams = [];
|
|
|
|
|
| if (cuevanaResult.status === 'fulfilled') {
|
| allStreams.push(...cuevanaResult.value);
|
| } else {
|
| console.error("Error al obtener streams de Cuevana:", cuevanaResult.reason);
|
| }
|
|
|
|
|
| if (peliplusResult.status === 'fulfilled' && peliplusResult.value?.opciones) {
|
| allStreams.push(...peliplusResult.value.opciones);
|
| } else {
|
| console.error("Error al obtener streams de Peliplus:", peliplusResult.reason);
|
| }
|
|
|
|
|
| if (cinecalidadResult.status === 'fulfilled') {
|
| allStreams.push(...cinecalidadResult.value);
|
| } else {
|
| console.error("Error al obtener streams de Cinecalidad:", cinecalidadResult.reason);
|
| }
|
| res.json({ streams: allStreams });
|
|
|
| } catch (error) {
|
| console.error(error.message);
|
| res.status(500).json({ error: "Error interno del servidor" });
|
| }
|
| }
|
|
|
|
|
| async function getSerieStreams(req, res) {
|
| try {
|
| const decodedId = decodeURIComponent(req.params.id);
|
| const [imdbId, seasonStr, episodeStr] = decodedId.split(':');
|
| const season = parseInt(seasonStr, 10) || 1;
|
| const episode = parseInt(episodeStr, 10) || 1;
|
|
|
| const type = 'series';
|
|
|
| const handlers = getHandlersForId(getIdType(imdbId));
|
|
|
| if (handlers.length === 0) {
|
| return res.status(400).json({ error: "Tipo de ID no soportado" });
|
| }
|
|
|
| let serieData = null;
|
|
|
| for (const handler of handlers) {
|
| if (handler == 'tmdb') {
|
| serieData = await handler(imdbId, type);
|
| } else {
|
| serieData = await handler(imdbId);
|
| }
|
| if (serieData && serieData.type === 'tv') break;
|
| }
|
|
|
| if (!serieData || serieData.type !== 'tv') {
|
| return res.status(404).json({ error: "Serie no encontrada o tipo incorrecto" });
|
| }
|
|
|
| const [cuevanaStreams, peliplusResult] = await Promise.allSettled([
|
| getStreamsFromCuevana(serieData, { season, episode }),
|
| getStreamsFromPeliplus(serieData, { season, episode })
|
| ]);
|
|
|
| const allStreams = [];
|
|
|
| if (cuevanaStreams.status === 'fulfilled') {
|
| allStreams.push(...cuevanaStreams.value);
|
| } else {
|
| console.error("Error al obtener streams de Cuevana:", cuevanaStreams.reason);
|
| }
|
|
|
| if (peliplusResult.status === 'fulfilled' && peliplusResult.value?.opciones) {
|
| allStreams.push(...peliplusResult.value.opciones);
|
| } else {
|
| console.error("Error al obtener streams de Peliplus:", peliplusResult.reason);
|
| }
|
|
|
| res.json({ streams: allStreams });
|
|
|
| } catch (error) {
|
| console.trace(error);
|
| console.error("Error interno en getSerieStreams:", error.message);
|
| res.status(500).json({ error: "Error interno del servidor" });
|
| }
|
| }
|
|
|
| module.exports = { getStreams, getSerieStreams }; |