homebridge-xbox-tv 3.5.2 → 3.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/homebridge-ui/public/index.html +228 -216
- package/package.json +1 -1
|
@@ -1,230 +1,242 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
|
|
4
|
+
<head>
|
|
5
|
+
<meta charset="UTF-8">
|
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
7
|
+
<title>Xbox Homebridge Configuration</title>
|
|
8
|
+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.0/css/bootstrap.min.css">
|
|
9
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/js/all.min.js"></script>
|
|
10
|
+
</head>
|
|
11
|
+
|
|
12
|
+
<body>
|
|
13
|
+
|
|
14
|
+
<div class="container mt-4">
|
|
15
|
+
<div class="text-center">
|
|
16
|
+
<img src="homebridge-xbox-tv.png" alt="Image" height="120" />
|
|
17
|
+
</div>
|
|
18
|
+
|
|
19
|
+
<div id="authorizationManager" class="card card-body mt-3">
|
|
20
|
+
<form id="configForm">
|
|
21
|
+
<div class="text-center">
|
|
22
|
+
<label id="deviceName" class="fw-bold" style="font-size: 23px;">Xbox</label><br>
|
|
23
|
+
<label id="info" class="d-block" style="font-size: 17px;"></label>
|
|
24
|
+
<label id="info1" class="d-block" style="font-size: 15px;"></label>
|
|
25
|
+
</div>
|
|
26
|
+
|
|
27
|
+
<div class="mb-3">
|
|
28
|
+
<label for="deviceHost" class="form-label">Host</label>
|
|
29
|
+
<input id="deviceHost" type="text" class="form-control" required>
|
|
30
|
+
</div>
|
|
31
|
+
|
|
32
|
+
<div class="mb-3">
|
|
33
|
+
<label for="deviceLiveId" class="form-label">Xbox Live ID</label>
|
|
34
|
+
<input id="deviceLiveId" type="password" class="form-control" autocomplete="off" required>
|
|
35
|
+
</div>
|
|
36
|
+
|
|
37
|
+
<div class="mb-3">
|
|
38
|
+
<label for="deviceToken" class="form-label">Web API Token</label>
|
|
39
|
+
<input id="deviceToken" type="password" class="form-control" autocomplete="off" required>
|
|
40
|
+
</div>
|
|
41
|
+
|
|
42
|
+
<div class="form-check mb-3">
|
|
43
|
+
<input id="deviceWebApiControl" type="checkbox" class="form-check-input">
|
|
44
|
+
<label for="deviceWebApiControl" class="form-check-label">Web API Control</label>
|
|
45
|
+
</div>
|
|
46
|
+
|
|
47
|
+
<div class="text-center">
|
|
48
|
+
<button id="startAuthorizationButton" type="button" class="btn btn-primary">Start Authorization</button>
|
|
49
|
+
<button id="clearTokenButton" type="button" class="btn btn-secondary">Clear Web API Token</button>
|
|
50
|
+
<button id="configButton" type="button" class="btn btn-secondary"><i class="fas fa-gear"></i></button>
|
|
51
|
+
</div>
|
|
52
|
+
</form>
|
|
53
|
+
</div>
|
|
54
|
+
|
|
55
|
+
<div id="consoleButton"></div>
|
|
4
56
|
</div>
|
|
5
57
|
|
|
6
|
-
<
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
<label id="info" class="d-block" style="font-size: 17px;"></label>
|
|
11
|
-
<label id="info1" class="d-block" style="font-size: 15px;"></label>
|
|
12
|
-
</div>
|
|
13
|
-
|
|
14
|
-
<div class="mb-3">
|
|
15
|
-
<label for="deviceHost" class="form-label">Host</label>
|
|
16
|
-
<input id="deviceHost" type="text" class="form-control" required>
|
|
17
|
-
</div>
|
|
18
|
-
|
|
19
|
-
<div class="mb-3">
|
|
20
|
-
<label for="deviceLiveId" class="form-label">Xbox Live ID</label>
|
|
21
|
-
<input id="deviceLiveId" type="password" class="form-control" autocomplete="off" required>
|
|
22
|
-
</div>
|
|
23
|
-
|
|
24
|
-
<div class="mb-3">
|
|
25
|
-
<label for="deviceToken" class="form-label">Web API Token</label>
|
|
26
|
-
<input id="deviceToken" type="password" class="form-control" autocomplete="off" required>
|
|
27
|
-
</div>
|
|
28
|
-
|
|
29
|
-
<div class="form-check mb-3">
|
|
30
|
-
<input id="deviceWebApiControl" type="checkbox" class="form-check-input">
|
|
31
|
-
<label for="deviceWebApiControl" class="form-check-label">Web API Control</label>
|
|
32
|
-
</div>
|
|
33
|
-
|
|
34
|
-
<div class="text-center">
|
|
35
|
-
<button id="startAuthorizationButton" type="button" class="btn btn-primary">Start Authorization</button>
|
|
36
|
-
<button id="clearTokenButton" type="button" class="btn btn-secondary">Clear Web API Token</button>
|
|
37
|
-
<button id="configButton" type="button" class="btn btn-secondary"><i class="fas fa-gear"></i></button>
|
|
38
|
-
</div>
|
|
39
|
-
</form>
|
|
40
|
-
</div>
|
|
41
|
-
|
|
42
|
-
<div id="consoleButton"></div>
|
|
43
|
-
</div>
|
|
44
|
-
|
|
45
|
-
<script>
|
|
46
|
-
(async () => {
|
|
47
|
-
//get the plugin config array
|
|
48
|
-
const pluginConfig = await homebridge.getPluginConfig();
|
|
49
|
-
|
|
50
|
-
if (!pluginConfig.length) {
|
|
51
|
-
pluginConfig.push({});
|
|
52
|
-
await homebridge.updatePluginConfig(pluginConfig);
|
|
53
|
-
homebridge.showSchemaForm();
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
this.configButtonState = false;
|
|
57
|
-
|
|
58
|
-
//get devices count
|
|
59
|
-
const devicesCount = pluginConfig[0].devices.length;
|
|
60
|
-
this.deviceIndex = 0;
|
|
61
|
-
for (let i = 0; i < devicesCount; i++) {
|
|
62
|
-
//create buttons
|
|
63
|
-
const button = document.createElement("button");
|
|
64
|
-
button.setAttribute("type", "button");
|
|
65
|
-
button.setAttribute("id", `button${i}`);
|
|
66
|
-
button.setAttribute("class", "btn btn-primary");
|
|
67
|
-
button.style.textTransform = 'none';
|
|
68
|
-
button.innerText = pluginConfig[0].devices[i].name;
|
|
69
|
-
document.getElementById("consoleButton").appendChild(button);
|
|
70
|
-
|
|
71
|
-
//get actuall value on console select
|
|
72
|
-
document.getElementById(`button${i}`).addEventListener('click', async () => {
|
|
73
|
-
for (let j = 0; j < devicesCount; j++) {
|
|
74
|
-
const setRemoveAtribute = j === i ? document.getElementById(`button${j}`).setAttribute("class", "btn btn-primary") : document.getElementById(`button${j}`).setAttribute("class", "btn btn-secondary");
|
|
75
|
-
}
|
|
58
|
+
<script>
|
|
59
|
+
(async () => {
|
|
60
|
+
//get the plugin config array
|
|
61
|
+
const pluginConfig = await homebridge.getPluginConfig();
|
|
76
62
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
63
|
+
if (!pluginConfig.length) {
|
|
64
|
+
pluginConfig.push({});
|
|
65
|
+
await homebridge.updatePluginConfig(pluginConfig);
|
|
66
|
+
homebridge.showSchemaForm();
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
this.configButtonState = false;
|
|
70
|
+
|
|
71
|
+
//get devices count
|
|
72
|
+
const devicesCount = pluginConfig[0].devices.length;
|
|
73
|
+
this.deviceIndex = 0;
|
|
74
|
+
for (let i = 0; i < devicesCount; i++) {
|
|
75
|
+
//create buttons
|
|
76
|
+
const button = document.createElement("button");
|
|
77
|
+
button.setAttribute("type", "button");
|
|
78
|
+
button.setAttribute("id", `button${i}`);
|
|
79
|
+
button.setAttribute("class", "btn btn-primary");
|
|
80
|
+
button.style.textTransform = 'none';
|
|
81
|
+
button.innerText = pluginConfig[0].devices[i].name;
|
|
82
|
+
document.getElementById("consoleButton").appendChild(button);
|
|
83
|
+
|
|
84
|
+
//get actuall value on console select
|
|
85
|
+
document.getElementById(`button${i}`).addEventListener('click', async () => {
|
|
86
|
+
for (let j = 0; j < devicesCount; j++) {
|
|
87
|
+
const setRemoveAtribute = j === i ? document.getElementById(`button${j}`).setAttribute("class", "btn btn-primary") : document.getElementById(`button${j}`).setAttribute("class", "btn btn-secondary");
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
document.getElementById('deviceName').innerHTML = pluginConfig[0].devices[i].name || '';
|
|
91
|
+
document.getElementById('deviceHost').value = pluginConfig[0].devices[i].host || '';
|
|
92
|
+
document.getElementById('deviceLiveId').value = pluginConfig[0].devices[i].xboxLiveId || '';
|
|
93
|
+
document.getElementById('deviceToken').value = pluginConfig[0].devices[i].webApiToken || '';
|
|
94
|
+
document.getElementById('deviceWebApiControl').checked = pluginConfig[0].devices[i].webApiControl || false;
|
|
95
|
+
|
|
96
|
+
const tokenLength = (pluginConfig[0].devices[i].webApiToken).length || 0;
|
|
97
|
+
const setButtonName = tokenLength <= 10 ? document.getElementById('startAuthorizationButton').innerText = "Start authorization" : document.getElementById('startAuthorizationButton').innerText = "Check state";
|
|
98
|
+
const setCheckboxState = tokenLength <= 10 ? document.getElementById('deviceWebApiControl').checked = false : false;
|
|
99
|
+
const setCheckboxMode = tokenLength <= 10 ? document.getElementById('deviceWebApiControl').disabled = true : document.getElementById('deviceWebApiControl').disabled = false;
|
|
100
|
+
const setWebApiControlMode = tokenLength <= 10 ? pluginConfig[0].devices[i].webApiControl = false : false;
|
|
101
|
+
|
|
102
|
+
await homebridge.updatePluginConfig(pluginConfig)
|
|
103
|
+
this.deviceIndex = i;
|
|
104
|
+
});
|
|
105
|
+
const click = i === devicesCount - 1 ? document.getElementById(`button0`).click() : false;
|
|
106
|
+
const update = i === devicesCount - 1 ? await homebridge.updatePluginConfig(pluginConfig) : false;
|
|
107
|
+
};
|
|
82
108
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
const setCheckboxState = tokenLength <= 10 ? document.getElementById('deviceWebApiControl').checked = false : false;
|
|
86
|
-
const setCheckboxMode = tokenLength <= 10 ? document.getElementById('deviceWebApiControl').disabled = true : document.getElementById('deviceWebApiControl').disabled = false;
|
|
87
|
-
const setWebApiControlMode = tokenLength <= 10 ? pluginConfig[0].devices[i].webApiControl = false : false;
|
|
109
|
+
//load authorizationManager form
|
|
110
|
+
document.getElementById('authorizationManager').style.display = 'block';
|
|
88
111
|
|
|
89
|
-
|
|
90
|
-
|
|
112
|
+
//watch for changes to the config button
|
|
113
|
+
document.getElementById('configButton').addEventListener('click', async () => {
|
|
114
|
+
const showHideSettings = this.configButtonState ? homebridge.hideSchemaForm() : homebridge.showSchemaForm();
|
|
115
|
+
const setRemoveAtribute = this.configButtonState ? document.getElementById(`configButton`).setAttribute("class", "btn btn-secondary") : document.getElementById(`configButton`).setAttribute("class", "btn btn-primary");
|
|
116
|
+
this.configButtonState = !this.configButtonState;
|
|
91
117
|
});
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
const setRemoveAtribute = this.configButtonState ? document.getElementById(`configButton`).setAttribute("class", "btn btn-secondary") : document.getElementById(`configButton`).setAttribute("class", "btn btn-primary");
|
|
104
|
-
this.configButtonState = !this.configButtonState;
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
//watch for changes to the form
|
|
108
|
-
document.getElementById('configForm').addEventListener('input', async () => {
|
|
109
|
-
pluginConfig[0].devices[this.deviceIndex].host = document.querySelector('#deviceHost').value;
|
|
110
|
-
pluginConfig[0].devices[this.deviceIndex].xboxLiveId = document.querySelector('#deviceLiveId').value;
|
|
111
|
-
pluginConfig[0].devices[this.deviceIndex].webApiToken = document.querySelector('#deviceToken').value;
|
|
112
|
-
pluginConfig[0].devices[this.deviceIndex].webApiControl = document.querySelector('#deviceWebApiControl').checked;
|
|
113
|
-
|
|
114
|
-
const tokenLength1 = (document.querySelector('#deviceToken').value).length || 0;
|
|
115
|
-
const setButtonName = tokenLength1 <= 10 ? document.getElementById('startAuthorizationButton').innerText = "Start authorization" : false;
|
|
116
|
-
const setButtonMode = tokenLength1 <= 10 ? document.getElementById('startAuthorizationButton').removeAttribute('disabled') : false;
|
|
117
|
-
|
|
118
|
-
await homebridge.updatePluginConfig(pluginConfig);
|
|
119
|
-
await homebridge.savePluginConfig(pluginConfig);
|
|
120
|
-
});
|
|
121
|
-
|
|
122
|
-
//clear token file
|
|
123
|
-
document.getElementById('clearTokenButton').addEventListener('click', async () => {
|
|
124
|
-
homebridge.showSpinner();
|
|
125
|
-
document.getElementById('info').innerHTML = 'Start clearing token...';
|
|
126
|
-
document.getElementById('info').style.color = 'yellow';
|
|
127
|
-
|
|
128
|
-
try {
|
|
129
|
-
const host = pluginConfig[0].devices[this.deviceIndex].host;
|
|
130
|
-
await homebridge.request('/clearToken', { host: host });
|
|
131
|
-
|
|
132
|
-
//update value
|
|
133
|
-
pluginConfig[0].devices[this.deviceIndex].webApiToken = '';
|
|
134
|
-
pluginConfig[0].devices[this.deviceIndex].webApiControl = false;
|
|
135
|
-
|
|
136
|
-
document.getElementById('info').innerHTML = 'Web api token cleared, now You can start new authorization process.';
|
|
137
|
-
document.getElementById('info').style.color = 'green';
|
|
138
|
-
document.getElementById('deviceToken').value = '';
|
|
139
|
-
document.getElementById('startAuthorizationButton').removeAttribute("disabled");
|
|
140
|
-
document.getElementById('startAuthorizationButton').innerText = "Start authorization";
|
|
141
|
-
document.getElementById('deviceWebApiControl').checked = false;
|
|
142
|
-
document.getElementById('deviceWebApiControl').disabled = true;
|
|
118
|
+
|
|
119
|
+
//watch for changes to the form
|
|
120
|
+
document.getElementById('configForm').addEventListener('input', async () => {
|
|
121
|
+
pluginConfig[0].devices[this.deviceIndex].host = document.querySelector('#deviceHost').value;
|
|
122
|
+
pluginConfig[0].devices[this.deviceIndex].xboxLiveId = document.querySelector('#deviceLiveId').value;
|
|
123
|
+
pluginConfig[0].devices[this.deviceIndex].webApiToken = document.querySelector('#deviceToken').value;
|
|
124
|
+
pluginConfig[0].devices[this.deviceIndex].webApiControl = document.querySelector('#deviceWebApiControl').checked;
|
|
125
|
+
|
|
126
|
+
const tokenLength1 = (document.querySelector('#deviceToken').value).length || 0;
|
|
127
|
+
const setButtonName = tokenLength1 <= 10 ? document.getElementById('startAuthorizationButton').innerText = "Start authorization" : false;
|
|
128
|
+
const setButtonMode = tokenLength1 <= 10 ? document.getElementById('startAuthorizationButton').removeAttribute('disabled') : false;
|
|
143
129
|
|
|
144
130
|
await homebridge.updatePluginConfig(pluginConfig);
|
|
145
131
|
await homebridge.savePluginConfig(pluginConfig);
|
|
132
|
+
});
|
|
146
133
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
134
|
+
//clear token file
|
|
135
|
+
document.getElementById('clearTokenButton').addEventListener('click', async () => {
|
|
136
|
+
homebridge.showSpinner();
|
|
137
|
+
document.getElementById('info').innerHTML = 'Start clearing token...';
|
|
150
138
|
document.getElementById('info').style.color = 'yellow';
|
|
151
|
-
document.getElementById('info1').innerHTML = `Error: ${error}`;
|
|
152
|
-
document.getElementById('info1').style.color = 'red';
|
|
153
|
-
}
|
|
154
|
-
});
|
|
155
|
-
|
|
156
|
-
//watch for click on the Start authorization button
|
|
157
|
-
document.getElementById('startAuthorizationButton').addEventListener('click', async () => {
|
|
158
|
-
homebridge.showSpinner();
|
|
159
|
-
document.getElementById('info').innerHTML = 'Starting authorization...';
|
|
160
|
-
document.getElementById('info').style.color = 'yellow';
|
|
161
|
-
|
|
162
|
-
try {
|
|
163
|
-
const host = pluginConfig[0].devices[this.deviceIndex].host;
|
|
164
|
-
const webApiClientId = pluginConfig[0].devices[this.deviceIndex].webApiClientId;
|
|
165
|
-
const webApiClientSecret = pluginConfig[0].devices[this.deviceIndex].webApiClientSecret;
|
|
166
|
-
const webApiToken = pluginConfig[0].devices[this.deviceIndex].webApiToken;
|
|
167
|
-
|
|
168
|
-
const payload = {
|
|
169
|
-
host: host,
|
|
170
|
-
webApiClientId: webApiClientId,
|
|
171
|
-
webApiClientSecret: webApiClientSecret,
|
|
172
|
-
webApiToken: webApiToken
|
|
173
|
-
};
|
|
174
|
-
const response = await homebridge.request('/startAuthorization', payload);
|
|
175
|
-
const info = response.info;
|
|
176
|
-
const status = response.status;
|
|
177
|
-
|
|
178
|
-
switch (status) {
|
|
179
|
-
case 0:
|
|
180
|
-
document.getElementById('info').innerHTML = info;
|
|
181
|
-
document.getElementById('info').style.color = 'green';
|
|
182
|
-
document.getElementById('startAuthorizationButton').innerText = "Check state";
|
|
183
|
-
document.getElementById('deviceWebApiControl').disabled = false;
|
|
184
|
-
break;
|
|
185
|
-
case 1:
|
|
186
|
-
document.getElementById('startAuthorizationButton').innerText = "Activate console";
|
|
187
|
-
document.getElementById('deviceWebApiControl').checked = false;
|
|
188
|
-
document.getElementById('deviceWebApiControl').disabled = true;
|
|
189
|
-
pluginConfig[0].devices[this.deviceIndex].webApiControl = false;
|
|
190
|
-
|
|
191
|
-
let timeLeft = 15;
|
|
192
|
-
let timerId = setInterval(() => {
|
|
193
|
-
if (timeLeft <= 0) {
|
|
194
|
-
open(info);
|
|
195
|
-
clearInterval(timerId);
|
|
196
|
-
document.getElementById('info').innerHTML = `Now paste the *code* to the *Web Api Token* and press *Activate Console*.`;
|
|
197
|
-
document.getElementById('info').style.color = 'yellow';
|
|
198
|
-
} else {
|
|
199
|
-
document.getElementById('info').innerHTML = `After ${timeLeft} sec. on the opened page, sign in to your Xbox Live account and give permission for Xbox TV. Next from the response URI copy the part after *?code=* and return to Authorization Manager.`;
|
|
200
|
-
timeLeft--;
|
|
201
|
-
document.getElementById('info').style.color = 'yellow';
|
|
202
|
-
}
|
|
203
|
-
}, 1000);
|
|
204
|
-
break;
|
|
205
|
-
case 2:
|
|
206
|
-
document.getElementById('info').innerHTML = info;
|
|
207
|
-
document.getElementById('info').style.color = 'green';
|
|
208
|
-
document.getElementById('startAuthorizationButton').innerText = "Check state";
|
|
209
|
-
document.getElementById('deviceWebApiControl').disabled = false;
|
|
210
|
-
document.getElementById('deviceWebApiControl').checked = true;
|
|
211
|
-
pluginConfig[0].devices[this.deviceIndex].webApiControl = true;
|
|
212
|
-
|
|
213
|
-
await homebridge.updatePluginConfig(pluginConfig)
|
|
214
|
-
await homebridge.savePluginConfig(pluginConfig);
|
|
215
|
-
break;
|
|
216
|
-
};
|
|
217
139
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
140
|
+
try {
|
|
141
|
+
const host = pluginConfig[0].devices[this.deviceIndex].host;
|
|
142
|
+
await homebridge.request('/clearToken', { host: host });
|
|
143
|
+
|
|
144
|
+
//update value
|
|
145
|
+
pluginConfig[0].devices[this.deviceIndex].webApiToken = '';
|
|
146
|
+
pluginConfig[0].devices[this.deviceIndex].webApiControl = false;
|
|
147
|
+
|
|
148
|
+
document.getElementById('info').innerHTML = 'Web api token cleared, now You can start new authorization process.';
|
|
149
|
+
document.getElementById('info').style.color = 'green';
|
|
150
|
+
document.getElementById('deviceToken').value = '';
|
|
151
|
+
document.getElementById('startAuthorizationButton').removeAttribute("disabled");
|
|
152
|
+
document.getElementById('startAuthorizationButton').innerText = "Start authorization";
|
|
153
|
+
document.getElementById('deviceWebApiControl').checked = false;
|
|
154
|
+
document.getElementById('deviceWebApiControl').disabled = true;
|
|
155
|
+
|
|
156
|
+
await homebridge.updatePluginConfig(pluginConfig);
|
|
157
|
+
await homebridge.savePluginConfig(pluginConfig);
|
|
158
|
+
|
|
159
|
+
homebridge.hideSpinner();
|
|
160
|
+
} catch (error) {
|
|
161
|
+
document.getElementById('info').innerHTML = 'Clear web api token error.';
|
|
162
|
+
document.getElementById('info').style.color = 'yellow';
|
|
163
|
+
document.getElementById('info1').innerHTML = `Error: ${error}`;
|
|
164
|
+
document.getElementById('info1').style.color = 'red';
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
//watch for click on the Start authorization button
|
|
169
|
+
document.getElementById('startAuthorizationButton').addEventListener('click', async () => {
|
|
170
|
+
homebridge.showSpinner();
|
|
171
|
+
document.getElementById('info').innerHTML = 'Starting authorization...';
|
|
221
172
|
document.getElementById('info').style.color = 'yellow';
|
|
222
|
-
document.getElementById('info1').innerHTML = `Error: ${error}`;
|
|
223
|
-
document.getElementById('info1').style.color = 'red';
|
|
224
|
-
} finally {
|
|
225
|
-
homebridge.hideSpinner();
|
|
226
|
-
};
|
|
227
|
-
});
|
|
228
173
|
|
|
229
|
-
|
|
230
|
-
|
|
174
|
+
try {
|
|
175
|
+
const host = pluginConfig[0].devices[this.deviceIndex].host;
|
|
176
|
+
const webApiClientId = pluginConfig[0].devices[this.deviceIndex].webApiClientId;
|
|
177
|
+
const webApiClientSecret = pluginConfig[0].devices[this.deviceIndex].webApiClientSecret;
|
|
178
|
+
const webApiToken = pluginConfig[0].devices[this.deviceIndex].webApiToken;
|
|
179
|
+
|
|
180
|
+
const payload = {
|
|
181
|
+
host: host,
|
|
182
|
+
webApiClientId: webApiClientId,
|
|
183
|
+
webApiClientSecret: webApiClientSecret,
|
|
184
|
+
webApiToken: webApiToken
|
|
185
|
+
};
|
|
186
|
+
const response = await homebridge.request('/startAuthorization', payload);
|
|
187
|
+
const info = response.info;
|
|
188
|
+
const status = response.status;
|
|
189
|
+
|
|
190
|
+
switch (status) {
|
|
191
|
+
case 0:
|
|
192
|
+
document.getElementById('info').innerHTML = info;
|
|
193
|
+
document.getElementById('info').style.color = 'green';
|
|
194
|
+
document.getElementById('startAuthorizationButton').innerText = "Check state";
|
|
195
|
+
document.getElementById('deviceWebApiControl').disabled = false;
|
|
196
|
+
break;
|
|
197
|
+
case 1:
|
|
198
|
+
document.getElementById('startAuthorizationButton').innerText = "Activate console";
|
|
199
|
+
document.getElementById('deviceWebApiControl').checked = false;
|
|
200
|
+
document.getElementById('deviceWebApiControl').disabled = true;
|
|
201
|
+
pluginConfig[0].devices[this.deviceIndex].webApiControl = false;
|
|
202
|
+
|
|
203
|
+
let timeLeft = 15;
|
|
204
|
+
let timerId = setInterval(() => {
|
|
205
|
+
if (timeLeft <= 0) {
|
|
206
|
+
open(info);
|
|
207
|
+
clearInterval(timerId);
|
|
208
|
+
document.getElementById('info').innerHTML = `Now paste the *code* to the *Web Api Token* and press *Activate Console*.`;
|
|
209
|
+
document.getElementById('info').style.color = 'yellow';
|
|
210
|
+
} else {
|
|
211
|
+
document.getElementById('info').innerHTML = `After ${timeLeft} sec. on the opened page, sign in to your Xbox Live account and give permission for Xbox TV. Next from the response URI copy the part after *?code=* and return to Authorization Manager.`;
|
|
212
|
+
timeLeft--;
|
|
213
|
+
document.getElementById('info').style.color = 'yellow';
|
|
214
|
+
}
|
|
215
|
+
}, 1000);
|
|
216
|
+
break;
|
|
217
|
+
case 2:
|
|
218
|
+
document.getElementById('info').innerHTML = info;
|
|
219
|
+
document.getElementById('info').style.color = 'green';
|
|
220
|
+
document.getElementById('startAuthorizationButton').innerText = "Check state";
|
|
221
|
+
document.getElementById('deviceWebApiControl').disabled = false;
|
|
222
|
+
document.getElementById('deviceWebApiControl').checked = true;
|
|
223
|
+
pluginConfig[0].devices[this.deviceIndex].webApiControl = true;
|
|
224
|
+
|
|
225
|
+
await homebridge.updatePluginConfig(pluginConfig)
|
|
226
|
+
await homebridge.savePluginConfig(pluginConfig);
|
|
227
|
+
break;
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
homebridge.hideSpinner();
|
|
231
|
+
} catch (error) {
|
|
232
|
+
document.getElementById('info').innerHTML = 'Check Your credentials data and try again.';
|
|
233
|
+
document.getElementById('info').style.color = 'yellow';
|
|
234
|
+
document.getElementById('info1').innerHTML = `Error: ${error}`;
|
|
235
|
+
document.getElementById('info1').style.color = 'red';
|
|
236
|
+
} finally {
|
|
237
|
+
homebridge.hideSpinner();
|
|
238
|
+
};
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
})();
|
|
242
|
+
</script>
|