fix: make async threading work
This commit is contained in:
parent
66f4e4e374
commit
79f72d0531
3 changed files with 20 additions and 3 deletions
|
@ -1 +1 @@
|
|||
3.11
|
||||
3.13
|
||||
|
|
|
@ -23,6 +23,7 @@ class PlaybackState(str, Enum):
|
|||
class PlayerState(BaseModel):
|
||||
playback_state: PlaybackState = PlaybackState.Stopped
|
||||
track: Track | None = None
|
||||
position: int | None = None
|
||||
volume: float
|
||||
|
||||
|
||||
|
@ -58,7 +59,7 @@ class MusicPlayer:
|
|||
# Threading
|
||||
self.lock = threading.Lock()
|
||||
self._running = True
|
||||
self._thread = threading.Thread(target=self._loop, daemon=True)
|
||||
self._thread = threading.Thread(target=self._run_async_loop, daemon=True)
|
||||
self._thread.start()
|
||||
|
||||
# Queue
|
||||
|
@ -66,6 +67,9 @@ class MusicPlayer:
|
|||
self._queue_lock: asyncio.Lock = asyncio.Lock()
|
||||
self._queue_event: asyncio.Event = asyncio.Event()
|
||||
|
||||
def _run_async_loop(self):
|
||||
asyncio.run(self._loop())
|
||||
|
||||
async def _loop(self):
|
||||
while self._running:
|
||||
for event in pygame.event.get():
|
||||
|
@ -73,8 +77,20 @@ class MusicPlayer:
|
|||
await self._handle_track_finished()
|
||||
await self._play_next_track()
|
||||
|
||||
await self._update_position()
|
||||
time.sleep(0.1)
|
||||
|
||||
async def _update_position(self):
|
||||
new_pos = pygame.mixer.music.get_pos() // 1000
|
||||
# Changes only of fulls seconds
|
||||
if new_pos != self._state.position:
|
||||
if new_pos == -1:
|
||||
self._state.position = None
|
||||
else:
|
||||
self._state.position = new_pos
|
||||
|
||||
self._state_event.set()
|
||||
|
||||
async def _set_playback_state(self, value: PlaybackState):
|
||||
async with self._state_lock:
|
||||
self._state.playback_state = value
|
||||
|
@ -83,6 +99,7 @@ class MusicPlayer:
|
|||
async def _set_track(self, track: Track | None):
|
||||
async with self._state_lock:
|
||||
self._state.track = track
|
||||
self._state.position = 0
|
||||
self._state_event.set()
|
||||
|
||||
async def _handle_track_finished(self) -> None:
|
||||
|
|
|
@ -3,7 +3,7 @@ name = "py-dj"
|
|||
version = "0.1.0"
|
||||
description = "Add your description here"
|
||||
readme = "README.md"
|
||||
requires-python = ">=3.11"
|
||||
requires-python = ">=3.13"
|
||||
dependencies = [
|
||||
"fastapi[standard]>=0.115.12",
|
||||
"pydantic>=2.11.3",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue