This commit is contained in:
2025-12-02 14:07:35 +01:00
commit 9b84566eb4
62 changed files with 12861 additions and 0 deletions

28
app/routers/auth.py Normal file
View File

@@ -0,0 +1,28 @@
from fastapi import APIRouter, Request, Depends
from fastapi.responses import HTMLResponse, JSONResponse
from fastapi.templating import Jinja2Templates
from app.services.tidal_wrapper import TidalWrapper
router = APIRouter(prefix="/auth", tags=["auth"])
templates = Jinja2Templates(directory="app/templates")
@router.get("/login", response_class=HTMLResponse)
async def login_page(request: Request):
return templates.TemplateResponse("login.html", {"request": request})
@router.post("/start")
async def start_login():
wrapper = TidalWrapper()
result = wrapper.start_device_login()
return JSONResponse(result)
@router.get("/status")
async def check_status():
wrapper = TidalWrapper()
return JSONResponse(wrapper.get_auth_status())
@router.post("/logout")
async def logout():
# wrapper = TidalWrapper()
# wrapper.logout()
return JSONResponse({"status": "logged_out"})

40
app/routers/download.py Normal file
View File

@@ -0,0 +1,40 @@
from fastapi import APIRouter, Request, HTTPException
from fastapi.responses import JSONResponse
from app.services.download_manager import DownloadManager
router = APIRouter(prefix="/download", tags=["download"])
download_manager = DownloadManager()
@router.post("/")
async def add_download(request: Request):
data = await request.json()
item_type = data.get("type")
item_id = data.get("id")
if not item_type or not item_id:
raise HTTPException(status_code=400, detail="Missing type or id")
task = download_manager.add_to_queue(item_type, item_id)
return JSONResponse(task)
@router.get("/queue")
async def get_queue():
return download_manager.get_queue()
@router.post("/cancel/{task_id}")
async def cancel_download(task_id: str):
if download_manager.cancel_task(task_id):
return {"status": "success", "message": "Task cancelled"}
raise HTTPException(status_code=404, detail="Task not found")
@router.post("/pause/{task_id}")
async def pause_download(task_id: str):
if download_manager.pause_task(task_id):
return {"status": "success", "message": "Task paused"}
raise HTTPException(status_code=404, detail="Task not found")
@router.post("/resume/{task_id}")
async def resume_download(task_id: str):
if download_manager.resume_task(task_id):
return {"status": "success", "message": "Task resumed"}
raise HTTPException(status_code=404, detail="Task not found")

14
app/routers/search.py Normal file
View File

@@ -0,0 +1,14 @@
from fastapi import APIRouter, Request, HTTPException
from fastapi.responses import JSONResponse
from app.services.tidal_wrapper import TidalWrapper
router = APIRouter(prefix="/search", tags=["search"])
@router.get("/")
async def search(query: str, type: str = "track"):
wrapper = TidalWrapper()
try:
results = wrapper.search(query, type)
return JSONResponse(results)
except Exception as e:
raise HTTPException(status_code=400, detail=str(e))

17
app/routers/system.py Normal file
View File

@@ -0,0 +1,17 @@
from fastapi import APIRouter
import requests
router = APIRouter(
prefix="/system",
tags=["system"],
responses={404: {"description": "Not found"}},
)
@router.get("/ip")
async def get_public_ip():
try:
response = requests.get("https://api.ipify.org?format=json", timeout=5)
response.raise_for_status()
return response.json()
except Exception as e:
return {"ip": "Error fetching IP", "error": str(e)}