from fastapi import FastAPI, Request from fastapi.responses import HTMLResponse, JSONResponse from fastapi.templating import Jinja2Templates from fastapi.staticfiles import StaticFiles from fastapi.concurrency import run_in_threadpool from pathlib import Path import json, download app = FastAPI() # app.mount("/static", StaticFiles(directory="/app/app/static"), name="static") templates = Jinja2Templates(directory="templates") # api @app.get("/dropoutUpdate") async def dropoutUpdate(): try: download.dropout.series() return JSONResponse(status_code=200, content={"status": "success", "message": "Series grab complete."}) except Exception as e: return JSONResponse(status_code=500, content={"status": "error", "message": str(e)}) @app.get("/dropoutSeries", response_class=JSONResponse) async def dropoutSeries(): file_path = Path("data/dropout.json") if file_path.exists(): with file_path.open("r", encoding="utf-8") as f: data = json.load(f) return JSONResponse(content=data) return JSONResponse(content={"error": "File not found"}, status_code=404) @app.get("/dropoutDownload") async def dropoutDownload(show: str, season: str, episode: str): download.dropout.show(show,season,episode) @app.get("/ydl") async def ydl(url: str, location: str): download.youtube.ydl(url,location) # html @app.get("/", response_class=HTMLResponse) async def index(request: Request): apps = [ {"name": "Notes", "url": "/notes"}, {"name": "Todo List", "url": "/todos"}, {"name": "Weather", "url": "/weather"}, # Add more apps here ] return templates.TemplateResponse("index.html", {"request": request, "apps": apps, "title": "Welcome to My App Hub"})