various fixes
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Thu, 5 May 2022 22:49:12 +0000 (00:49 +0200)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Thu, 5 May 2022 22:49:12 +0000 (00:49 +0200)
music_assistant/models/player_queue.py

index 4468041427fa53385a7399c02082c37d7966d621..f9cddc4974571ba5a87ba3f59a11c6a6cf27c39f 100644 (file)
@@ -6,7 +6,7 @@ import random
 from asyncio import Task, TimerHandle
 from dataclasses import dataclass
 from enum import Enum
-from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union
+from typing import Any, Dict, List, Optional, Tuple, Union
 from uuid import uuid4
 
 from mashumaro import DataClassDictMixin
@@ -15,13 +15,16 @@ from music_assistant.constants import EventType, MassEvent
 from music_assistant.helpers.audio import get_stream_details
 from music_assistant.helpers.typing import MusicAssistant
 from music_assistant.models.errors import MediaNotFoundError, QueueEmpty
-from music_assistant.models.media_items import ContentType, MediaType, StreamDetails
+from music_assistant.models.media_items import (
+    ContentType,
+    MediaType,
+    Radio,
+    StreamDetails,
+    Track,
+)
 
 from .player import Player, PlayerGroup, PlayerState
 
-if TYPE_CHECKING:
-    from music_assistant.models.media_items import Radio, Track
-
 
 class QueueOption(Enum):
     """Enum representation of the queue (play) options."""
@@ -43,6 +46,8 @@ class QueueItem(DataClassDictMixin):
     sort_index: int = 0
     streamdetails: Optional[StreamDetails] = None
     media_type: MediaType = MediaType.UNKNOWN
+    image: Optional[str] = None
+    available: bool = True
     is_media_item: bool = False
 
     def __post_init__(self):
@@ -60,14 +65,21 @@ class QueueItem(DataClassDictMixin):
         return d
 
     @classmethod
-    def from_media_item(cls, media_item: "Track" | "Radio"):
+    def from_media_item(cls, media_item: Track | Radio):
         """Construct QueueItem from track/radio item."""
+        if isinstance(media_item, Track):
+            artists = "/".join((x.name for x in media_item.artists))
+            name = f"{artists} - {media_item.name}"
+        else:
+            name = media_item.name
         return cls(
             uri=media_item.uri,
-            name=media_item.name,
+            name=name,
             duration=media_item.duration,
             media_type=media_item.media_type,
             is_media_item=True,
+            image=media_item.image,
+            available=media_item.available,
         )
 
 
@@ -157,6 +169,11 @@ class PlayerQueue:
         """Return all items in this queue."""
         return self._items
 
+    @property
+    def current_index(self) -> int | None:
+        """Return current index."""
+        return self._current_index
+
     @property
     def current_item(self) -> QueueItem | None:
         """
@@ -665,6 +682,7 @@ class PlayerQueue:
             "elapsed_time": int(self.elapsed_time),
             "state": self.player.state.value,
             "available": self.player.available,
+            "current_index": self.current_index,
             "current_item": cur_item,
             "next_item": next_item,
             "shuffle_enabled": self.shuffle_enabled,