Skip to content

Commit 5d19def

Browse files
committed
refactor(q7): use generated protobuf message types
1 parent 3259338 commit 5d19def

File tree

2 files changed

+15
-78
lines changed

2 files changed

+15
-78
lines changed

roborock/devices/traits/b01/q7/map_content.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@
88
For B01/Q7 devices, the underlying raw map payload is retrieved via `MapTrait`.
99
"""
1010

11-
from __future__ import annotations
12-
1311
from dataclasses import dataclass
1412

1513
from vacuum_map_parser_base.map_data import MapData

roborock/map/b01_map_parser.py

Lines changed: 15 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,12 @@
1010
`roborock/map/proto/b01_scmap.proto`.
1111
"""
1212

13-
from __future__ import annotations
14-
1513
import base64
1614
import binascii
1715
import hashlib
1816
import io
1917
import zlib
2018
from dataclasses import dataclass, field
21-
from typing import Protocol, cast
2219

2320
from Crypto.Cipher import AES
2421
from Crypto.Util.Padding import pad, unpad
@@ -29,79 +26,21 @@
2926

3027
from roborock.exceptions import RoborockException
3128
from roborock.map.proto import b01_scmap_pb2
29+
from roborock.map.proto.b01_scmap_pb2 import (
30+
DevicePointInfo,
31+
MapBoundaryInfo,
32+
MapExtInfo,
33+
MapHeadInfo,
34+
RobotMap,
35+
RoomDataInfo,
36+
)
3237

3338
from .map_parser import ParsedMapData
3439

3540
_B64_CHARS = set(b"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=")
3641
_MAP_FILE_FORMAT = "PNG"
3742

3843

39-
class _ProtoMessage(Protocol):
40-
def HasField(self, field_name: str) -> bool: ...
41-
42-
43-
class _ScPointMessage(_ProtoMessage, Protocol):
44-
x: float
45-
y: float
46-
47-
48-
class _ScMapBoundaryInfoMessage(_ProtoMessage, Protocol):
49-
mapMd5: str
50-
vMinX: int
51-
vMaxX: int
52-
vMinY: int
53-
vMaxY: int
54-
55-
56-
class _ScMapExtInfoMessage(_ProtoMessage, Protocol):
57-
taskBeginDate: int
58-
mapUploadDate: int
59-
mapValid: int
60-
radian: int
61-
force: int
62-
cleanPath: int
63-
boudaryInfo: _ScMapBoundaryInfoMessage
64-
mapVersion: int
65-
mapValueType: int
66-
67-
68-
class _ScMapHeadMessage(_ProtoMessage, Protocol):
69-
mapHeadId: int
70-
sizeX: int
71-
sizeY: int
72-
minX: float
73-
minY: float
74-
maxX: float
75-
maxY: float
76-
resolution: float
77-
78-
79-
class _ScRoomDataMessage(_ProtoMessage, Protocol):
80-
roomId: int
81-
roomName: str
82-
roomTypeId: int
83-
meterialId: int
84-
cleanState: int
85-
roomClean: int
86-
roomCleanIndex: int
87-
roomNamePost: _ScPointMessage
88-
colorId: int
89-
floor_direction: int
90-
global_seq: int
91-
92-
93-
class _ScMapDataContainerMessage(_ProtoMessage, Protocol):
94-
mapData: bytes
95-
96-
97-
class _ScMapMessage(_ProtoMessage, Protocol):
98-
mapType: int
99-
mapExtInfo: _ScMapExtInfoMessage
100-
mapHead: _ScMapHeadMessage
101-
mapData: _ScMapDataContainerMessage
102-
roomDataInfo: list[_ScRoomDataMessage]
103-
104-
10544
@dataclass(frozen=True)
10645
class _ScPoint:
10746
x: float | None = None
@@ -265,14 +204,14 @@ def _decode_map_data_bytes(value: bytes) -> bytes:
265204
return value
266205

267206

268-
def _parse_sc_point(parsed: _ScPointMessage) -> _ScPoint:
207+
def _parse_sc_point(parsed: DevicePointInfo) -> _ScPoint:
269208
return _ScPoint(
270209
x=parsed.x if parsed.HasField("x") else None,
271210
y=parsed.y if parsed.HasField("y") else None,
272211
)
273212

274213

275-
def _parse_sc_map_boundary_info(parsed: _ScMapBoundaryInfoMessage) -> _ScMapBoundaryInfo:
214+
def _parse_sc_map_boundary_info(parsed: MapBoundaryInfo) -> _ScMapBoundaryInfo:
276215
return _ScMapBoundaryInfo(
277216
map_md5=parsed.mapMd5 if parsed.HasField("mapMd5") else None,
278217
v_min_x=parsed.vMinX if parsed.HasField("vMinX") else None,
@@ -282,7 +221,7 @@ def _parse_sc_map_boundary_info(parsed: _ScMapBoundaryInfoMessage) -> _ScMapBoun
282221
)
283222

284223

285-
def _parse_sc_map_ext_info(parsed: _ScMapExtInfoMessage) -> _ScMapExtInfo:
224+
def _parse_sc_map_ext_info(parsed: MapExtInfo) -> _ScMapExtInfo:
286225
return _ScMapExtInfo(
287226
task_begin_date=parsed.taskBeginDate if parsed.HasField("taskBeginDate") else None,
288227
map_upload_date=parsed.mapUploadDate if parsed.HasField("mapUploadDate") else None,
@@ -296,7 +235,7 @@ def _parse_sc_map_ext_info(parsed: _ScMapExtInfoMessage) -> _ScMapExtInfo:
296235
)
297236

298237

299-
def _parse_sc_map_head(parsed: _ScMapHeadMessage) -> _ScMapHead:
238+
def _parse_sc_map_head(parsed: MapHeadInfo) -> _ScMapHead:
300239
return _ScMapHead(
301240
map_head_id=parsed.mapHeadId if parsed.HasField("mapHeadId") else None,
302241
size_x=parsed.sizeX if parsed.HasField("sizeX") else None,
@@ -309,7 +248,7 @@ def _parse_sc_map_head(parsed: _ScMapHeadMessage) -> _ScMapHead:
309248
)
310249

311250

312-
def _parse_sc_room_data(parsed: _ScRoomDataMessage) -> _ScRoomData:
251+
def _parse_sc_room_data(parsed: RoomDataInfo) -> _ScRoomData:
313252
return _ScRoomData(
314253
room_id=parsed.roomId if parsed.HasField("roomId") else None,
315254
room_name=parsed.roomName if parsed.HasField("roomName") else None,
@@ -327,8 +266,8 @@ def _parse_sc_room_data(parsed: _ScRoomDataMessage) -> _ScRoomData:
327266

328267
def _parse_scmap_payload(payload: bytes) -> _ScMapPayload:
329268
"""Parse inflated SCMap bytes into typed map metadata."""
330-
parsed = cast(_ScMapMessage, getattr(b01_scmap_pb2, "RobotMap")())
331-
_parse_proto(payload, cast(Message, parsed), context="B01 SCMap")
269+
parsed = RobotMap()
270+
_parse_proto(payload, parsed, context="B01 SCMap")
332271

333272
map_data = None
334273
if parsed.HasField("mapData"):

0 commit comments

Comments
 (0)