Files
HomeAssistance/custom_components/spotcast/const.py
T
2026-06-05 22:34:31 -04:00

129 lines
4.3 KiB
Python

from __future__ import annotations
import homeassistant.helpers.config_validation as cv
import voluptuous as vol
from homeassistant.components import websocket_api
from homeassistant.const import CONF_ENTITY_ID, CONF_OFFSET, CONF_REPEAT
APP_SPOTIFY = "CC32E753"
DOMAIN = "spotcast"
CONF_SPOTIFY_DEVICE_ID = "spotify_device_id"
CONF_DEVICE_NAME = "device_name"
CONF_SPOTIFY_URI = "uri"
CONF_SPOTIFY_TRACK_NAME = "track_name"
CONF_SPOTIFY_ARTIST_NAME = "artist_name"
CONF_SPOTIFY_ALBUM_NAME = "album_name"
CONF_SPOTIFY_PLAYLIST_NAME = "playlist_name"
CONF_SPOTIFY_SHOW_NAME = "show_name"
CONF_SPOTIFY_EPISODE_NAME = "episode_name"
CONF_SPOTIFY_AUDIOBOOK_NAME = "audiobook_name"
CONF_SPOTIFY_GENRE_NAME = "genre_name"
CONF_SPOTIFY_CATEGORY = "category"
CONF_SPOTIFY_COUNTRY = "country"
CONF_SPOTIFY_LIMIT = "limit"
CONF_ACCOUNTS = "accounts"
CONF_SPOTIFY_ACCOUNT = "account"
CONF_FORCE_PLAYBACK = "force_playback"
CONF_RANDOM = "random_song"
CONF_SHUFFLE = "shuffle"
CONF_START_POSITION = "start_position"
CONF_SP_DC = "sp_dc"
CONF_SP_KEY = "sp_key"
CONF_START_VOL = "start_volume"
CONF_IGNORE_FULLY_PLAYED = "ignore_fully_played"
WS_TYPE_SPOTCAST_PLAYLISTS = "spotcast/playlists"
SCHEMA_PLAYLISTS = websocket_api.BASE_COMMAND_MESSAGE_SCHEMA.extend(
{
vol.Required("type"): WS_TYPE_SPOTCAST_PLAYLISTS,
vol.Required("playlist_type"): str,
vol.Optional("limit"): int,
vol.Optional("country_code"): str,
vol.Optional("locale"): str,
vol.Optional("account"): str,
}
)
WS_TYPE_SPOTCAST_DEVICES = "spotcast/devices"
SCHEMA_WS_DEVICES = websocket_api.BASE_COMMAND_MESSAGE_SCHEMA.extend(
{
vol.Required("type"): WS_TYPE_SPOTCAST_DEVICES,
vol.Optional("account"): str,
}
)
WS_TYPE_SPOTCAST_PLAYER = "spotcast/player"
SCHEMA_WS_PLAYER = websocket_api.BASE_COMMAND_MESSAGE_SCHEMA.extend(
{
vol.Required("type"): WS_TYPE_SPOTCAST_PLAYER,
vol.Optional("account"): str,
}
)
WS_TYPE_SPOTCAST_ACCOUNTS = "spotcast/accounts"
SCHEMA_WS_ACCOUNTS = websocket_api.BASE_COMMAND_MESSAGE_SCHEMA.extend(
{
vol.Required("type"): WS_TYPE_SPOTCAST_ACCOUNTS,
}
)
WS_TYPE_SPOTCAST_CASTDEVICES = "spotcast/castdevices"
SCHEMA_WS_CASTDEVICES = websocket_api.BASE_COMMAND_MESSAGE_SCHEMA.extend(
{
vol.Required("type"): WS_TYPE_SPOTCAST_CASTDEVICES,
}
)
SERVICE_START_COMMAND_SCHEMA = vol.Schema(
{
vol.Optional(CONF_DEVICE_NAME): cv.string,
vol.Optional(CONF_SPOTIFY_DEVICE_ID): cv.string,
vol.Optional(CONF_ENTITY_ID): cv.string,
vol.Optional(CONF_SPOTIFY_URI): cv.string,
vol.Optional(CONF_SPOTIFY_TRACK_NAME): cv.string,
vol.Optional(CONF_SPOTIFY_ALBUM_NAME): cv.string,
vol.Optional(CONF_SPOTIFY_ARTIST_NAME): cv.string,
vol.Optional(CONF_SPOTIFY_PLAYLIST_NAME): cv.string,
vol.Optional(CONF_SPOTIFY_SHOW_NAME): cv.string,
vol.Optional(CONF_SPOTIFY_EPISODE_NAME): cv.string,
vol.Optional(CONF_SPOTIFY_AUDIOBOOK_NAME): cv.string,
vol.Optional(CONF_SPOTIFY_GENRE_NAME): cv.string,
vol.Optional(CONF_SPOTIFY_CATEGORY): cv.string,
vol.Optional(CONF_SPOTIFY_COUNTRY): cv.string,
vol.Optional(CONF_SPOTIFY_LIMIT, default=20): cv.positive_int,
vol.Optional(CONF_SPOTIFY_ACCOUNT): cv.string,
vol.Optional(CONF_FORCE_PLAYBACK, default=False): cv.boolean,
vol.Optional(CONF_RANDOM, default=False): cv.boolean,
vol.Optional(CONF_REPEAT, default="off"): cv.string,
vol.Optional(CONF_SHUFFLE, default=False): cv.boolean,
vol.Optional(CONF_OFFSET, default=0): cv.string,
vol.Optional(CONF_START_POSITION): cv.positive_int,
vol.Optional(CONF_START_VOL, default=101): cv.positive_int,
vol.Optional(CONF_IGNORE_FULLY_PLAYED, default=False): cv.boolean,
}
)
ACCOUNTS_SCHEMA = vol.Schema(
{
vol.Required(CONF_SP_DC): cv.string,
vol.Required(CONF_SP_KEY): cv.string,
}
)
SPOTCAST_CONFIG_SCHEMA = vol.Schema(
{
DOMAIN: vol.Schema(
{
vol.Required(CONF_SP_DC): cv.string,
vol.Required(CONF_SP_KEY): cv.string,
vol.Optional(CONF_ACCOUNTS): cv.schema_with_slug_keys(ACCOUNTS_SCHEMA),
vol.Optional(CONF_SPOTIFY_COUNTRY): cv.string,
}
),
},
extra=vol.ALLOW_EXTRA,
)