from fastapi import APIRouter, HTTPException from pydantic import BaseModel from typing import List from ..qbittorrent_manager import QbittorrentManager router = APIRouter() manager = QbittorrentManager() class TorrentActionRequest(BaseModel): hashes: List[str] class DeleteRequest(TorrentActionRequest): delete_files: bool = False class LocationRequest(TorrentActionRequest): location: str @router.get("/") def list_torrents(): try: return manager.get_torrents() except Exception as e: raise HTTPException(status_code=500, detail=str(e)) @router.post("/pause") def pause_torrents(request: TorrentActionRequest): try: manager.pause_torrents(request.hashes) return {"status": "success"} except Exception as e: raise HTTPException(status_code=500, detail=str(e)) @router.post("/resume") def resume_torrents(request: TorrentActionRequest): try: manager.resume_torrents(request.hashes) return {"status": "success"} except Exception as e: raise HTTPException(status_code=500, detail=str(e)) @router.post("/delete") def delete_torrents(request: DeleteRequest): try: manager.delete_torrents(request.hashes, request.delete_files) return {"status": "success"} except Exception as e: raise HTTPException(status_code=500, detail=str(e)) @router.post("/recheck") def recheck_torrents(request: TorrentActionRequest): try: manager.recheck_torrents(request.hashes) return {"status": "success"} except Exception as e: raise HTTPException(status_code=500, detail=str(e)) @router.post("/location") def set_location(request: LocationRequest): try: manager.set_location(request.hashes, request.location) return {"status": "success"} except Exception as e: raise HTTPException(status_code=500, detail=str(e))