AI_UIAutomation/utils/common/room.helper.ts

48 lines
1.7 KiB
TypeScript

import { DeviceDriver } from '../../drivers/types';
import { sleep, waitForSource } from './element.helper';
export async function selectRoom(driver: DeviceDriver, roomName: string): Promise<boolean> {
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<string> {
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 '';
}