48 lines
1.7 KiB
TypeScript
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 '';
|
|
}
|