86 lines
1.6 KiB
Python
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()
|