UNPKG

matterbridge-roborock-vacuum-plugin

Version:
71 lines (70 loc) 2.28 kB
import { debugStringify } from 'matterbridge/logger'; export function getSupportedAreas(rooms, roomMap, log) { log?.debug('getSupportedAreas', debugStringify(rooms)); log?.debug('getSupportedAreas', roomMap ? debugStringify(roomMap) : 'undefined'); if (!rooms || rooms.length === 0 || !roomMap?.rooms || roomMap.rooms.length == 0) { log?.error('No rooms found'); return [ { areaId: 1, mapId: null, areaInfo: { locationInfo: { locationName: 'Unknown', floorNumber: null, areaType: null, }, landmarkInfo: null, }, }, ]; } const supportedAreas = roomMap.rooms.map((room) => { return { areaId: room.id, mapId: null, areaInfo: { locationInfo: { locationName: room.displayName ?? rooms.find((r) => r.id == room.globalId)?.name ?? 'Unknown Room', floorNumber: null, areaType: null, }, landmarkInfo: null, }, }; }); const duplicated = findDuplicatedAreaIds(supportedAreas, log); return duplicated ? [ { areaId: 2, mapId: null, areaInfo: { locationInfo: { locationName: 'Unknown', floorNumber: null, areaType: null, }, landmarkInfo: null, }, }, ] : supportedAreas; } function findDuplicatedAreaIds(areas, log) { const seen = new Set(); const duplicates = []; for (const area of areas) { if (seen.has(area.areaId)) { duplicates.push(area.areaId); } else { seen.add(area.areaId); } } if (duplicates.length > 0 && log) { const duplicated = areas.filter((x) => duplicates.includes(x.areaId)); log.error(`Duplicated areaId(s) found: ${debugStringify(duplicated)}`); } return duplicates.length > 0; }