From aaa3f3095ec99c24b767638336ae5e146d4d8be6 Mon Sep 17 00:00:00 2001 From: Marcel van der Veldt Date: Thu, 23 Jun 2022 17:25:56 +0200 Subject: [PATCH] Fix for appending single tracks to queue (#385) * fix for appending single items to the queue --- music_assistant/models/media_controller.py | 4 ++-- music_assistant/models/player_queue.py | 18 +++++++++++------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/music_assistant/models/media_controller.py b/music_assistant/models/media_controller.py index fc7f5e04..b03ae4fc 100644 --- a/music_assistant/models/media_controller.py +++ b/music_assistant/models/media_controller.py @@ -19,7 +19,7 @@ from music_assistant.models.errors import MediaNotFoundError, ProviderUnavailabl from music_assistant.models.event import MassEvent from .enums import EventType, MediaType, ProviderType -from .media_items import MediaItemType +from .media_items import MediaItemType, media_from_dict if TYPE_CHECKING: from music_assistant.mass import MusicAssistant @@ -163,7 +163,7 @@ class MediaControllerBase(Generic[ItemCls], metaclass=ABCMeta): f"{prov.type.value}.search.{self.media_type.value}.{search_query}.{limit}" ) if cache := await self.mass.cache.get(cache_key): - return [self.media_type.from_dict(x) for x in cache] + return [media_from_dict(x) for x in cache] # no items in cache - get listing from provider items = await prov.search( search_query, diff --git a/music_assistant/models/player_queue.py b/music_assistant/models/player_queue.py index 88834c12..7c5e0229 100644 --- a/music_assistant/models/player_queue.py +++ b/music_assistant/models/player_queue.py @@ -544,18 +544,22 @@ class PlayerQueue: async def append(self, queue_items: List[QueueItem]) -> None: """Append new items at the end of the queue.""" - cur_index = self._current_index or 0 for index, item in enumerate(queue_items): item.sort_index = len(self.items) + index if self.settings.shuffle_enabled: # if shuffle is enabled we shuffle the remaining tracks and the new ones - played_items = self.items[:cur_index] - next_items = self.items[cur_index + 1 :] + queue_items - next_items = random.sample(next_items, len(next_items)) - if self.current_item: - queue_items = played_items + [self.current_item] + next_items + cur_index = self.index_in_buffer or self._current_index + if cur_index is None: + played_items = [] + next_items = self.items + queue_items + cur_item = [] else: - queue_items = played_items + next_items + played_items = self.items[:cur_index] if cur_index is not None else [] + next_items = self.items[cur_index + 1 :] + queue_items + cur_item = [self.get_item(cur_index)] + # do the shuffle + next_items = random.sample(next_items, len(next_items)) + queue_items = played_items + cur_item + next_items else: queue_items = self._items + queue_items await self._update_items(queue_items) -- 2.34.1