2626from roborock .devices .traits .v1 import common
2727from roborock .exceptions import RoborockDeviceBusy , RoborockException , RoborockInvalidStatus
2828from roborock .roborock_typing import RoborockCommand
29- from roborock .web_api import UserWebApiClient
3029
3130from .map_content import MapContent , MapContentTrait
3231from .maps import MapsTrait
@@ -50,7 +49,6 @@ def __init__(
5049 map_content : MapContentTrait ,
5150 rooms_trait : RoomsTrait ,
5251 device_cache : DeviceCache ,
53- web_api : UserWebApiClient | None = None ,
5452 ) -> None :
5553 """Initialize the HomeTrait.
5654
@@ -73,8 +71,6 @@ def __init__(
7371 self ._map_content = map_content
7472 self ._rooms_trait = rooms_trait
7573 self ._device_cache = device_cache
76- self ._web_api = web_api
77- self ._seen_room_iot_ids_by_map : dict [int , set [str ]] = {}
7874 self ._discovery_completed = False
7975 self ._home_map_info : dict [int , CombinedMapInfo ] | None = None
8076 self ._home_map_content : dict [int , MapContent ] | None = None
@@ -94,7 +90,6 @@ async def discover_home(self) -> None:
9490 if device_cache_data and device_cache_data .home_map_info :
9591 _LOGGER .debug ("Home cache already populated, skipping discovery" )
9692 self ._home_map_info = device_cache_data .home_map_info
97- self ._seed_seen_room_iot_ids (device_cache_data .home_map_info )
9893 self ._discovery_completed = True
9994 try :
10095 self ._home_map_content = {
@@ -143,39 +138,7 @@ async def _refresh_map_info(self, map_info) -> CombinedMapInfo:
143138 # or if the room name isn't unknown.
144139 rooms [room .segment_id ] = room
145140
146- # If we discovered at least one new unknown room iot_id for this map, fetch names from web API.
147- seen_room_iot_ids = self ._seen_room_iot_ids_by_map .setdefault (map_info .map_flag , set ())
148- has_new_unknown_room_iot_id = any (
149- room .name == "Unknown" and room .iot_id not in seen_room_iot_ids for room in rooms .values ()
150- )
151- if self ._web_api and has_new_unknown_room_iot_id :
152- try :
153- web_rooms = await self ._web_api .get_rooms ()
154- web_room_names = {str (r .id ): r .name for r in web_rooms }
155- for segment_id , room in rooms .items ():
156- if room .name == "Unknown" and room .iot_id in web_room_names :
157- rooms [segment_id ] = NamedRoomMapping (
158- segment_id = room .segment_id ,
159- iot_id = room .iot_id ,
160- name = web_room_names [room .iot_id ],
161- )
162- # Merge new rooms into home_data so future refreshes benefit
163- if web_rooms :
164- self ._rooms_trait .merge_home_data_rooms (web_rooms )
165- except Exception :
166- # Broad exception as we don't want anything here to make us fail upwards, we are okay with 'unknowns'
167- _LOGGER .debug ("Failed to fetch rooms from web API for map %s" , map_info .map_flag )
168-
169- # Replace remaining "Unknown" names with "Room {segment_id}" fallback.
170- for segment_id , room in rooms .items ():
171- if room .name == "Unknown" :
172- rooms [segment_id ] = NamedRoomMapping (
173- segment_id = room .segment_id ,
174- iot_id = room .iot_id ,
175- name = f"Room { room .segment_id } " ,
176- )
177-
178- self ._seen_room_iot_ids_by_map [map_info .map_flag ].update (room .iot_id for room in rooms .values ())
141+ await self ._rooms_trait .resolve_unknown_room_names (rooms )
179142
180143 return CombinedMapInfo (
181144 map_flag = map_info .map_flag ,
@@ -293,7 +256,6 @@ async def _update_home_cache(
293256 await self ._device_cache .set (device_cache_data )
294257 self ._home_map_info = home_map_info
295258 self ._home_map_content = home_map_content
296- self ._seed_seen_room_iot_ids (home_map_info )
297259
298260 async def _update_current_map (
299261 self ,
@@ -322,13 +284,7 @@ async def _update_current_map(
322284 if self ._home_map_info is None :
323285 self ._home_map_info = {}
324286 self ._home_map_info [map_flag ] = map_info
325- self ._seed_seen_room_iot_ids ({map_flag : map_info })
326287
327288 if self ._home_map_content is None :
328289 self ._home_map_content = {}
329290 self ._home_map_content [map_flag ] = map_content
330-
331- def _seed_seen_room_iot_ids (self , home_map_info : dict [int , CombinedMapInfo ]) -> None :
332- """Seed known room iot_ids from cached/current map information."""
333- for map_flag , map_info in home_map_info .items ():
334- self ._seen_room_iot_ids_by_map .setdefault (map_flag , set ()).update (room .iot_id for room in map_info .rooms )
0 commit comments