Revert "Remove snapcast YAML configuration (#93547)" (#95523)

This commit is contained in:
Franck Nijhof 2023-06-29 12:00:41 +02:00 committed by GitHub
parent 34ac541493
commit 06d47185fe
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 70 additions and 2 deletions

View file

@ -51,3 +51,13 @@ class SnapcastConfigFlow(ConfigFlow, domain=DOMAIN):
return self.async_show_form(
step_id="user", data_schema=SNAPCAST_SCHEMA, errors=errors
)
async def async_step_import(self, import_config: dict[str, str]) -> FlowResult:
"""Import a config entry from configuration.yaml."""
self._async_abort_entries_match(
{
CONF_HOST: (import_config[CONF_HOST]),
CONF_PORT: (import_config[CONF_PORT]),
}
)
return self.async_create_entry(title=DEFAULT_TITLE, data=import_config)

View file

@ -1,19 +1,24 @@
"""Support for interacting with Snapcast clients."""
from __future__ import annotations
from snapcast.control.server import Snapserver
import logging
from snapcast.control.server import CONTROL_PORT, Snapserver
import voluptuous as vol
from homeassistant.components.media_player import (
PLATFORM_SCHEMA,
MediaPlayerEntity,
MediaPlayerEntityFeature,
MediaPlayerState,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry
from homeassistant.const import CONF_HOST, CONF_PORT
from homeassistant.core import HomeAssistant
from homeassistant.helpers import config_validation as cv, entity_platform
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.issue_registry import IssueSeverity, async_create_issue
from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
from .const import (
ATTR_LATENCY,
@ -30,6 +35,12 @@ from .const import (
SERVICE_UNJOIN,
)
_LOGGER = logging.getLogger(__name__)
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
{vol.Required(CONF_HOST): cv.string, vol.Optional(CONF_PORT): cv.port}
)
STREAM_STATUS = {
"idle": MediaPlayerState.IDLE,
"playing": MediaPlayerState.PLAYING,
@ -82,6 +93,32 @@ async def async_setup_entry(
].hass_async_add_entities = async_add_entities
async def async_setup_platform(
hass: HomeAssistant,
config: ConfigType,
async_add_entities: AddEntitiesCallback,
discovery_info: DiscoveryInfoType | None = None,
) -> None:
"""Set up the Snapcast platform."""
async_create_issue(
hass,
DOMAIN,
"deprecated_yaml",
breaks_in_ha_version="2023.11.0",
is_fixable=False,
severity=IssueSeverity.WARNING,
translation_key="deprecated_yaml",
)
config[CONF_PORT] = config.get(CONF_PORT, CONTROL_PORT)
hass.async_create_task(
hass.config_entries.flow.async_init(
DOMAIN, context={"source": SOURCE_IMPORT}, data=config
)
)
async def handle_async_join(entity, service_call):
"""Handle the entity service join."""
if not isinstance(entity, SnapcastClientDevice):

View file

@ -17,5 +17,11 @@
"cannot_connect": "[%key:common::config_flow::error::cannot_connect%]",
"invalid_host": "[%key:common::config_flow::error::invalid_host%]"
}
},
"issues": {
"deprecated_yaml": {
"title": "The Snapcast YAML configuration is being removed",
"description": "Configuring Snapcast using YAML is being removed.\n\nYour existing YAML configuration has been imported into the UI automatically.\n\nRemove the Snapcast YAML configuration from your configuration.yaml file and restart Home Assistant to fix this issue."
}
}
}

View file

@ -93,3 +93,18 @@ async def test_abort(
assert result["type"] == FlowResultType.ABORT
assert result["reason"] == "already_configured"
async def test_import(hass: HomeAssistant) -> None:
"""Test successful import."""
result = await hass.config_entries.flow.async_init(
DOMAIN,
context={"source": config_entries.SOURCE_IMPORT},
data=TEST_CONNECTION,
)
await hass.async_block_till_done()
assert result["type"] == FlowResultType.CREATE_ENTRY
assert result["title"] == "Snapcast"
assert result["data"] == {CONF_HOST: "snapserver.test", CONF_PORT: 1705}