dockjss / web-content /controllers /mainController.js
franyer24's picture
Upload 11 files
671122f verified
Raw
History Blame Contribute Delete
4.26 kB
const { fetchTmdbData } = require('../handlers/mainHandle');
const { processVideo } = require ('../utils/ts');
// Definimos una función de mapeo para las rutas de TMDB
// Esto ayuda a manejar los casos donde el path de nuestra API
// no es exactamente igual al endpoint de TMDB, o si necesitas
// ajustes especiales para ciertos endpoints.
const tmdbEndpointMap = {
'/movie/popular': 'movie/popular',
'/tv/popular': 'tv/popular',
'/trending/movie/day': 'trending/movie/day',
'/trending/tv/day': 'trending/tv/day',
'/trending/all/day': 'trending/all/day',
'/trending/movie/week': 'trending/movie/week',
'/trending/tv/week': 'trending/tv/week',
'tv&movie': 'trending/all/week', // Este es un ejemplo de cómo podrías mapear una ruta "genérica" a un endpoint específico. tv&movie es nombre interno.
'/genre/movie/list': 'genre/movie/list',
'/discover/movie': 'discover/movie',
'/movie/upcoming': 'movie/upcoming',
'/movie/now_playing': 'movie/now_playing',
'/tv' : 'tv',
'/movie' : 'movie',
// Agrega más mapeos según necesites
};
// Un controlador genérico para todas las rutas de TMDB
async function getTmdbContent(req, res) {
try {
// req.path es la ruta de la URL de Express (ej. '/movie/popular')
// Usamos el mapeo para obtener el endpoint real de TMDB
const basePath = req.route.path.replace(/\/:tmdbid.*$/, ''); // Remueve todo después de '/:tmdbid'
let tmdbEndpoint;
if (req.params.seasonid) {
tmdbEndpoint = `${tmdbEndpointMap[basePath]}/${req.params.tmdbid}/season/${req.params.seasonid}`;
} else {
tmdbEndpoint = req.params.tmdbid ? `${tmdbEndpointMap[basePath]}/${req.params.tmdbid}` : tmdbEndpointMap[basePath];
}
if (!tmdbEndpoint) {
return res.status(404).json({ error: "Endpoint de TMDB no encontrado para esta ruta." });
}
// req.query contiene todos los parámetros de la URL (ej. ?language=es-ES&page=1&with_genres=28)
const queryParams = req.query;
// Llamamos a la función genérica fetchTmdbData
const data = await fetchTmdbData(tmdbEndpoint, queryParams);
if (data) {
res.json(data);
} else {
// Esto debería ser capturado por el catch de fetchTmdbData,
// pero es una última red de seguridad.
res.status(500).json({ error: "No se pudieron obtener datos de TMDB." });
}
} catch (error) {
// Capturamos cualquier error lanzado por fetchTmdbData
console.error("Error en el controlador de TMDB:", error.message);
res.status(500).json({ error: "Error interno del servidor al procesar la solicitud.", details: error.message });
}
}
async function getCacheStream (req, res) {
const { locker, id } = req.params;
if (!contentCache[`${locker}-get${id}`]) {
return res.status(404).json({ error: `No se encontró el contenido para el ID: ${id}` });
}
try {
const link = contentCache[`${locker}-get${id}`].result;
const request = await processVideo(link);
//console.log(global.contentCache);
res.json({link: request});
} catch (error) {
console.error(error);
res.status(500).json({ error: 'Error en el formato de respuesta' });
}
};
// function cacheLink(id, link) {
// // Asegúrate de que 'id' sea una clave válida para guardar el enlace
// // Aquí, 'id' debería ser algo como 'streamwish-get0', 'streamwish-get1', etc.
// result = `${hostname}/main/${id}`;
// // Aquí lo agregamos al cache
// global.contentCache[id] = { result: link }; // Guardamos el enlace en el cache
// return;
// }
module.exports = {
getCacheStream,
getTmdbContent,
// Si realmente necesitas separar getStreams y getSerieStreams por lógica distinta,
// puedes exportarlos aquí y hacer que internamente llamen a getTmdbContent o
// a fetchTmdbData directamente con alguna lógica condicional.
// getStreams, // Si es diferente a getTmdbContent
// getSerieStreams // Si es diferente a getTmdbContent
};