fix resume after stop
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Wed, 21 Aug 2024 16:32:46 +0000 (18:32 +0200)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Wed, 21 Aug 2024 16:32:46 +0000 (18:32 +0200)
music_assistant/common/models/player_queue.py
music_assistant/server/controllers/player_queues.py

index 8f16281a101d324f8a5b15724f6a502c3ae936c3..e2d6c881fe206292d8c021b3b7064f15929fb765 100644 (file)
@@ -37,6 +37,7 @@ class PlayerQueue(DataClassDictMixin):
     next_item: QueueItem | None = None
     radio_source: list[MediaItemType] = field(default_factory=list)
     flow_mode: bool = False
+    resume_pos: int = 0
     # flow_mode_start_index: index of the first item of the flow stream
     flow_mode_start_index: int = 0
     stream_finished: bool | None = None
index 1949a0b54bdf2678619fbb067d711feaef54dd67..af27ddb7107a7179a22825c034345422beb3904e 100644 (file)
@@ -570,6 +570,7 @@ class PlayerQueuesController(CoreController):
         - queue_id: queue_id of the playerqueue to handle the command.
         """
         if queue := self.get(queue_id):
+            queue.resume_pos = queue.corrected_elapsed_time
             queue.stream_finished = None
             queue.end_of_track_reached = None
         # forward the actual command to the player controller
@@ -598,6 +599,8 @@ class PlayerQueuesController(CoreController):
 
         - queue_id: queue_id of the playerqueue to handle the command.
         """
+        if queue := self._queues.get(queue_id):
+            queue.resume_pos = queue.corrected_elapsed_time
         # forward the actual command to the player controller
         await self.mass.players.cmd_pause(queue_id)
 
@@ -692,7 +695,7 @@ class PlayerQueuesController(CoreController):
         queue = self._queues[queue_id]
         queue_items = self._queue_items[queue_id]
         resume_item = queue.current_item
-        resume_pos = queue.elapsed_time
+        resume_pos = queue.resume_pos
 
         if not resume_item and queue.current_index is not None and len(queue_items) > 0:
             resume_item = self.get_item(queue_id, queue.current_index)
@@ -723,6 +726,7 @@ class PlayerQueuesController(CoreController):
     ) -> None:
         """Play item at index (or item_id) X in queue."""
         queue = self._queues[queue_id]
+        queue.resume_pos = 0
         if isinstance(index, str):
             index = self.index_by_id(queue_id, index)
         queue_item = self.get_item(queue_id, index)