matterbridge-roborock-vacuum-plugin
Version:
Matterbridge Roborock Vacuum Plugin
47 lines • 1.63 kB
JavaScript
import decodeComponent from '../../../roborockCommunication/helper/nameDecoder.js';
/** Application model: Aggregates and processes map information */
export class MapInfo {
maps = [];
allRooms = [];
constructor(multimap) {
this.maps = multimap.map_info.map((mapInfo, index) => {
const entry = this.toMapEntry(mapInfo, index);
this.allRooms.push(...entry.rooms);
return entry;
});
}
toMapEntry(mapInfo, index) {
const hasName = mapInfo.name !== undefined && mapInfo.name !== '';
return {
id: mapInfo.mapFlag,
name: hasName ? decodeComponent(mapInfo.name) : `Default Map ${index + 1}`,
rooms: mapInfo.rooms?.map((room) => ({ ...room, iot_map_id: mapInfo.mapFlag })) ?? [],
};
}
getById(id) {
return this.maps.find((m) => m.id === id)?.name;
}
getByName(name) {
return this.maps.find((m) => m.name?.toLowerCase() === name.toLowerCase())?.id;
}
get hasRooms() {
return this.allRooms.length > 0;
}
static empty() {
return new MapInfo({
max_multi_map: 0,
max_bak_map: 0,
multi_map_count: 0,
map_info: [],
});
}
getActiveMapId(roomData) {
const match = this.maps.find((map) => {
if (roomData.length !== map.rooms.length)
return false;
return roomData.every((entry) => map.rooms.some((r) => r.id === entry[0] && r.iot_name_id === entry[1]));
});
return match?.id ?? 0;
}
}
//# sourceMappingURL=MapInfo.js.map