Add auto play feature (#772)
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Wed, 12 Jul 2023 14:36:41 +0000 (16:36 +0200)
committerGitHub <noreply@github.com>
Wed, 12 Jul 2023 14:36:41 +0000 (16:36 +0200)
music_assistant/common/models/config_entries.py
music_assistant/constants.py
music_assistant/server/controllers/player_queues.py
music_assistant/server/controllers/players.py

index 547694919ae3e02fe31f27e158d24995abcb5be9..4e9974dc644bf2a5f6ea2e32bc3d956ac14b2ad3 100644 (file)
@@ -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,
index 4744a9c7221aef0e9310837572a3161f0fbf1038..e0bbf0b2fc804c183688173c4f30489d8cdcc884 100755 (executable)
@@ -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"
index 9aa0cf859a37f9c511c8b5140bcdcba283b27b27..592f76f3e98bcc3180159fe0001c11e9b4e044e7 100755 (executable)
@@ -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 = (
index c8db41a82190b98aab5f5750114f2f17f2becef7..86e7203dcb7ae0e1cf769c266faea72408160e46 100755 (executable)
@@ -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: