From 3f6de105c69a8ad4e6626795aaf963fa0ec6171b Mon Sep 17 00:00:00 2001 From: Marcel van der Veldt Date: Wed, 12 Jul 2023 16:36:41 +0200 Subject: [PATCH] Add auto play feature (#772) --- music_assistant/common/models/config_entries.py | 11 +++++++++++ music_assistant/constants.py | 1 + .../server/controllers/player_queues.py | 2 -- music_assistant/server/controllers/players.py | 14 +++++++++++++- 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/music_assistant/common/models/config_entries.py b/music_assistant/common/models/config_entries.py index 54769491..4e9974dc 100644 --- a/music_assistant/common/models/config_entries.py +++ b/music_assistant/common/models/config_entries.py @@ -12,6 +12,7 @@ from mashumaro import DataClassDictMixin from music_assistant.common.models.enums import ProviderType from music_assistant.common.models.provider import ProviderManifest from music_assistant.constants import ( + CONF_AUTO_PLAY, CONF_CROSSFADE_DURATION, CONF_EQ_BASS, CONF_EQ_MID, @@ -329,6 +330,15 @@ CONF_ENTRY_FLOW_MODE = ConfigEntry( advanced=False, ) +CONF_ENTRY_AUTO_PLAY = ConfigEntry( + key=CONF_AUTO_PLAY, + type=ConfigEntryType.BOOLEAN, + label="Automatically play/resume on power on", + default_value=False, + description="When this player is turned ON, automatically start playing " + "(if there are items in the queue).", +) + CONF_ENTRY_OUTPUT_CHANNELS = ConfigEntry( key=CONF_OUTPUT_CHANNELS, type=ConfigEntryType.STRING, @@ -425,6 +435,7 @@ CONF_ENTRY_CROSSFADE_DURATION = ConfigEntry( DEFAULT_PLAYER_CONFIG_ENTRIES = ( CONF_ENTRY_VOLUME_NORMALIZATION, CONF_ENTRY_FLOW_MODE, + CONF_ENTRY_AUTO_PLAY, CONF_ENTRY_OUTPUT_CODEC, CONF_ENTRY_VOLUME_NORMALIZATION_TARGET, CONF_ENTRY_EQ_BASS, diff --git a/music_assistant/constants.py b/music_assistant/constants.py index 4744a9c7..e0bbf0b2 100755 --- a/music_assistant/constants.py +++ b/music_assistant/constants.py @@ -49,6 +49,7 @@ CONF_CROSSFADE_DURATION: Final[str] = "crossfade_duration" CONF_BIND_IP: Final[str] = "bind_ip" CONF_BIND_PORT: Final[str] = "bind_port" CONF_PUBLISH_IP: Final[str] = "publish_ip" +CONF_AUTO_PLAY: Final[str] = "auto_play" # config default values DEFAULT_HOST: Final[str] = "0.0.0.0" diff --git a/music_assistant/server/controllers/player_queues.py b/music_assistant/server/controllers/player_queues.py index 9aa0cf85..592f76f3 100755 --- a/music_assistant/server/controllers/player_queues.py +++ b/music_assistant/server/controllers/player_queues.py @@ -495,8 +495,6 @@ class PlayerQueuesController(CoreController): raise FileNotFoundError(f"Unknown index/id: {index}") queue.current_index = index queue.index_in_buffer = index - # power on player if needed - await self.mass.players.cmd_power(queue_id, True) # execute the play_media command on the player queue_player = self.mass.players.get(queue_id) need_multi_stream = ( diff --git a/music_assistant/server/controllers/players.py b/music_assistant/server/controllers/players.py index c8db41a8..86e7203d 100755 --- a/music_assistant/server/controllers/players.py +++ b/music_assistant/server/controllers/players.py @@ -21,7 +21,12 @@ from music_assistant.common.models.errors import ( UnsupportedFeaturedException, ) from music_assistant.common.models.player import Player -from music_assistant.constants import CONF_HIDE_GROUP_CHILDS, CONF_PLAYERS, ROOT_LOGGER_NAME +from music_assistant.constants import ( + CONF_AUTO_PLAY, + CONF_HIDE_GROUP_CHILDS, + CONF_PLAYERS, + ROOT_LOGGER_NAME, +) from music_assistant.server.helpers.api import api_command from music_assistant.server.models.core_controller import CoreController from music_assistant.server.models.player_provider import PlayerProvider @@ -380,6 +385,13 @@ class PlayerController(CoreController): continue if player_prov := self.get_player_provider(group_player.player_id): await player_prov.on_child_power(group_player.player_id, player, powered) + break + else: + # auto play feature + if powered and self.mass.config.get_raw_player_config_value( + player_id, CONF_AUTO_PLAY, False + ): + await self.mass.player_queues.resume(player_id) @api_command("players/cmd/volume_set") async def cmd_volume_set(self, player_id: str, volume_level: int) -> None: -- 2.34.1