fix queue index calculation on stream error
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Wed, 3 Aug 2022 09:04:56 +0000 (11:04 +0200)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Wed, 3 Aug 2022 09:04:56 +0000 (11:04 +0200)
music_assistant/helpers/audio.py
music_assistant/models/media_items.py
music_assistant/models/player_queue.py

index 58eb98ef6287eab95a9ee9a20a4e73392121f5d8..9ee9e2cadfed63f7e0b6a231a882661f60a3b850 100644 (file)
@@ -232,8 +232,8 @@ async def get_stream_details(
     streamdetails = None
     if queue_item.streamdetails and (time() < queue_item.streamdetails.expires):
         # we already have fresh streamdetails, use these
-        queue_item.streamdetails.seconds_skipped = 0
-        queue_item.streamdetails.seconds_streamed = 0
+        queue_item.streamdetails.seconds_skipped = None
+        queue_item.streamdetails.seconds_streamed = None
         streamdetails = queue_item.streamdetails
     else:
         # fetch streamdetails from provider
index 5f1221f8c593705fefd5e3e125be5f9813ee181e..17137d80170c0d558d71d2bbd7b02e631f022624 100755 (executable)
@@ -451,8 +451,8 @@ class StreamDetails(DataClassDictMixin):
 
     # the fields below will be set/controlled by the streamcontroller
     queue_id: Optional[str] = None
-    seconds_streamed: int = 0
-    seconds_skipped: int = 0
+    seconds_streamed: Optional[float] = None
+    seconds_skipped: Optional[float] = None
     gain_correct: Optional[float] = None
     loudness: Optional[float] = None
 
index 43f1640b81e4619a0dd185d297755171529dead0..d4c43da28a65754adca534c400b277aa791f3104 100644 (file)
@@ -840,17 +840,14 @@ class PlayerQueue:
                 if not queue_track.streamdetails:
                     track_time = elapsed_time_queue - total_time
                     break
-                duration = (
-                    queue_track.streamdetails.seconds_streamed
-                    or queue_track.duration
-                    or FALLBACK_DURATION
-                )
-                if duration is not None and elapsed_time_queue > (
-                    duration + total_time
-                ):
+                if queue_track.streamdetails.seconds_streamed is not None:
+                    track_duration = queue_track.streamdetails.seconds_streamed
+                else:
+                    track_duration = queue_track.duration or FALLBACK_DURATION
+                if elapsed_time_queue > (track_duration + total_time):
                     # total elapsed time is more than (streamed) track duration
                     # move index one up
-                    total_time += duration
+                    total_time += track_duration
                     queue_index += 1
                 else:
                     # no more seconds left to divide, this is our track