import PTT import RTN from fastapi import APIRouter, Request from fastapi.responses import RedirectResponse from fastapi.templating import Jinja2Templates from comet.utils.models import settings from comet.utils.general import config_check, get_debrid_extension templates = Jinja2Templates("comet/templates") main = APIRouter() @main.get("/", status_code=200) async def root(): return RedirectResponse("/configure") @main.get("/health", status_code=200) async def health(): return {"status": "ok"} indexers = settings.INDEXER_MANAGER_INDEXERS languages = [language for language in PTT.parse.LANGUAGES_TRANSLATION_TABLE.values()] languages.insert(0, "Multi") web_config = { "indexers": [indexer.replace(" ", "_").lower() for indexer in indexers], "languages": languages, "resolutions": [resolution.value for resolution in RTN.models.Resolution], "resultFormat": ["Title", "Metadata", "Size", "Tracker", "Languages"], } @main.get("/configure") @main.get("/{b64config}/configure") async def configure(request: Request): return templates.TemplateResponse( "index.html", { "request": request, "CUSTOM_HEADER_HTML": settings.CUSTOM_HEADER_HTML if settings.CUSTOM_HEADER_HTML else "", "webConfig": web_config, "indexerManager": settings.INDEXER_MANAGER_TYPE, "proxyDebridStream": settings.PROXY_DEBRID_STREAM, }, ) @main.get("/manifest.json") @main.get("/{b64config}/manifest.json") async def manifest(b64config: str = None): config = config_check(b64config) if not config: config = {"debridService": None} debrid_extension = get_debrid_extension(config["debridService"]) return { "id": settings.ADDON_ID, "name": f"{settings.ADDON_NAME}{(' | ' + debrid_extension) if debrid_extension is not None else ''}", "description": "Stremio's fastest torrent/debrid search add-on.", "version": "1.0.0", "catalogs": [], "resources": [ { "name": "stream", "types": ["movie", "series"], "idPrefixes": ["tt", "kitsu"], } ], "types": ["movie", "series", "anime", "other"], "logo": "https://i.imgur.com/jmVoVMu.jpeg", "background": "https://i.imgur.com/WwnXB3k.jpeg", "behaviorHints": {"configurable": True, "configurationRequired": False}, }