/
/
/
1"""Constants for the MusicCast provider."""
2
3from aiomusiccast.capabilities import BinarySensor as MCBinarySensor
4from aiomusiccast.capabilities import BinarySetter as MCBinarySetter
5from aiomusiccast.capabilities import NumberSensor as MCNumberSensor
6from aiomusiccast.capabilities import NumberSetter as MCNumberSetter
7from aiomusiccast.capabilities import OptionSetter as MCOptionSetter
8from aiomusiccast.capabilities import TextSensor as MCTextSensor
9
10from music_assistant.constants import (
11 CONF_ENTRY_HTTP_PROFILE_DEFAULT_2,
12 CONF_ENTRY_ICY_METADATA_HIDDEN_DISABLED,
13 create_sample_rates_config_entry,
14)
15
16# Constants for players
17# both the http profile and icy didn't matter for me testing it.
18PLAYER_CONFIG_ENTRIES = [
19 CONF_ENTRY_HTTP_PROFILE_DEFAULT_2,
20 CONF_ENTRY_ICY_METADATA_HIDDEN_DISABLED,
21 create_sample_rates_config_entry(max_sample_rate=192000, max_bit_depth=24),
22]
23# player id is {device_id}{ZONE_SPLITTER}{zone_name}
24PLAYER_ZONE_SPLITTER = "___" # must be url ok
25
26# Switch to these non netusb sources when leaving a group as a dev
27# with multiple zones. Optionally turn device off.
28CONF_PLAYER_HANDLE_SOURCE_DISABLED = "handle_source_allowed"
29CONF_PLAYER_SWITCH_SOURCE_NON_NET = "main_switch_source"
30CONF_PLAYER_TURN_OFF_ON_LEAVE = "turn_off_on_leave"
31MAIN_SWITCH_SOURCE_NON_NET = "audio1"
32PLAYER_ZONE2_SWITCH_SOURCE_NON_NET = "audio2"
33PLAYER_ZONE3_SWITCH_SOURCE_NON_NET = "audio3"
34PLAYER_ZONE4_SWITCH_SOURCE_NON_NET = "audio4"
35
36
37# MusicCast constants
38MC_POLL_INTERVAL = 10
39MC_PLAY_TITLE = "Music Assistant"
40
41MC_DEVICE_INFO_ENDPOINT = "YamahaExtendedControl/v1/system/getDeviceInfo"
42MC_DEVICE_UPNP_ENDPOINT = "MediaRenderer/desc.xml"
43# if this is not a constant, we'll have to do some xml parsing
44MC_DEVICE_UPNP_CTRL_ENDPOINT = "AVTransport/ctrl"
45MC_DEVICE_UPNP_PORT = 49154
46MC_NULL_GROUP = "00000000000000000000000000000000"
47MC_DEFAULT_ZONE = "main"
48
49MC_SOURCE_MC_LINK = "mc_link"
50MC_SOURCE_MAIN_SYNC = "main_sync"
51MC_LINK_SOURCES = [MC_SOURCE_MC_LINK, MC_SOURCE_MAIN_SYNC]
52
53MC_PASSIVE_SOURCE_IDS = [MC_SOURCE_MC_LINK]
54MC_NETUSB_SOURCE_IDS = [
55 "napster",
56 "spotify",
57 "qobuz",
58 "tidal",
59 "deezer",
60 "amazon_music",
61 "alexa",
62 "airplay",
63 "usb",
64 "server",
65 "net_radio",
66 "bluetooth",
67 # these were in aiomusiccast/musiccast_media_content.py:
68 "pandora",
69 "rhapsody",
70 "siriusxm",
71 "juke",
72 "radiko",
73]
74MC_CONTROL_SOURCE_IDS = MC_NETUSB_SOURCE_IDS
75MC_CONTROL_SOURCE_IDS.append(
76 # tuner can be controlled, will change the station
77 "tuner",
78)
79
80# for most sound modes we can just split at '_' and capitalize
81# here are some exceptions:
82MC_SOUND_MODE_FRIENDLY_NAMES = {
83 "2ch_stereo": "2 Channel Stereo",
84 "all_ch_stereo": "All Channels Stereo",
85 "surr_decoder": "Surround Decoder",
86}
87
88# We translate aiomusiccast's capabilities to PlayerOptions
89MC_CAPABILITIES = (
90 MCBinarySensor
91 | MCBinarySetter
92 | MCNumberSensor
93 | MCNumberSetter
94 | MCTextSensor
95 | MCOptionSetter
96)
97