File size: 4,259 Bytes
671122f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2e178e3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
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
};