From: Marcel van der Veldt Date: Wed, 10 Apr 2024 21:46:13 +0000 (+0200) Subject: fix player settings X-Git-Url: https://git.kitaultman.com/?a=commitdiff_plain;h=8eac28b360a1ad199a95b4f02ec4cb4b2dc4ce64;p=music-assistant-server.git fix player settings --- diff --git a/music_assistant/common/models/config_entries.py b/music_assistant/common/models/config_entries.py index 1d0ba739..48361e34 100644 --- a/music_assistant/common/models/config_entries.py +++ b/music_assistant/common/models/config_entries.py @@ -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, diff --git a/music_assistant/server/providers/airplay/__init__.py b/music_assistant/server/providers/airplay/__init__.py index 55d0d1fc..cdf8dabe 100644 --- a/music_assistant/server/providers/airplay/__init__.py +++ b/music_assistant/server/providers/airplay/__init__.py @@ -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, diff --git a/music_assistant/server/providers/chromecast/__init__.py b/music_assistant/server/providers/chromecast/__init__.py index 564796d7..5b66ef26 100644 --- a/music_assistant/server/providers/chromecast/__init__.py +++ b/music_assistant/server/providers/chromecast/__init__.py @@ -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, ) diff --git a/music_assistant/server/providers/dlna/__init__.py b/music_assistant/server/providers/dlna/__init__.py index 592d42e2..af2a5e15 100644 --- a/music_assistant/server/providers/dlna/__init__.py +++ b/music_assistant/server/providers/dlna/__init__.py @@ -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, ) diff --git a/music_assistant/server/providers/fully_kiosk/__init__.py b/music_assistant/server/providers/fully_kiosk/__init__.py index 878ec8d5..62e1ff56 100644 --- a/music_assistant/server/providers/fully_kiosk/__init__.py +++ b/music_assistant/server/providers/fully_kiosk/__init__.py @@ -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: diff --git a/music_assistant/server/providers/hass_players/__init__.py b/music_assistant/server/providers/hass_players/__init__.py index 89ad8488..1fd7275d 100644 --- a/music_assistant/server/providers/hass_players/__init__.py +++ b/music_assistant/server/providers/hass_players/__init__.py @@ -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, ) diff --git a/music_assistant/server/providers/snapcast/__init__.py b/music_assistant/server/providers/snapcast/__init__.py index 330933f6..cbc3e29f 100644 --- a/music_assistant/server/providers/snapcast/__init__.py +++ b/music_assistant/server/providers/snapcast/__init__.py @@ -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.""" diff --git a/music_assistant/server/providers/ugp/__init__.py b/music_assistant/server/providers/ugp/__init__.py index cb764060..2dc45bb0 100644 --- a/music_assistant/server/providers/ugp/__init__.py +++ b/music_assistant/server/providers/ugp/__init__.py @@ -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, )