-
-
Notifications
You must be signed in to change notification settings - Fork 197
/
Copy pathpreview-devices-service.ts
36 lines (29 loc) · 1.23 KB
/
preview-devices-service.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import { Device } from "nativescript-preview-sdk";
import { EventEmitter } from "events";
import { DeviceDiscoveryEventNames } from "../../../../common/constants";
export class PreviewDevicesService extends EventEmitter implements IPreviewDevicesService {
public connectedDevices: Device[] = [];
public onDevicesPresence(devices: Device[]): void {
_(devices)
.reject(d => _.find(this.connectedDevices, device => d.id === device.id))
.each(device => this.raiseDeviceFound(device));
_(this.connectedDevices)
.reject(d => _.find(devices, device => d.id === device.id))
.each(device => this.raiseDeviceLost(device));
}
public getDeviceById(id: string): Device {
return _.find(this.connectedDevices, { id });
}
public getDevicesForPlatform(platform: string): Device[] {
return _.filter(this.connectedDevices, { platform: platform.toLowerCase() });
}
private raiseDeviceFound(device: Device) {
this.emit(DeviceDiscoveryEventNames.DEVICE_FOUND, device);
this.connectedDevices.push(device);
}
private raiseDeviceLost(device: Device) {
this.emit(DeviceDiscoveryEventNames.DEVICE_LOST, device);
_.remove(this.connectedDevices, d => d.id === device.id);
}
}
$injector.register("previewDevicesService", PreviewDevicesService);