py-dj/main.py
2025-04-11 19:37:03 +02:00

86 lines
1.6 KiB
Python

from enum import Enum
from fastapi import FastAPI
from fastapi.responses import HTMLResponse
from download_service import DownloadService
from music_player import MusicPlayer, PlayerState
class ChangePlayerState(Enum):
play = "play"
pause = "pause"
resume = "resume"
stop = "stop"
queue: list[str] = []
tags_metadata = [
{"name": "player", "description": "Interact with the Music Player"},
{"name": "experimental"},
{"name": "queue"},
]
app = FastAPI(openapi_tags=tags_metadata)
player = MusicPlayer()
dl_service = DownloadService()
# Interface
@app.get("/", response_class=HTMLResponse)
async def root():
with open("interface.html") as f:
return f.read()
# Experimental
@app.get("/queue", tags=["queue"])
def get_queue():
return player.get_queue()
@app.post("/queue", tags=["queue"])
def post_to_queue(url: str):
track = dl_service.download(url)
player.add_to_queue(track)
@app.post("/player/play", tags=["player"])
def player_play():
player.play()
@app.post("/player/pause", tags=["player"])
def player_pause():
player.pause()
@app.post("/player/resume", tags=["player"])
def player_resume():
player.resume()
@app.post("/player/stop", tags=["player"])
def player_stop():
player.stop()
@app.post("/player/skip", tags=["player"])
def player_skip():
player.next()
# Player
@app.put("/player/volume", tags=["player"])
def set_volume(volume: float):
player.set_volume(volume)
@app.get("/player/volume", tags=["player"])
def get_volume():
return {"volume": player.get_volume()}
@app.get("/player", tags=["player"])
def get_player_state() -> PlayerState:
return player.get_state()