mirror of
https://github.com/home-assistant/core.git
synced 2025-06-11 00:27:10 +00:00
Ensure sonos always gets ssdp callbacks from searches (#56591)
This commit is contained in:
parent
6399730d2f
commit
26e031984b
@ -2,7 +2,7 @@
|
|||||||
"domain": "dlna_dmr",
|
"domain": "dlna_dmr",
|
||||||
"name": "DLNA Digital Media Renderer",
|
"name": "DLNA Digital Media Renderer",
|
||||||
"documentation": "https://www.home-assistant.io/integrations/dlna_dmr",
|
"documentation": "https://www.home-assistant.io/integrations/dlna_dmr",
|
||||||
"requirements": ["async-upnp-client==0.21.2"],
|
"requirements": ["async-upnp-client==0.22.1"],
|
||||||
"dependencies": ["network"],
|
"dependencies": ["network"],
|
||||||
"codeowners": [],
|
"codeowners": [],
|
||||||
"iot_class": "local_push"
|
"iot_class": "local_push"
|
||||||
|
@ -71,13 +71,13 @@ SsdpCallback = Callable[[Mapping[str, Any], SsdpChange], Awaitable]
|
|||||||
|
|
||||||
|
|
||||||
SSDP_SOURCE_SSDP_CHANGE_MAPPING: Mapping[SsdpSource, SsdpChange] = {
|
SSDP_SOURCE_SSDP_CHANGE_MAPPING: Mapping[SsdpSource, SsdpChange] = {
|
||||||
SsdpSource.SEARCH: SsdpChange.ALIVE,
|
SsdpSource.SEARCH_ALIVE: SsdpChange.ALIVE,
|
||||||
|
SsdpSource.SEARCH_CHANGED: SsdpChange.ALIVE,
|
||||||
SsdpSource.ADVERTISEMENT_ALIVE: SsdpChange.ALIVE,
|
SsdpSource.ADVERTISEMENT_ALIVE: SsdpChange.ALIVE,
|
||||||
SsdpSource.ADVERTISEMENT_BYEBYE: SsdpChange.BYEBYE,
|
SsdpSource.ADVERTISEMENT_BYEBYE: SsdpChange.BYEBYE,
|
||||||
SsdpSource.ADVERTISEMENT_UPDATE: SsdpChange.UPDATE,
|
SsdpSource.ADVERTISEMENT_UPDATE: SsdpChange.UPDATE,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
@ -374,26 +374,39 @@ class Scanner:
|
|||||||
]
|
]
|
||||||
|
|
||||||
async def _ssdp_listener_callback(
|
async def _ssdp_listener_callback(
|
||||||
self, ssdp_device: SsdpDevice, dst: DeviceOrServiceType, source: SsdpSource
|
self,
|
||||||
|
ssdp_device: SsdpDevice,
|
||||||
|
dst: DeviceOrServiceType,
|
||||||
|
source: SsdpSource,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Handle a device/service change."""
|
"""Handle a device/service change."""
|
||||||
_LOGGER.debug(
|
_LOGGER.debug(
|
||||||
"Change, ssdp_device: %s, dst: %s, source: %s", ssdp_device, dst, source
|
"SSDP: ssdp_device: %s, dst: %s, source: %s", ssdp_device, dst, source
|
||||||
)
|
)
|
||||||
|
|
||||||
location = ssdp_device.location
|
location = ssdp_device.location
|
||||||
info_desc = await self._async_get_description_dict(location) or {}
|
info_desc = await self._async_get_description_dict(location) or {}
|
||||||
combined_headers = ssdp_device.combined_headers(dst)
|
combined_headers = ssdp_device.combined_headers(dst)
|
||||||
info_with_desc = CaseInsensitiveDict(combined_headers, **info_desc)
|
info_with_desc = CaseInsensitiveDict(combined_headers, **info_desc)
|
||||||
discovery_info = discovery_info_from_headers_and_description(info_with_desc)
|
|
||||||
|
|
||||||
callbacks = self._async_get_matching_callbacks(combined_headers)
|
callbacks = self._async_get_matching_callbacks(combined_headers)
|
||||||
|
matching_domains: set[str] = set()
|
||||||
|
|
||||||
|
# If there are no changes from a search, do not trigger a config flow
|
||||||
|
if source != SsdpSource.SEARCH_ALIVE:
|
||||||
|
matching_domains = self.integration_matchers.async_matching_domains(
|
||||||
|
info_with_desc
|
||||||
|
)
|
||||||
|
|
||||||
|
if not callbacks and not matching_domains:
|
||||||
|
return
|
||||||
|
|
||||||
|
discovery_info = discovery_info_from_headers_and_description(info_with_desc)
|
||||||
ssdp_change = SSDP_SOURCE_SSDP_CHANGE_MAPPING[source]
|
ssdp_change = SSDP_SOURCE_SSDP_CHANGE_MAPPING[source]
|
||||||
await _async_process_callbacks(callbacks, discovery_info, ssdp_change)
|
await _async_process_callbacks(callbacks, discovery_info, ssdp_change)
|
||||||
|
|
||||||
for domain in self.integration_matchers.async_matching_domains(info_with_desc):
|
for domain in matching_domains:
|
||||||
_LOGGER.debug("Discovered %s at %s", domain, location)
|
_LOGGER.debug("Discovered %s at %s", domain, location)
|
||||||
|
|
||||||
flow: SSDPFlow = {
|
flow: SSDPFlow = {
|
||||||
"domain": domain,
|
"domain": domain,
|
||||||
"context": {"source": config_entries.SOURCE_SSDP},
|
"context": {"source": config_entries.SOURCE_SSDP},
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
"documentation": "https://www.home-assistant.io/integrations/ssdp",
|
"documentation": "https://www.home-assistant.io/integrations/ssdp",
|
||||||
"requirements": [
|
"requirements": [
|
||||||
"defusedxml==0.7.1",
|
"defusedxml==0.7.1",
|
||||||
"async-upnp-client==0.21.2"
|
"async-upnp-client==0.22.1"
|
||||||
],
|
],
|
||||||
"dependencies": ["network"],
|
"dependencies": ["network"],
|
||||||
"after_dependencies": ["zeroconf"],
|
"after_dependencies": ["zeroconf"],
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
"name": "UPnP/IGD",
|
"name": "UPnP/IGD",
|
||||||
"config_flow": true,
|
"config_flow": true,
|
||||||
"documentation": "https://www.home-assistant.io/integrations/upnp",
|
"documentation": "https://www.home-assistant.io/integrations/upnp",
|
||||||
"requirements": ["async-upnp-client==0.21.2"],
|
"requirements": ["async-upnp-client==0.22.1"],
|
||||||
"dependencies": ["network", "ssdp"],
|
"dependencies": ["network", "ssdp"],
|
||||||
"codeowners": ["@StevenLooman","@ehendrix23"],
|
"codeowners": ["@StevenLooman","@ehendrix23"],
|
||||||
"ssdp": [
|
"ssdp": [
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
"domain": "yeelight",
|
"domain": "yeelight",
|
||||||
"name": "Yeelight",
|
"name": "Yeelight",
|
||||||
"documentation": "https://www.home-assistant.io/integrations/yeelight",
|
"documentation": "https://www.home-assistant.io/integrations/yeelight",
|
||||||
"requirements": ["yeelight==0.7.5", "async-upnp-client==0.21.2"],
|
"requirements": ["yeelight==0.7.5", "async-upnp-client==0.22.1"],
|
||||||
"codeowners": ["@rytilahti", "@zewelor", "@shenxn", "@starkillerOG"],
|
"codeowners": ["@rytilahti", "@zewelor", "@shenxn", "@starkillerOG"],
|
||||||
"config_flow": true,
|
"config_flow": true,
|
||||||
"dependencies": ["network"],
|
"dependencies": ["network"],
|
||||||
|
@ -4,7 +4,7 @@ aiodiscover==1.4.2
|
|||||||
aiohttp==3.7.4.post0
|
aiohttp==3.7.4.post0
|
||||||
aiohttp_cors==0.7.0
|
aiohttp_cors==0.7.0
|
||||||
astral==2.2
|
astral==2.2
|
||||||
async-upnp-client==0.21.2
|
async-upnp-client==0.22.1
|
||||||
async_timeout==3.0.1
|
async_timeout==3.0.1
|
||||||
attrs==21.2.0
|
attrs==21.2.0
|
||||||
awesomeversion==21.8.1
|
awesomeversion==21.8.1
|
||||||
|
@ -327,7 +327,7 @@ asterisk_mbox==0.5.0
|
|||||||
# homeassistant.components.ssdp
|
# homeassistant.components.ssdp
|
||||||
# homeassistant.components.upnp
|
# homeassistant.components.upnp
|
||||||
# homeassistant.components.yeelight
|
# homeassistant.components.yeelight
|
||||||
async-upnp-client==0.21.2
|
async-upnp-client==0.22.1
|
||||||
|
|
||||||
# homeassistant.components.supla
|
# homeassistant.components.supla
|
||||||
asyncpysupla==0.0.5
|
asyncpysupla==0.0.5
|
||||||
|
@ -221,7 +221,7 @@ arcam-fmj==0.7.0
|
|||||||
# homeassistant.components.ssdp
|
# homeassistant.components.ssdp
|
||||||
# homeassistant.components.upnp
|
# homeassistant.components.upnp
|
||||||
# homeassistant.components.yeelight
|
# homeassistant.components.yeelight
|
||||||
async-upnp-client==0.21.2
|
async-upnp-client==0.22.1
|
||||||
|
|
||||||
# homeassistant.components.aurora
|
# homeassistant.components.aurora
|
||||||
auroranoaa==0.0.2
|
auroranoaa==0.0.2
|
||||||
|
Loading…
x
Reference in New Issue
Block a user