UNPKG

matterbridge-roborock-vacuum-plugin

Version:
47 lines 1.63 kB
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