fix player settings
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Wed, 10 Apr 2024 21:46:13 +0000 (23:46 +0200)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Wed, 10 Apr 2024 21:46:13 +0000 (23:46 +0200)
music_assistant/common/models/config_entries.py
music_assistant/server/providers/airplay/__init__.py
music_assistant/server/providers/chromecast/__init__.py
music_assistant/server/providers/dlna/__init__.py
music_assistant/server/providers/fully_kiosk/__init__.py
music_assistant/server/providers/hass_players/__init__.py
music_assistant/server/providers/snapcast/__init__.py
music_assistant/server/providers/ugp/__init__.py

index 1d0ba7396db96112c5e348e639882a5a71bf2d0c..48361e34166642472c0ebca1a6aae98c6acd5ee9 100644 (file)
@@ -321,6 +321,13 @@ CONF_ENTRY_FLOW_MODE = ConfigEntry(
     default_value=False,
 )
 
+CONF_ENTRY_FLOW_MODE_ENFORCED = ConfigEntry(
+    key=CONF_FLOW_MODE,
+    type=ConfigEntryType.BOOLEAN,
+    label=CONF_FLOW_MODE,
+    default_value=True,
+    value=True,
+)
 
 CONF_ENTRY_AUTO_PLAY = ConfigEntry(
     key=CONF_AUTO_PLAY,
@@ -405,6 +412,17 @@ CONF_ENTRY_CROSSFADE = ConfigEntry(
     category="audio",
 )
 
+CONF_ENTRY_CROSSFADE_FLOW_MODE_REQUIRED = ConfigEntry(
+    key=CONF_CROSSFADE,
+    type=ConfigEntryType.BOOLEAN,
+    label="Enable crossfade",
+    default_value=False,
+    description="Enable a crossfade transition between (queue) tracks.\n\n "
+    "Requires flow-mode to be enabled",
+    category="audio",
+    depends_on=CONF_FLOW_MODE,
+)
+
 CONF_ENTRY_CROSSFADE_DURATION = ConfigEntry(
     key=CONF_CROSSFADE_DURATION,
     type=ConfigEntryType.INTEGER,
index 55d0d1fcf004cea0e3a4f582408c90c3ffb24f2f..cdf8dabed8cbd7ddb9802aa1011ed8a1640b27b0 100644 (file)
@@ -24,6 +24,7 @@ from music_assistant.common.models.config_entries import (
     CONF_ENTRY_EQ_BASS,
     CONF_ENTRY_EQ_MID,
     CONF_ENTRY_EQ_TREBLE,
+    CONF_ENTRY_FLOW_MODE_ENFORCED,
     CONF_ENTRY_OUTPUT_CHANNELS,
     CONF_ENTRY_SYNC_ADJUST,
     ConfigEntry,
@@ -62,6 +63,7 @@ CONF_PASSWORD = "password"
 
 
 PLAYER_CONFIG_ENTRIES = (
+    CONF_ENTRY_FLOW_MODE_ENFORCED,
     CONF_ENTRY_CROSSFADE,
     CONF_ENTRY_CROSSFADE_DURATION,
     CONF_ENTRY_EQ_BASS,
index 564796d71455338950759d79f9b15621623f8734..5b66ef26d01fa1c8d28024979489c9cfdbbef6d0 100644 (file)
@@ -19,26 +19,14 @@ from pychromecast.socket_client import CONNECTION_STATUS_CONNECTED, CONNECTION_S
 
 from music_assistant.common.models.config_entries import (
     CONF_ENTRY_CROSSFADE_DURATION,
-    CONF_ENTRY_FLOW_MODE,
+    CONF_ENTRY_CROSSFADE_FLOW_MODE_REQUIRED,
     ConfigEntry,
     ConfigValueType,
 )
-from music_assistant.common.models.enums import (
-    ConfigEntryType,
-    MediaType,
-    PlayerFeature,
-    PlayerState,
-    PlayerType,
-)
+from music_assistant.common.models.enums import MediaType, PlayerFeature, PlayerState, PlayerType
 from music_assistant.common.models.errors import PlayerUnavailableError
 from music_assistant.common.models.player import DeviceInfo, Player, PlayerMedia
-from music_assistant.constants import (
-    CONF_CROSSFADE,
-    CONF_FLOW_MODE,
-    CONF_PLAYERS,
-    MASS_LOGO_ONLINE,
-    VERBOSE_LOG_LEVEL,
-)
+from music_assistant.constants import CONF_PLAYERS, MASS_LOGO_ONLINE, VERBOSE_LOG_LEVEL
 from music_assistant.server.models.player_provider import PlayerProvider
 
 from .helpers import CastStatusListener, ChromecastInfo
@@ -56,18 +44,7 @@ if TYPE_CHECKING:
 
 
 PLAYER_CONFIG_ENTRIES = (
-    ConfigEntry(
-        key=CONF_CROSSFADE,
-        type=ConfigEntryType.BOOLEAN,
-        label="Enable crossfade",
-        default_value=False,
-        description="Enable a crossfade transition between (queue) tracks. \n\n"
-        "Note that Cast does not natively support crossfading so you need to enable "
-        "the 'flow mode' workaround to use crossfading with Cast players.",
-        category="audio",
-        depends_on=CONF_FLOW_MODE,
-    ),
-    CONF_ENTRY_FLOW_MODE,
+    CONF_ENTRY_CROSSFADE_FLOW_MODE_REQUIRED,
     CONF_ENTRY_CROSSFADE_DURATION,
 )
 
index 592d42e23b41df7f3464a2eb13ce566998b8ca07..af2a5e15885f417c90afb98a14f295c6229c4211 100644 (file)
@@ -25,8 +25,8 @@ from async_upnp_client.search import async_search
 
 from music_assistant.common.models.config_entries import (
     CONF_ENTRY_CROSSFADE_DURATION,
+    CONF_ENTRY_CROSSFADE_FLOW_MODE_REQUIRED,
     CONF_ENTRY_ENFORCE_MP3,
-    CONF_ENTRY_FLOW_MODE,
     ConfigEntry,
     ConfigValueType,
 )
@@ -38,13 +38,7 @@ from music_assistant.common.models.enums import (
 )
 from music_assistant.common.models.errors import PlayerUnavailableError
 from music_assistant.common.models.player import DeviceInfo, Player, PlayerMedia
-from music_assistant.constants import (
-    CONF_CROSSFADE,
-    CONF_ENFORCE_MP3,
-    CONF_FLOW_MODE,
-    CONF_PLAYERS,
-    VERBOSE_LOG_LEVEL,
-)
+from music_assistant.constants import CONF_ENFORCE_MP3, CONF_PLAYERS, VERBOSE_LOG_LEVEL
 from music_assistant.server.helpers.didl_lite import create_didl_metadata
 from music_assistant.server.models.player_provider import PlayerProvider
 
@@ -77,20 +71,10 @@ PLAYER_CONFIG_ENTRIES = (
         default_value=False,
         description="If the player supports enqueuing the next item for fluid/gapless playback. "
         "\n\nUnfortunately this feature is missing or broken on many DLNA players. \n"
-        "Enable it with care. If music stops after one song, disable this setting.",
-    ),
-    ConfigEntry(
-        key=CONF_CROSSFADE,
-        type=ConfigEntryType.BOOLEAN,
-        label="Enable crossfade",
-        default_value=False,
-        description="Enable a crossfade transition between (queue) tracks. \n\n"
-        "Note that DLNA does not natively support crossfading so you need to enable "
-        "the 'flow mode' workaround to use crossfading with DLNA players.",
-        category="audio",
-        depends_on=CONF_FLOW_MODE,
+        "Enable it with care. If music stops after one song, "
+        "disable this setting (and use flow-mode instead).",
     ),
-    CONF_ENTRY_FLOW_MODE,
+    CONF_ENTRY_CROSSFADE_FLOW_MODE_REQUIRED,
     CONF_ENTRY_CROSSFADE_DURATION,
     CONF_ENTRY_ENFORCE_MP3,
 )
index 878ec8d5ca094a383f757e9e63aa125d7b56cd8a..62e1ff5656e9eabd58cf21328899f8f823c64f3d 100644 (file)
@@ -12,6 +12,8 @@ from fullykiosk import FullyKiosk
 from music_assistant.common.models.config_entries import (
     CONF_ENTRY_CROSSFADE,
     CONF_ENTRY_CROSSFADE_DURATION,
+    CONF_ENTRY_ENFORCE_MP3,
+    CONF_ENTRY_FLOW_MODE_ENFORCED,
     ConfigEntry,
     ConfigValueType,
 )
@@ -154,18 +156,10 @@ class FullyKioskProvider(PlayerProvider):
         base_entries = await super().get_player_config_entries(player_id)
         return (
             *base_entries,
+            CONF_ENTRY_FLOW_MODE_ENFORCED,
             CONF_ENTRY_CROSSFADE,
             CONF_ENTRY_CROSSFADE_DURATION,
-            ConfigEntry(
-                key=CONF_ENFORCE_MP3,
-                type=ConfigEntryType.BOOLEAN,
-                label="Enforce (lossy) mp3 stream",
-                default_value=False,
-                description="By default, Music Assistant sends lossless, high quality audio "
-                "to all players. Some devices can not deal with that and require "
-                "the stream to be packed into a lossy mp3 codec. Only enable when needed.",
-                category="advanced",
-            ),
+            CONF_ENTRY_ENFORCE_MP3,
         )
 
     async def cmd_volume_set(self, player_id: str, volume_level: int) -> None:
index 89ad8488f325211ec62f90e1b4b89b758260d0a6..1fd7275d89e42ac27f4908f9ce207db8cfc3eece 100644 (file)
@@ -14,7 +14,8 @@ from typing import TYPE_CHECKING, Any
 from music_assistant.common.helpers.datetime import from_iso_string
 from music_assistant.common.models.config_entries import (
     CONF_ENTRY_CROSSFADE_DURATION,
-    CONF_ENTRY_FLOW_MODE,
+    CONF_ENTRY_CROSSFADE_FLOW_MODE_REQUIRED,
+    CONF_ENTRY_ENFORCE_MP3,
     ConfigEntry,
     ConfigValueOption,
     ConfigValueType,
@@ -27,7 +28,6 @@ from music_assistant.common.models.enums import (
 )
 from music_assistant.common.models.errors import SetupFailedError
 from music_assistant.common.models.player import DeviceInfo, Player, PlayerMedia
-from music_assistant.constants import CONF_CROSSFADE, CONF_FLOW_MODE
 from music_assistant.server.models.player_provider import PlayerProvider
 from music_assistant.server.providers.hass import DOMAIN as HASS_DOMAIN
 
@@ -89,30 +89,9 @@ class MediaPlayerEntityFeature(IntFlag):
 CONF_ENFORCE_MP3 = "enforce_mp3"
 
 PLAYER_CONFIG_ENTRIES = (
-    ConfigEntry(
-        key=CONF_CROSSFADE,
-        type=ConfigEntryType.BOOLEAN,
-        label="Enable crossfade",
-        default_value=False,
-        description="Enable a crossfade transition between (queue) tracks. \n\n"
-        "Note that you need to enable the 'flow mode' workaround to use "
-        "crossfading with Home Assistant players.",
-        category="audio",
-        depends_on=CONF_FLOW_MODE,
-    ),
-    CONF_ENTRY_FLOW_MODE,
+    CONF_ENTRY_CROSSFADE_FLOW_MODE_REQUIRED,
     CONF_ENTRY_CROSSFADE_DURATION,
-    ConfigEntry(
-        key=CONF_ENFORCE_MP3,
-        type=ConfigEntryType.BOOLEAN,
-        label="Enforce (lossy) mp3 stream",
-        default_value=False,
-        description="By default, Music Assistant sends lossless, high quality audio "
-        "to all players. Some players can not deal with that and require the stream to be packed "
-        "into a lossy mp3 codec. \n\n "
-        "Only enable when needed. Saves some bandwidth at the cost of audio quality.",
-        category="audio",
-    ),
+    CONF_ENTRY_ENFORCE_MP3,
 )
 
 
index 330933f6514d9153b6bea8c057aa7ea3657e488d..cbc3e29fa8f5603ec0d7dbb26822d6205874f423 100644 (file)
@@ -20,6 +20,7 @@ from music_assistant.common.helpers.util import get_ip_pton
 from music_assistant.common.models.config_entries import (
     CONF_ENTRY_CROSSFADE,
     CONF_ENTRY_CROSSFADE_DURATION,
+    CONF_ENTRY_FLOW_MODE_ENFORCED,
     ConfigEntry,
     ConfigValueType,
 )
@@ -274,7 +275,12 @@ class SnapCastProvider(PlayerProvider):
     async def get_player_config_entries(self, player_id: str) -> tuple[ConfigEntry]:
         """Return all (provider/player specific) Config Entries for the given player (if any)."""
         base_entries = await super().get_player_config_entries(player_id)
-        return (*base_entries, CONF_ENTRY_CROSSFADE, CONF_ENTRY_CROSSFADE_DURATION)
+        return (
+            *base_entries,
+            CONF_ENTRY_FLOW_MODE_ENFORCED,
+            CONF_ENTRY_CROSSFADE,
+            CONF_ENTRY_CROSSFADE_DURATION,
+        )
 
     async def cmd_volume_set(self, player_id: str, volume_level: int) -> None:
         """Send VOLUME_SET command to given player."""
index cb764060bf7bcde79a7e879daa81107f28993132..2dc45bb01f062039d810ef8639f8adecc1738e71 100644 (file)
@@ -15,7 +15,9 @@ import shortuuid
 from aiohttp import web
 
 from music_assistant.common.models.config_entries import (
+    CONF_ENTRY_CROSSFADE,
     CONF_ENTRY_CROSSFADE_DURATION,
+    CONF_ENTRY_FLOW_MODE_ENFORCED,
     ConfigEntry,
     ConfigValueOption,
     ConfigValueType,
@@ -31,7 +33,7 @@ from music_assistant.common.models.enums import (
 )
 from music_assistant.common.models.media_items import AudioFormat
 from music_assistant.common.models.player import DeviceInfo, Player, PlayerMedia
-from music_assistant.constants import CONF_CROSSFADE, CONF_GROUP_MEMBERS, SYNCGROUP_PREFIX
+from music_assistant.constants import CONF_GROUP_MEMBERS, SYNCGROUP_PREFIX
 from music_assistant.server.controllers.streams import DEFAULT_STREAM_HEADERS
 from music_assistant.server.helpers.audio import get_ffmpeg_stream, get_player_filter_params
 from music_assistant.server.helpers.multi_client_stream import MultiClientStream
@@ -111,6 +113,7 @@ class UniversalGroupProvider(PlayerProvider):
         base_entries = await super().get_player_config_entries(player_id)
         return (
             *base_entries,
+            CONF_ENTRY_FLOW_MODE_ENFORCED,
             ConfigEntry(
                 key=CONF_GROUP_MEMBERS,
                 type=ConfigEntryType.STRING,
@@ -132,16 +135,7 @@ class UniversalGroupProvider(PlayerProvider):
                 "allows you to group any player, it will not enable audio sync "
                 "between players of different ecosystems.",
             ),
-            ConfigEntry(
-                key=CONF_CROSSFADE,
-                type=ConfigEntryType.BOOLEAN,
-                label="Enable crossfade",
-                default_value=False,
-                description="Enable a crossfade transition between (queue) tracks. \n\n"
-                "Note that DLNA does not natively support crossfading so you need to enable "
-                "the 'flow mode' workaround to use crossfading with DLNA players.",
-                category="audio",
-            ),
+            CONF_ENTRY_CROSSFADE,
             CONF_ENTRY_CROSSFADE_DURATION,
         )