From: Marcel van der Veldt Date: Fri, 22 Jul 2022 17:45:52 +0000 (+0200) Subject: fix repeat all X-Git-Url: https://git.kitaultman.com/?a=commitdiff_plain;h=de05ecc7f5db9c97e81e67bcdd624f3a52775774;p=music-assistant-server.git fix repeat all --- diff --git a/music_assistant/controllers/streams.py b/music_assistant/controllers/streams.py index f1f8ae8d..d18d556f 100644 --- a/music_assistant/controllers/streams.py +++ b/music_assistant/controllers/streams.py @@ -129,7 +129,7 @@ class StreamsController: 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( @@ -493,11 +493,11 @@ class QueueStream: 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 @@ -532,9 +532,9 @@ class QueueStream: 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 @@ -560,7 +560,7 @@ class QueueStream: # 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, @@ -575,7 +575,7 @@ class QueueStream: "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 diff --git a/music_assistant/models/player_queue.py b/music_assistant/models/player_queue.py index 28a1c0e4..0757b5d4 100644 --- a/music_assistant/models/player_queue.py +++ b/music_assistant/models/player_queue.py @@ -69,7 +69,7 @@ class PlayerQueue: 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 @@ -377,7 +377,7 @@ class PlayerQueue: 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() @@ -671,10 +671,11 @@ class PlayerQueue: 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()