This repository has been archived by the owner on Dec 27, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 5
/
samsung-tv-sources.js
85 lines (70 loc) · 2.68 KB
/
samsung-tv-sources.js
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
"use strict";
const SamsungTVSoapAPI = require("./samsung-tv-soap-api.js");
const xml2js = require('xml2js');
class Source {
constructor(id, source, connected) {
this.id = id;
this.source = source;
this.description = (connected ? "[V] " : "[X] ") + source;
this.connected = connected;
}
appendToDescription(addition) {
this.description += addition;
}
}
class Sources {
constructor(ip) {
this.api = new SamsungTVSoapAPI(ip);
this.sources = {};
this.update();
}
all() {
return this.sources;
}
get(key) {
return this.sources[key];
}
update() {
this.api.getSourceList((err, res) => {
if (err) {
Homey.log(err);
return;
}
try {
const sourceList = res['s:Envelope']['s:Body'][0]['u:GetSourceListResponse'][0]['SourceList'][0];
xml2js.parseString(sourceList, (err, res) => {
if (err) {
Homey.log(err);
return;
}
for (let source of res['SourceList']['Source']) {
this.sources[source.ID[0]] = new Source(source.ID[0], source.SourceType[0], (source.Connected[0] == "Yes"));
}
;
// Add device info to description if available
this.api.getMBRDeviceList((err, res) => {
const deviceList = res['s:Envelope']['s:Body'][0]['u:GetMBRDeviceListResponse'][0]['MBRDeviceList'][0];
xml2js.parseString(deviceList, (err, res) => {
if (err) {
Homey.log(err);
return;
}
const devices = res['MBRDeviceList']['MBRDevice'];
if (devices) {
for (let device of devices) {
if (this.sources[device.ID[0]]) {
this.sources[device.ID[0]].appendToDescription(" - " + device.DeviceType[0] + " - " + device.BrandName[0]);
}
}
}
});
});
}
);
} catch (err) {
Homey.log('The list of sources could not be retrieved: ' + err);
}
});
}
}
module.exports = Sources;