Skip to content

Commit 742e84d

Browse files
committed
feat: update config flow network detect logic
1 parent c5b2f43 commit 742e84d

File tree

1 file changed

+46
-67
lines changed

1 file changed

+46
-67
lines changed

custom_components/xiaomi_home/config_flow.py

+46-67
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
import json
5252
import secrets
5353
import traceback
54-
from typing import Optional, Set
54+
from typing import Optional, Set, Tuple
5555
from urllib.parse import urlparse
5656
from aiohttp import web
5757
from aiohttp.hdrs import METH_GET
@@ -255,36 +255,11 @@ async def async_step_auth_config(
255255
self._cc_network_detect_addr = user_input.get(
256256
'network_detect_addr', self._cc_network_detect_addr)
257257

258-
ip_list: list[str] = []
259-
url_list: list[str] = []
260-
if self._cc_network_detect_addr:
261-
invalid_list: list[str] = []
262-
for addr in self._cc_network_detect_addr.split(','):
263-
addr = addr.strip()
264-
if not addr:
265-
continue
266-
# pylint: disable=broad-exception-caught
267-
try:
268-
ipaddress.ip_address(addr)
269-
ip_list.append(addr)
270-
continue
271-
except Exception:
272-
pass
273-
try:
274-
result = urlparse(addr)
275-
if (
276-
result.netloc
277-
and result.scheme.startswith('http')
278-
):
279-
url_list.append(addr)
280-
continue
281-
except Exception:
282-
pass
283-
invalid_list.append(addr)
284-
if invalid_list:
285-
return await self.__show_auth_config_form(
286-
reason='invalid_network_addr')
287-
network_detect_addr: dict = {}
258+
ip_list, url_list, invalid_list = _handle_network_detect_addr(
259+
addr_str=self._cc_network_detect_addr)
260+
if invalid_list:
261+
return await self.__show_auth_config_form(
262+
reason='invalid_network_addr')
288263
if ip_list or url_list:
289264
if ip_list and not await self._miot_network.ping_multi_async(
290265
ip_list=ip_list):
@@ -294,13 +269,12 @@ async def async_step_auth_config(
294269
url_list=url_list):
295270
return await self.__show_auth_config_form(
296271
reason='invalid_http_addr')
297-
network_detect_addr = {
298-
'ip': ip_list, 'url': url_list}
299272
else:
300273
if not await self._miot_network.get_network_status_async():
301274
return await self.__show_auth_config_form(
302275
reason='invalid_default_addr')
303-
network_detect_addr = {'ip': [], 'url': []}
276+
network_detect_addr = {
277+
'ip': ip_list, 'url': url_list}
304278
if await self._miot_storage.update_user_config_async(
305279
uid='global_config', cloud_server='all', config={
306280
'network_detect_addr': network_detect_addr}):
@@ -1692,36 +1666,11 @@ async def async_step_network_detect_config(
16921666
self._cc_network_detect_addr = user_input.get(
16931667
'network_detect_addr', self._cc_network_detect_addr)
16941668

1695-
ip_list: list[str] = []
1696-
url_list: list[str] = []
1697-
if self._cc_network_detect_addr:
1698-
invalid_list: list[str] = []
1699-
for addr in self._cc_network_detect_addr.split(','):
1700-
addr = addr.strip()
1701-
if not addr:
1702-
continue
1703-
# pylint: disable=broad-exception-caught
1704-
try:
1705-
ipaddress.ip_address(addr)
1706-
ip_list.append(addr)
1707-
continue
1708-
except Exception:
1709-
pass
1710-
try:
1711-
result = urlparse(addr)
1712-
if (
1713-
result.netloc
1714-
and result.scheme.startswith('http')
1715-
):
1716-
url_list.append(addr)
1717-
continue
1718-
except Exception:
1719-
pass
1720-
invalid_list.append(addr)
1721-
if invalid_list:
1722-
return await self.__show_network_detect_config_form(
1723-
reason='invalid_network_addr')
1724-
network_detect_addr: dict = {}
1669+
ip_list, url_list, invalid_list = _handle_network_detect_addr(
1670+
addr_str=self._cc_network_detect_addr)
1671+
if invalid_list:
1672+
return await self.__show_network_detect_config_form(
1673+
reason='invalid_network_addr')
17251674
if ip_list or url_list:
17261675
if ip_list and not await self._miot_network.ping_multi_async(
17271676
ip_list=ip_list):
@@ -1731,13 +1680,11 @@ async def async_step_network_detect_config(
17311680
url_list=url_list):
17321681
return await self.__show_network_detect_config_form(
17331682
reason='invalid_http_addr')
1734-
network_detect_addr = {
1735-
'ip': ip_list, 'url': url_list}
17361683
else:
17371684
if not await self._miot_network.get_network_status_async():
17381685
return await self.__show_network_detect_config_form(
17391686
reason='invalid_default_addr')
1740-
network_detect_addr = {'ip': [], 'url': []}
1687+
network_detect_addr: dict = {'ip': ip_list, 'url': url_list}
17411688

17421689
if await self._miot_storage.update_user_config_async(
17431690
uid='global_config', cloud_server='all', config={
@@ -1932,3 +1879,35 @@ def _handle_devices_filter(
19321879
return {}
19331880
return {
19341881
did: info for did, info in devices.items() if did in include_set}
1882+
1883+
1884+
def _handle_network_detect_addr(
1885+
addr_str: str
1886+
) -> Tuple[list[str], list[str], list[str]]:
1887+
ip_list: list[str] = []
1888+
url_list: list[str] = []
1889+
invalid_list: list[str] = []
1890+
if addr_str:
1891+
for addr in addr_str.split(','):
1892+
addr = addr.strip()
1893+
if not addr:
1894+
continue
1895+
# pylint: disable=broad-exception-caught
1896+
try:
1897+
ipaddress.ip_address(addr)
1898+
ip_list.append(addr)
1899+
continue
1900+
except Exception:
1901+
pass
1902+
try:
1903+
result = urlparse(addr)
1904+
if (
1905+
result.netloc
1906+
and result.scheme.startswith('http')
1907+
):
1908+
url_list.append(addr)
1909+
continue
1910+
except Exception:
1911+
pass
1912+
invalid_list.append(addr)
1913+
return ip_list, url_list, invalid_list

0 commit comments

Comments
 (0)