dockjss / web-content /controllers /stremioController.js
franyer24's picture
Upload 11 files
671122f verified
Raw
History Blame Contribute Delete
4.55 kB
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;
// Ejecutar los handlers uno por uno hasta que uno funcione
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 = [];
// Cuevana
if (cuevanaResult.status === 'fulfilled') {
allStreams.push(...cuevanaResult.value);
} else {
console.error("Error al obtener streams de Cuevana:", cuevanaResult.reason);
}
// Peliplus
if (peliplusResult.status === 'fulfilled' && peliplusResult.value?.opciones) {
allStreams.push(...peliplusResult.value.opciones);
} else {
console.error("Error al obtener streams de Peliplus:", peliplusResult.reason);
}
// Cinecalidad
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 };