queue_id = request.match_info["queue_id"]
control = request.match_info["control"]
if queue := self.mass.players.get_player_queue(queue_id):
- if control == "next" and not queue.signal_next:
+ if control == "next" and queue.signal_next is None:
await queue.next()
resp = web.StreamResponse(
self.connected_clients.pop(client_id, None)
# complete queue streamed
- if self.signal_next and not self.queue.announcement_in_progress:
+ if self.signal_next is not None and not self.queue.announcement_in_progress:
# the queue stream was aborted (e.g. because of sample rate mismatch)
# tell the queue to load the next track (restart stream) as soon
# as the player finished playing and returns to idle
- self.queue.signal_next = True
+ self.queue.signal_next = self.signal_next
# all queue data has been streamed. Either because the queue is exhausted
# or we need to restart the stream due to decoder/sample rate mismatch
seek_position = self.seek_position
else:
next_index = self.queue.get_next_index(queue_index)
- # break here if repeat is enabled
+ # break here if next index does not match (e.g. when repeat enabled)!
if next_index <= queue_index:
- self.signal_next = True
+ self.signal_next = next_index
break
queue_index = next_index
seek_position = 0
# check the PCM samplerate/bitrate
if not self.allow_resample and streamdetails.bit_depth > self.pcm_bit_depth:
- self.signal_next = True
+ self.signal_next = queue_index
self.logger.debug(
"Abort queue stream %s due to bit depth mismatch",
self.queue.player.name,
"Abort queue stream %s due to sample rate mismatch",
self.queue.player.name,
)
- self.signal_next = True
+ self.signal_next = queue_index
break
# check crossfade ability
self.mass = mass
self.logger = mass.players.logger
self.queue_id = player_id
- self.signal_next: bool = False
+ self.signal_next: Optional[int] = 0
self._stream_id: str = ""
self._settings = QueueSettings(self)
self._current_index: Optional[int] = None
if self.announcement_in_progress:
self.logger.warning("Ignore queue command: An announcement is in progress")
return
- self.signal_next = False
+ self.signal_next = None
# redirect to underlying player
await self.player.stop()
if self.player.state == PlayerState.IDLE:
# handle case where stream stopped on purpose and we need to restart it
- if self.signal_next:
- self.signal_next = False
+ if self.signal_next is not None:
self._current_item_elapsed_time = 0
- self.mass.create_task(self.resume())
+ next_idx = self.signal_next
+ self.signal_next = None
+ self.mass.create_task(self.play_index(next_idx))
self.update_state()