1616"""
1717
1818import asyncio
19+ import base64
1920import logging
2021from typing import Self
2122
@@ -86,14 +87,20 @@ async def discover_home(self) -> None:
8687 After discovery, the home cache will be populated and can be accessed via the `home_map_info` property.
8788 """
8889 cache_data = await self ._cache .get ()
89- if cache_data .home_map_info and cache_data .home_map_content :
90+ if cache_data .home_map_info and ( cache_data .home_map_content or cache_data . home_map_content_base64 ) :
9091 _LOGGER .debug ("Home cache already populated, skipping discovery" )
9192 self ._home_map_info = cache_data .home_map_info
9293 self ._discovery_completed = True
9394 try :
94- self ._home_map_content = {
95- k : self ._map_content .parse_map_content (v ) for k , v in cache_data .home_map_content .items ()
96- }
95+ if cache_data .home_map_content_base64 :
96+ self ._home_map_content = {
97+ k : self ._map_content .parse_map_content (base64 .b64decode (v ))
98+ for k , v in cache_data .home_map_content_base64 .items ()
99+ }
100+ else :
101+ self ._home_map_content = {
102+ k : self ._map_content .parse_map_content (v ) for k , v in cache_data .home_map_content .items ()
103+ }
97104 except (ValueError , RoborockException ) as ex :
98105 _LOGGER .warning ("Failed to parse cached home map content, will re-discover: %s" , ex )
99106 self ._home_map_content = {}
@@ -218,7 +225,12 @@ async def _update_home_cache(
218225 """Update the entire home cache with new map info and content."""
219226 cache_data = await self ._cache .get ()
220227 cache_data .home_map_info = home_map_info
221- cache_data .home_map_content = {k : v .raw_api_response for k , v in home_map_content .items () if v .raw_api_response }
228+ cache_data .home_map_content_base64 = {
229+ k : base64 .b64encode (v .raw_api_response ).decode ("utf-8" )
230+ for k , v in home_map_content .items ()
231+ if v .raw_api_response
232+ }
233+ cache_data .home_map_content = {}
222234 await self ._cache .set (cache_data )
223235 self ._home_map_info = home_map_info
224236 self ._home_map_content = home_map_content
@@ -238,7 +250,13 @@ async def _update_current_map(
238250 cache_data = await self ._cache .get ()
239251 cache_data .home_map_info [map_flag ] = map_info
240252 if map_content .raw_api_response :
241- cache_data .home_map_content [map_flag ] = map_content .raw_api_response
253+ if cache_data .home_map_content_base64 is None :
254+ cache_data .home_map_content_base64 = {}
255+ cache_data .home_map_content_base64 [map_flag ] = base64 .b64encode (
256+ map_content .raw_api_response
257+ ).decode ("utf-8" )
258+ if cache_data .home_map_content and map_flag in cache_data .home_map_content :
259+ del cache_data .home_map_content [map_flag ]
242260 await self ._cache .set (cache_data )
243261
244262 if self ._home_map_info is None :
0 commit comments