@@ -93,11 +93,11 @@ def __init__(
9393 self ._last_timestamp : float = 0
9494 self ._elapsed_milliseconds : float = 0
9595 self ._current_media : MediaDetails | None = None
96+ self ._buffering_media : MediaDetails | None = None
9697 self ._next_media : MediaDetails | None = None
9798 self ._connected : bool = False
9899 self ._last_heartbeat = 0
99100 self ._auto_play : bool = False
100- self ._enqueue_pending : bool = False
101101 self ._reader_task = create_task (self ._socket_reader ())
102102 self ._heartbeat_task : asyncio .Task | None = None
103103 self ._presets : list [Preset ] = []
@@ -407,6 +407,7 @@ async def play_url(
407407 - send_flush: advanced option to flush the buffer before playback.
408408 """
409409 self .logger .debug ("play url (enqueue: %s): %s" , enqueue , url )
410+
410411 if not url .startswith ("http" ):
411412 raise UnsupportedContentType (f"Invalid URL: { url } " ) # noqa: TRY003
412413
@@ -415,19 +416,21 @@ async def play_url(
415416 await self ._send_strm (b"f" , autostart = b"0" )
416417 await self ._send_strm (b"q" , flags = 0 )
417418
418- self . _next_media = MediaDetails (
419+ media_details = MediaDetails (
419420 url = url ,
420421 mime_type = mime_type ,
421422 metadata = metadata or {},
422423 transition = transition ,
423424 transition_duration = transition_duration ,
424425 )
425- self .extra_data ["playlist_timestamp" ] = int (time .time ())
426- self .signal_update ()
427426 if enqueue :
428- self ._enqueue_pending = True
427+ self ._next_media = media_details
428+ self .extra_data ["playlist_timestamp" ] = int (time .time ())
429+ self .signal_update ()
429430 return
430- self ._enqueue_pending = False
431+ self ._buffering_media = media_details
432+ self .extra_data ["playlist_timestamp" ] = int (time .time ())
433+ self .signal_update ()
431434 # power on if we're not already powered
432435 if not self ._powered :
433436 await self .power (powered = True )
@@ -456,7 +459,7 @@ async def play_url(
456459 "HTTPS stream requested but player does not support HTTPS, "
457460 "trying HTTP instead but playback may fail." ,
458461 )
459- self ._next_media .url = url .replace ("https" , "http" )
462+ self ._buffering_media .url = url .replace ("https" , "http" )
460463 scheme = "http"
461464 port = 80
462465
@@ -816,13 +819,15 @@ def _process_stat_stmd(self, data: bytes) -> None:
816819 self .logger .debug ("STMd received - decoder ready." )
817820 if self ._next_media :
818821 # a next url has been enqueued
822+ enqueued_media = self ._next_media
823+ self ._next_media = None
819824 asyncio .create_task (
820825 self .play_url (
821- url = self . _next_media .url ,
822- mime_type = self . _next_media .mime_type ,
823- metadata = self . _next_media .metadata ,
824- transition = self . _next_media .transition ,
825- transition_duration = self . _next_media .transition_duration ,
826+ url = enqueued_media .url ,
827+ mime_type = enqueued_media .mime_type ,
828+ metadata = enqueued_media .metadata ,
829+ transition = enqueued_media .transition ,
830+ transition_duration = enqueued_media .transition_duration ,
826831 enqueue = False ,
827832 autostart = True ,
828833 send_flush = False ,
@@ -868,9 +873,9 @@ async def _process_stat_stms(self, data: bytes) -> None:
868873 """Process incoming stat STMs message: Playback of new track has started."""
869874 self .logger .debug ("STMs received - playback of new track has started" )
870875 self ._state = PlayerState .PLAYING
871- if not self ._enqueue_pending and self . _next_media :
872- self ._current_media = self ._next_media
873- self ._next_media = None
876+ if self ._buffering_media :
877+ self ._current_media = self ._buffering_media
878+ self ._buffering_media = None
874879 self .extra_data ["playlist_timestamp" ] = int (time .time ())
875880 self .signal_update ()
876881 await self ._render_display ("playback_start" )
@@ -906,6 +911,7 @@ async def _process_stat_stmu(self, data: bytes) -> None:
906911 self ._state = PlayerState .STOPPED
907912 # invalidate url/metadata
908913 self ._current_media = None
914+ self ._buffering_media = None
909915 self ._next_media = None
910916 self .extra_data ["playlist_timestamp" ] = int (time .time ())
911917 self .signal_update ()
@@ -963,10 +969,10 @@ async def _process_resp(self, data: bytes) -> None:
963969 # parse ICY metadata
964970 if (
965971 "icy-name" in headers
966- and self ._next_media
967- and not self ._next_media .metadata .get ("title" )
972+ and self ._buffering_media
973+ and not self ._buffering_media .metadata .get ("title" )
968974 ):
969- self ._next_media .metadata ["title" ] = headers ["icy-name" ]
975+ self ._buffering_media .metadata ["title" ] = headers ["icy-name" ]
970976
971977 # send continue (used when autoplay 1 or 3)
972978 if self ._auto_play :
0 commit comments