Fix: race condition in queue controller when flow mode is enabled
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Wed, 5 Feb 2025 22:16:08 +0000 (23:16 +0100)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Wed, 5 Feb 2025 22:16:08 +0000 (23:16 +0100)
Fixes weird resume bug after stop

music_assistant/controllers/player_queues.py

index 4e9c5ede9295d76d057333ead1ece1e1af68093f..9e2caad536e8c4b65bc489e6038fa788b3ede141 100644 (file)
@@ -1733,7 +1733,7 @@ class PlayerQueuesController(CoreController):
         """Calculate current queue index and current track elapsed time when flow mode is active."""
         elapsed_time_queue_total = player.corrected_elapsed_time or 0
         if queue.current_index is None and not queue.flow_mode_stream_log:
-            return None, elapsed_time_queue_total
+            return queue.current_index, queue.elapsed_time
 
         # For each track that has been streamed/buffered to the player,
         # a playlog entry will be created with the queue item id
@@ -1766,7 +1766,10 @@ class PlayerQueuesController(CoreController):
                     track_sec_skipped = 0
                 track_time = elapsed_time_queue_total + track_sec_skipped - played_time
                 break
-
+        if player.state != PlayerState.PLAYING:
+            # if the player is not playing, we can't be sure that the elapsed time is correct
+            # so we just return the queue index and the elapsed time
+            return queue.current_index, queue.elapsed_time
         return queue_index, track_time
 
     def _parse_player_current_item_id(self, queue_id: str, player: Player) -> str | None: