/
/
/
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.SET_MEMBERS,
23 PlayerFeature.VOLUME_MUTE,
24 PlayerFeature.VOLUME_SET,
25 PlayerFeature.ENQUEUE,
26 PlayerFeature.GAPLESS_PLAYBACK,
27 PlayerFeature.SELECT_SOURCE,
28)
29
30# Source Mapping
31SOURCES_MAP = {
32 MUSIC_SRC_LINE_IN: "Line-in",
33 MUSIC_SRC_TV: "TV",
34 MUSIC_SRC_RADIO: "Radio",
35 MUSIC_SRC_SPOTIFY_CONNECT: "Spotify",
36 MUSIC_SRC_AIRPLAY: "AirPlay",
37}
38
39SOURCE_AIRPLAY = "AirPlay"
40SOURCE_LINEIN = "Line-in"
41SOURCE_SPOTIFY_CONNECT = "Spotify Connect"
42SOURCE_TV = "TV"
43
44SOURCE_MAPPING = {
45 MUSIC_SRC_AIRPLAY: SOURCE_AIRPLAY,
46 MUSIC_SRC_TV: SOURCE_TV,
47 MUSIC_SRC_LINE_IN: SOURCE_LINEIN,
48 MUSIC_SRC_SPOTIFY_CONNECT: SOURCE_SPOTIFY_CONNECT,
49}
50
51LINEIN_SOURCES = (MUSIC_SRC_TV, MUSIC_SRC_LINE_IN)
52LINEIN_SOURCE_IDS = (SOURCE_TV, SOURCE_LINEIN)
53
54PLAYER_SOURCE_MAP = {
55 SOURCE_LINEIN: PlayerSource(
56 id=SOURCE_LINEIN,
57 name="Line-in",
58 passive=False,
59 can_play_pause=False,
60 can_next_previous=False,
61 can_seek=False,
62 ),
63 SOURCE_TV: PlayerSource(
64 id=SOURCE_TV,
65 name="TV",
66 passive=False,
67 can_play_pause=False,
68 can_next_previous=False,
69 can_seek=False,
70 ),
71 SOURCE_AIRPLAY: PlayerSource(
72 id=SOURCE_AIRPLAY,
73 name="AirPlay",
74 passive=True,
75 can_play_pause=True,
76 can_next_previous=True,
77 can_seek=True,
78 ),
79 SOURCE_SPOTIFY_CONNECT: PlayerSource(
80 id=SOURCE_SPOTIFY_CONNECT,
81 name="Spotify Connect",
82 passive=True,
83 can_play_pause=True,
84 can_next_previous=True,
85 can_seek=True,
86 ),
87}
88
89# Playback State Mapping
90PLAYBACK_STATE_MAP = {
91 "PLAYING": PlaybackState.PLAYING,
92 "PAUSED_PLAYBACK": PlaybackState.PAUSED,
93 "STOPPED": PlaybackState.IDLE,
94 "TRANSITIONING": PlaybackState.PLAYING,
95}
96
97# Sonos State Constants
98SONOS_STATE_PLAYING = "PLAYING"
99SONOS_STATE_TRANSITIONING = "TRANSITIONING"
100
101# Subscription Settings
102SUBSCRIPTION_TIMEOUT = 1200
103SUBSCRIPTION_SERVICES = {
104 "avTransport",
105 "deviceProperties",
106 "renderingControl",
107 "zoneGroupTopology",
108}
109
110# Timing Constants
111NEVER_TIME = 0
112RESUB_COOLDOWN_SECONDS = 10.0
113
114# Position/Duration Keys
115DURATION_SECONDS = "duration_in_s"
116POSITION_SECONDS = "position_in_s"
117
118# UID Constants
119UID_PREFIX = "RINCON_"
120UID_POSTFIX = "01400"
121