/
/
/
1"""Constants for Sonos S1 Player Provider."""
2
3from __future__ import annotations
4
5from music_assistant_models.enums import PlaybackState, PlayerFeature
6from soco.core import (
7 MUSIC_SRC_AIRPLAY,
8 MUSIC_SRC_LINE_IN,
9 MUSIC_SRC_RADIO,
10 MUSIC_SRC_SPOTIFY_CONNECT,
11 MUSIC_SRC_TV,
12)
13
14from music_assistant.models.player import PlayerSource
15
16# Configuration Keys
17CONF_NETWORK_SCAN = "network_scan"
18CONF_HOUSEHOLD_ID = "household_id"
19
20# Player Features
21PLAYER_FEATURES = (
22 PlayerFeature.PLAY_MEDIA,
23 PlayerFeature.SET_MEMBERS,
24 PlayerFeature.VOLUME_MUTE,
25 PlayerFeature.VOLUME_SET,
26 PlayerFeature.ENQUEUE,
27 PlayerFeature.GAPLESS_PLAYBACK,
28 PlayerFeature.SELECT_SOURCE,
29)
30
31# Source Mapping
32SOURCES_MAP = {
33 MUSIC_SRC_LINE_IN: "Line-in",
34 MUSIC_SRC_TV: "TV",
35 MUSIC_SRC_RADIO: "Radio",
36 MUSIC_SRC_SPOTIFY_CONNECT: "Spotify",
37 MUSIC_SRC_AIRPLAY: "AirPlay",
38}
39
40SOURCE_AIRPLAY = "AirPlay"
41SOURCE_LINEIN = "Line-in"
42SOURCE_SPOTIFY_CONNECT = "Spotify Connect"
43SOURCE_TV = "TV"
44
45SOURCE_MAPPING = {
46 MUSIC_SRC_AIRPLAY: SOURCE_AIRPLAY,
47 MUSIC_SRC_TV: SOURCE_TV,
48 MUSIC_SRC_LINE_IN: SOURCE_LINEIN,
49 MUSIC_SRC_SPOTIFY_CONNECT: SOURCE_SPOTIFY_CONNECT,
50}
51
52LINEIN_SOURCES = (MUSIC_SRC_TV, MUSIC_SRC_LINE_IN)
53LINEIN_SOURCE_IDS = (SOURCE_TV, SOURCE_LINEIN)
54
55PLAYER_SOURCE_MAP = {
56 SOURCE_LINEIN: PlayerSource(
57 id=SOURCE_LINEIN,
58 name="Line-in",
59 passive=False,
60 can_play_pause=False,
61 can_next_previous=False,
62 can_seek=False,
63 ),
64 SOURCE_TV: PlayerSource(
65 id=SOURCE_TV,
66 name="TV",
67 passive=False,
68 can_play_pause=False,
69 can_next_previous=False,
70 can_seek=False,
71 ),
72 SOURCE_AIRPLAY: PlayerSource(
73 id=SOURCE_AIRPLAY,
74 name="AirPlay",
75 passive=True,
76 can_play_pause=True,
77 can_next_previous=True,
78 can_seek=True,
79 ),
80 SOURCE_SPOTIFY_CONNECT: PlayerSource(
81 id=SOURCE_SPOTIFY_CONNECT,
82 name="Spotify Connect",
83 passive=True,
84 can_play_pause=True,
85 can_next_previous=True,
86 can_seek=True,
87 ),
88}
89
90# Playback State Mapping
91PLAYBACK_STATE_MAP = {
92 "PLAYING": PlaybackState.PLAYING,
93 "PAUSED_PLAYBACK": PlaybackState.PAUSED,
94 "STOPPED": PlaybackState.IDLE,
95 "TRANSITIONING": PlaybackState.PLAYING,
96}
97
98# Sonos State Constants
99SONOS_STATE_PLAYING = "PLAYING"
100SONOS_STATE_TRANSITIONING = "TRANSITIONING"
101
102# Subscription Settings
103SUBSCRIPTION_TIMEOUT = 1200
104SUBSCRIPTION_SERVICES = {
105 "avTransport",
106 "deviceProperties",
107 "renderingControl",
108 "zoneGroupTopology",
109}
110
111# Timing Constants
112NEVER_TIME = 0
113RESUB_COOLDOWN_SECONDS = 10.0
114
115# Position/Duration Keys
116DURATION_SECONDS = "duration_in_s"
117POSITION_SECONDS = "position_in_s"
118
119# UID Constants
120UID_PREFIX = "RINCON_"
121UID_POSTFIX = "01400"
122