import { DeviceDriver } from '../../drivers/types'; import { sleep, waitForSource } from './element.helper'; export async function selectRoom(driver: DeviceDriver, roomName: string): Promise { if (driver.platform === 'android') { const rooms = await driver.findElementsRaw('id', 'com.theswitchbot.switchbot:id/clSelectRoom'); for (const room of rooms) { const text = await driver.getElementAttribute(room, 'text'); if (text.includes(roomName)) { await driver.tapElement(room); await sleep(500); const saveEl = await driver.findElementRaw('-android uiautomator', 'new UiSelector().text("Save")'); if (saveEl) await driver.tapElement(saveEl); await sleep(2000); return true; } } return false; } // iOS const cells = await driver.findElementsRaw('class name', 'XCUIElementTypeCell'); for (const cell of cells) { const name = await driver.getElementAttribute(cell, 'name'); if (name.includes(roomName)) { await driver.tapElement(cell); await sleep(500); const saveEl = await driver.findElementRaw('name', 'Save'); if (saveEl) await driver.tapElement(saveEl); await sleep(2000); return true; } } return false; } export async function getCurrentRoom(driver: DeviceDriver): Promise { const source = await driver.getSource(); if (source.includes('Not in any room')) return ''; if (driver.platform === 'android') { const match = source.match(/sivDeviceRoom[\s\S]*?text="([^"]+)"/); return match ? match[1] : ''; } const roomLabel = await driver.findElementRaw('name', 'Room'); if (!roomLabel) return ''; return ''; }