Spaces:
Running
Running
| import os | |
| import json | |
| import logging | |
| import asyncio | |
| import traceback | |
| import aiohttp_cors | |
| from aiohttp import web | |
| from pyrogram import raw | |
| from bson import ObjectId | |
| from bson.json_util import dumps | |
| from aiohttp.http_exceptions import BadStatusLine | |
| #---------------------Local Imports----------------------------------# | |
| from FileStream.bot import req_client | |
| from ..Functions import media_streamer | |
| from FileStream.Database import Database | |
| from FileStream.config import Telegram, Server | |
| from FileStream.Exceptions import FIleNotFound, InvalidHash | |
| from FileStream.TMDB.Endpoint import search_tmdb_any, search_tmdb_tv, search_tmdb_movies | |
| CORS_HEADERS = { | |
| "Access-Control-Allow-Origin": "*", | |
| "Access-Control-Allow-Headers": "*" | |
| } | |
| # API endpoint to list 10 files (pagination optimization) | |
| async def list_10_all_files_db(request): | |
| db = Database(Telegram.DATABASE_URL, Telegram.SESSION_NAME) | |
| files, total_files = await db.find_all_files([1, 10]) | |
| return web.json_response([dict(file) async for file in files], headers=CORS_HEADERS) | |
| # API endpoint to list all files in database | |
| async def list_all_files_db(request): | |
| db = Database(Telegram.DATABASE_URL, Telegram.SESSION_NAME) | |
| files = await db.get_all_files_api() # Ensure `get_all_files_api` is optimized for performance | |
| return web.json_response(json.loads(dumps(files)), headers=CORS_HEADERS) | |
| # API endpoint to list all TMDB movies related to files in the database | |
| async def list_all_tmdb_movies_from_db(request): | |
| db = Database(Telegram.DATABASE_URL, Telegram.SESSION_NAME) | |
| files = await db.get_all_files() | |
| response = [] | |
| for row in files: | |
| try: | |
| resp = search_tmdb_movies(str(row['file']['caption']) if row['file']['caption'] else str(row['file']['file_name'])) | |
| if resp: | |
| response.append(resp) | |
| except Exception as e: | |
| logging.error(f"Error while fetching TMDB movie for {row['file']['caption']}: {e}") | |
| return web.json_response(json.loads(dumps(response)), headers=CORS_HEADERS) | |
| # API endpoint to list all TMDB TV shows related to files in the database | |
| async def list_all_tmdb_tv_from_db(request): | |
| db = Database(Telegram.DATABASE_URL, Telegram.SESSION_NAME) | |
| files = await db.get_all_files() | |
| response = [] | |
| for row in files: | |
| try: | |
| resp = search_tmdb_tv(str(row['file']['caption']) if row['file']['caption'] else str(row['file']['file_name'])) | |
| if resp: | |
| response.append(resp) | |
| except Exception as e: | |
| logging.error(f"Error while fetching TMDB TV show for {row['file']['caption']}: {e}") | |
| return web.json_response(json.loads(dumps(response)), headers=CORS_HEADERS) | |
| # API endpoint to list all TMDB results, streaming them to the client | |
| async def list_all_files_tmdb(request): | |
| db = Database(Telegram.DATABASE_URL, Telegram.SESSION_NAME) | |
| files = await db.get_all_files() | |
| async def data_generator(): | |
| for row in files: | |
| try: | |
| resp = search_tmdb_any(str(row['file']['caption']) if row['file']['caption'] else str(row['file']['file_name'])) | |
| if resp: | |
| yield json.dumps(resp) + '\n' # Streaming data to client in chunks | |
| except Exception as e: | |
| logging.error(f"Error while fetching TMDB data for {row['file']['caption']}: {e}") | |
| return web.Response(body=data_generator(), content_type='application/json', headers=CORS_HEADERS) | |
| # API endpoint to list all files for a simple response | |
| async def list_all_files(request): | |
| db = Database(Telegram.DATABASE_URL, Telegram.SESSION_NAME) | |
| files = await db.get_all_files_api() | |
| resp = [{ | |
| "adult": False, | |
| "backdrop_path": "/c1bz69r0v065TGFA5nqBiKzPDys.jpg", | |
| "genre_ids": [35, 10751, 10402], | |
| "id": f"{row['_id']}", | |
| "original_language": "en-hi", | |
| "original_title": f"{str(row['file']['caption'])}", | |
| "overview": "XRepo Movies", | |
| "popularity": 1710.176, | |
| "poster_path": "/irIS5Tn3TXjNi1R9BpWvGAN4CZ1.jpg", | |
| "release_date": "2022-10-07", | |
| "title": f"{str(row['file']['caption'])}", | |
| "link": f"{Server.URL}api/dl/{row['_id']}", | |
| "vote_average": 7.8, | |
| "vote_count": 122, | |
| } for row in files] | |
| return web.json_response(json.loads(dumps(resp)), headers=CORS_HEADERS) | |