@@ -35,16 +35,16 @@ def __init__(self, channel: MqttChannel) -> None:
3535
3636 async def refresh (self ) -> None :
3737 """Refresh totals and last record detail from the device."""
38- record_list = await self .get_record_list ()
38+ record_list = await self ._get_record_list ()
3939
4040 self .total_time = record_list .total_time
4141 self .total_area = record_list .total_area
4242 self .total_count = record_list .total_count
4343
44- details = await self .get_clean_record_details (record_list = record_list )
44+ details = await self ._get_clean_record_details (record_list = record_list )
4545 self .last_record_detail = details [0 ] if details else None
4646
47- async def get_record_list (self ) -> CleanRecordList :
47+ async def _get_record_list (self ) -> CleanRecordList :
4848 """Fetch the raw device clean record list (`service.get_record_list`)."""
4949 result = await send_decoded_command (
5050 self ._channel ,
@@ -55,33 +55,21 @@ async def get_record_list(self) -> CleanRecordList:
5555 raise TypeError (f"Unexpected response type for GET_RECORD_LIST: { type (result ).__name__ } : { result !r} " )
5656 return CleanRecordList .from_dict (result )
5757
58- @staticmethod
59- def _parse_record_detail (detail : dict | str | None ) -> CleanRecordDetail | None :
60- if detail is None :
61- return None
62- if isinstance (detail , str ):
63- try :
64- parsed = json .loads (detail )
65- except json .JSONDecodeError as ex :
66- raise RoborockException (f"Invalid B01 record detail JSON: { detail !r} " ) from ex
67- if not isinstance (parsed , dict ):
68- raise RoborockException (f"Unexpected B01 record detail type: { type (parsed ).__name__ } : { parsed !r} " )
69- return CleanRecordDetail .from_dict (parsed )
70- if isinstance (detail , dict ):
71- return CleanRecordDetail .from_dict (detail )
72- raise RoborockException (f"Unexpected B01 record detail type: { type (detail ).__name__ } : { detail !r} " )
73-
74- async def get_clean_record_details (self , * , record_list : CleanRecordList | None = None ) -> list [CleanRecordDetail ]:
58+ async def _get_clean_record_details (self , * , record_list : CleanRecordList ) -> list [CleanRecordDetail ]:
7559 """Return parsed record detail objects (newest-first)."""
76- if record_list is None :
77- record_list = await self .get_record_list ()
78-
7960 details : list [CleanRecordDetail ] = []
8061 for item in record_list .record_list :
81- parsed = self ._parse_record_detail (item .detail )
62+ if item .detail is None :
63+ continue
64+ try :
65+ parsed = json .loads (item .detail )
66+ except json .JSONDecodeError as ex :
67+ raise RoborockException (f"Invalid B01 record detail JSON: { item .detail !r} " ) from ex
68+ parsed = CleanRecordDetail .from_dict (parsed )
69+
8270 if parsed is not None :
8371 details .append (parsed )
8472
85- # The app returns the newest record at the end of record_list; reverse so newest is first (index 0).
73+ # The server returns the newest record at the end of record_list; reverse so newest is first (index 0).
8674 details .reverse ()
8775 return details
0 commit comments