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)