From: Marcel van der Veldt Date: Thu, 13 Jun 2024 12:48:27 +0000 (+0200) Subject: Playback/enqueue fixes (#1355) X-Git-Url: https://git.kitaultman.com/?a=commitdiff_plain;h=f99acc359a27bb4648536c558bdcc231f6b851a4;p=music-assistant-server.git Playback/enqueue fixes (#1355) * Fix playback state on Fully Kiosk players * tweaks --- diff --git a/music_assistant/server/controllers/players.py b/music_assistant/server/controllers/players.py index bd545df6..5d739d09 100644 --- a/music_assistant/server/controllers/players.py +++ b/music_assistant/server/controllers/players.py @@ -15,7 +15,6 @@ from music_assistant.common.models.config_entries import ( CONF_ENTRY_ANNOUNCE_VOLUME_STRATEGY, CONF_ENTRY_PLAYER_ICON, CONF_ENTRY_PLAYER_ICON_GROUP, - CONF_ENTRY_TTS_PRE_ANNOUNCE, ) from music_assistant.common.models.enums import ( EventType, @@ -40,6 +39,7 @@ from music_assistant.constants import ( CONF_GROUP_MEMBERS, CONF_HIDE_PLAYER, CONF_PLAYERS, + CONF_TTS_PRE_ANNOUNCE, SYNCGROUP_PREFIX, ) from music_assistant.server.helpers.api import api_command @@ -168,6 +168,12 @@ class PlayerController(CoreController): - player_id: player_id of the player to handle the command. """ + player = self.get(player_id, True) + # Always prefer queue controller's stop (as it also handles some other logic) + if player.active_source == player_id: + await self.mass.player_queues.stop(player_id) + return + # if the player doesn't have our queue controller active, forward the stop command player_id = self._check_redirect(player_id) if player_provider := self.get_player_provider(player_id): await player_provider.cmd_stop(player_id) @@ -179,6 +185,12 @@ class PlayerController(CoreController): - player_id: player_id of the player to handle the command. """ + player = self.get(player_id, True) + # Always prefer queue controller's play (as it also handles some other logic) + if player.active_source == player_id: + await self.mass.player_queues.play(player_id) + return + # if the player doesn't have our queue controller active, forward the stop command player_id = self._check_redirect(player_id) player_provider = self.get_player_provider(player_id) await player_provider.cmd_play(player_id) @@ -190,6 +202,11 @@ class PlayerController(CoreController): - player_id: player_id of the player to handle the command. """ + player = self.get(player_id, True) + # Always prefer queue controller's pause (as it also handles some other logic) + if player.active_source == player_id: + await self.mass.player_queues.pause(player_id) + return player_id = self._check_redirect(player_id) player = self.get(player_id, True) if PlayerFeature.PAUSE not in player.supported_features: @@ -493,10 +510,9 @@ class PlayerController(CoreController): return # determine pre-announce from (group)player config if use_pre_announce is None and "tts" in url: - use_pre_announce = self.mass.config.get_raw_player_config_value( + use_pre_announce = await self.mass.config.get_player_config_value( player_id, - CONF_ENTRY_TTS_PRE_ANNOUNCE.key, - CONF_ENTRY_TTS_PRE_ANNOUNCE.default_value, + CONF_TTS_PRE_ANNOUNCE, ) self.logger.info( "Playback announcement to player %s (with pre-announce: %s): %s", diff --git a/music_assistant/server/controllers/streams.py b/music_assistant/server/controllers/streams.py index b7a97ecf..33451e26 100644 --- a/music_assistant/server/controllers/streams.py +++ b/music_assistant/server/controllers/streams.py @@ -495,8 +495,8 @@ class StreamsController(CoreController): last_fadeout_part = b"" queue.flow_mode = True queue.stream_finished = False - use_crossfade = self.mass.config.get_raw_player_config_value( - queue.queue_id, CONF_CROSSFADE, False + use_crossfade = await self.mass.config.get_player_config_value( + queue.queue_id, CONF_CROSSFADE ) if start_queue_item.media_type != MediaType.TRACK: use_crossfade = False @@ -540,8 +540,8 @@ class StreamsController(CoreController): # set some basic vars pcm_sample_size = int(pcm_format.sample_rate * (pcm_format.bit_depth / 8) * 2) - crossfade_duration = self.mass.config.get_raw_player_config_value( - queue.queue_id, CONF_CROSSFADE_DURATION, 8 + crossfade_duration = await self.mass.config.get_player_config_value( + queue.queue_id, CONF_CROSSFADE_DURATION ) crossfade_size = int(pcm_sample_size * crossfade_duration) bytes_written = 0 diff --git a/music_assistant/server/providers/fully_kiosk/__init__.py b/music_assistant/server/providers/fully_kiosk/__init__.py index 3f6605cd..575b1dbc 100644 --- a/music_assistant/server/providers/fully_kiosk/__init__.py +++ b/music_assistant/server/providers/fully_kiosk/__init__.py @@ -70,7 +70,7 @@ async def get_config_entries( ), ConfigEntry( key=CONF_PASSWORD, - type=ConfigEntryType.STRING, + type=ConfigEntryType.SECURE_STRING, label="Password to use to connect to the Fully Kiosk API.", required=True, ), @@ -149,7 +149,10 @@ class FullyKioskProvider(PlayerProvider): volume = volume_dict[str(AUDIOMANAGER_STREAM_MUSIC)] player.volume_level = volume break - player.current_item_id = self._fully.deviceInfo.get("soundUrlPlaying") + current_url = self._fully.deviceInfo.get("soundUrlPlaying") + player.current_item_id = current_url + if not current_url: + player.state = PlayerState.IDLE player.available = True self.mass.players.update(player_id)