feat: initial commit

This commit is contained in:
Radu C. Martin 2025-04-11 08:57:10 +02:00
commit d3259551b2
10 changed files with 866 additions and 0 deletions

82
main.py Normal file
View file

@ -0,0 +1,82 @@
from enum import Enum
from fastapi import FastAPI
from pygame.mixer import music
from download_service import DownloadService
from music_player import MusicPlayer
class ChangePlayerState(Enum):
play = "play"
pause = "pause"
unpause = "unpause"
stop = "stop"
class Songs(Enum):
era = "era.mp3"
royal_beggars = "royal-beggars.mp3"
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()
# Experimental
@app.get("/test/player/queue", tags=["experimental"])
def play_music():
return player.get_queue()
@app.post("/test/queue", tags=["experimental"])
def post_to_queue(url: str):
track = dl_service.download(url)
player.add_to_queue(track)
@app.post("/player/play", tags=["experimental"])
def play():
player.play()
# 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.patch("/player/state", tags=["player"])
def update_state(status: ChangePlayerState):
match status:
case ChangePlayerState.play:
music.play()
case ChangePlayerState.pause:
music.pause()
case ChangePlayerState.unpause:
music.unpause()
case ChangePlayerState.stop:
music.stop()
@app.get("/player/state", tags=["player"])
def get_state():
return {"state": player.get_state(), "current_track": player.get_current_track()}
@app.post("/queue", tags=["queue"])
def add_to_queue(filename: str):
queue.append(filename)