@homebridge-plugins/homebridge-homepod-radio 3.2.9 → 3.2.10
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/bin/warm-worker.py +15 -3
- package/dist/lib/warmPlayer.d.ts +4 -0
- package/dist/lib/warmPlayer.js +35 -11
- package/dist/lib/warmPlayer.js.map +1 -1
- package/dist/warm-worker.py +15 -3
- package/package.json +1 -1
package/bin/warm-worker.py
CHANGED
|
@@ -29,9 +29,16 @@ import os
|
|
|
29
29
|
import re
|
|
30
30
|
import sys
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
from pyatv.
|
|
32
|
+
try:
|
|
33
|
+
import pyatv
|
|
34
|
+
from pyatv.const import Protocol
|
|
35
|
+
from pyatv.interface import MediaMetadata
|
|
36
|
+
_PYATV_IMPORT_ERROR = None
|
|
37
|
+
except ImportError as ex:
|
|
38
|
+
pyatv = None
|
|
39
|
+
Protocol = None
|
|
40
|
+
MediaMetadata = None
|
|
41
|
+
_PYATV_IMPORT_ERROR = ex
|
|
35
42
|
|
|
36
43
|
|
|
37
44
|
_LOGGER = logging.getLogger("warm-worker")
|
|
@@ -198,6 +205,11 @@ def main() -> None:
|
|
|
198
205
|
format="%(asctime)s %(levelname)s [%(name)s]: %(message)s",
|
|
199
206
|
)
|
|
200
207
|
|
|
208
|
+
if _PYATV_IMPORT_ERROR is not None:
|
|
209
|
+
_LOGGER.error("Required dependency 'pyatv' was not found. Install it with: pip3 install pyatv")
|
|
210
|
+
_LOGGER.error("Import error: %s", _PYATV_IMPORT_ERROR)
|
|
211
|
+
sys.exit(1)
|
|
212
|
+
|
|
201
213
|
try:
|
|
202
214
|
asyncio.run(main_async(args.id))
|
|
203
215
|
except KeyboardInterrupt:
|
package/dist/lib/warmPlayer.d.ts
CHANGED
|
@@ -18,8 +18,11 @@ export declare class WarmPlayer {
|
|
|
18
18
|
private rl;
|
|
19
19
|
private ready;
|
|
20
20
|
private stopped;
|
|
21
|
+
private restartDisabled;
|
|
21
22
|
private restartDelay;
|
|
22
23
|
private readonly MAX_RESTART_DELAY;
|
|
24
|
+
private restartAttempts;
|
|
25
|
+
private readonly MAX_RESTART_ATTEMPTS;
|
|
23
26
|
private readonly PLAY_TIMEOUT_MS;
|
|
24
27
|
private nextId;
|
|
25
28
|
private readonly pending;
|
|
@@ -27,6 +30,7 @@ export declare class WarmPlayer {
|
|
|
27
30
|
private readonly debug;
|
|
28
31
|
constructor(homepodId: string, logger: Logger, verboseMode: boolean);
|
|
29
32
|
start(): void;
|
|
33
|
+
private logWorkerStderr;
|
|
30
34
|
private handleLine;
|
|
31
35
|
private scheduleRestart;
|
|
32
36
|
private failAllPending;
|
package/dist/lib/warmPlayer.js
CHANGED
|
@@ -22,8 +22,11 @@ export class WarmPlayer {
|
|
|
22
22
|
rl;
|
|
23
23
|
ready = false;
|
|
24
24
|
stopped = false;
|
|
25
|
+
restartDisabled = false;
|
|
25
26
|
restartDelay = 1000;
|
|
26
27
|
MAX_RESTART_DELAY = 30000;
|
|
28
|
+
restartAttempts = 0;
|
|
29
|
+
MAX_RESTART_ATTEMPTS = 6;
|
|
27
30
|
PLAY_TIMEOUT_MS = 60000;
|
|
28
31
|
nextId = 1;
|
|
29
32
|
pending = new Map();
|
|
@@ -39,25 +42,25 @@ export class WarmPlayer {
|
|
|
39
42
|
this.scriptPath = path.resolve(path.dirname(__filename), '..', 'warm-worker.py');
|
|
40
43
|
}
|
|
41
44
|
start() {
|
|
42
|
-
if (this.stopped || this.worker) {
|
|
45
|
+
if (this.stopped || this.restartDisabled || this.worker) {
|
|
43
46
|
return;
|
|
44
47
|
}
|
|
45
48
|
const args = ['-u', this.scriptPath, '--id', this.homepodId];
|
|
46
49
|
if (this.verboseMode) {
|
|
47
50
|
args.push('--verbose');
|
|
48
51
|
}
|
|
49
|
-
this.logger.info(`
|
|
52
|
+
this.logger.info(`Starting warm worker: python3 ${args.join(' ')}`);
|
|
50
53
|
this.worker = child.spawn('python3', args, { env: { ...process.env } });
|
|
51
54
|
this.rl = readline.createInterface({ input: this.worker.stdout });
|
|
52
55
|
this.rl.on('line', (line) => this.handleLine(line));
|
|
53
56
|
this.worker.stderr.on('data', (data) => {
|
|
54
|
-
this.
|
|
57
|
+
this.logWorkerStderr(data.toString());
|
|
55
58
|
});
|
|
56
59
|
this.worker.on('error', (err) => {
|
|
57
|
-
this.logger.error(`
|
|
60
|
+
this.logger.error(`Warm worker spawn error: ${err}`);
|
|
58
61
|
});
|
|
59
62
|
this.worker.on('exit', (code, signal) => {
|
|
60
|
-
this.logger.warn(`
|
|
63
|
+
this.logger.warn(`Warm worker exited code=${code} signal=${signal}`);
|
|
61
64
|
this.ready = false;
|
|
62
65
|
this.rl?.close();
|
|
63
66
|
this.rl = undefined;
|
|
@@ -66,6 +69,20 @@ export class WarmPlayer {
|
|
|
66
69
|
this.scheduleRestart();
|
|
67
70
|
});
|
|
68
71
|
}
|
|
72
|
+
logWorkerStderr(output) {
|
|
73
|
+
const lines = output
|
|
74
|
+
.split(/\r?\n/)
|
|
75
|
+
.map((line) => line.trim())
|
|
76
|
+
.filter((line) => line.length > 0);
|
|
77
|
+
for (const line of lines) {
|
|
78
|
+
if (/traceback|error|exception|module not found/i.test(line)) {
|
|
79
|
+
this.logger.error(`Warm worker: ${line}`);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
this.logger.warn(`Warm worker: ${line}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
69
86
|
handleLine(line) {
|
|
70
87
|
const trimmed = line.trim();
|
|
71
88
|
if (!trimmed) {
|
|
@@ -77,13 +94,14 @@ export class WarmPlayer {
|
|
|
77
94
|
msg = JSON.parse(trimmed);
|
|
78
95
|
}
|
|
79
96
|
catch {
|
|
80
|
-
this.debug(`
|
|
97
|
+
this.debug(`Warm worker non-JSON output: ${trimmed}`);
|
|
81
98
|
return;
|
|
82
99
|
}
|
|
83
100
|
if (msg.event === 'ready') {
|
|
84
101
|
this.ready = true;
|
|
85
102
|
this.restartDelay = 1000; // healthy start resets backoff
|
|
86
|
-
this.
|
|
103
|
+
this.restartAttempts = 0;
|
|
104
|
+
this.logger.info('Warm worker ready (connection held warm)');
|
|
87
105
|
return;
|
|
88
106
|
}
|
|
89
107
|
if (msg.id !== undefined && msg.id !== null) {
|
|
@@ -93,7 +111,7 @@ export class WarmPlayer {
|
|
|
93
111
|
clearTimeout(pending.timer);
|
|
94
112
|
this.pending.delete(key);
|
|
95
113
|
if (msg.ok === false && msg.error) {
|
|
96
|
-
this.logger.warn(`
|
|
114
|
+
this.logger.warn(`Warm play failed: ${msg.error}`);
|
|
97
115
|
}
|
|
98
116
|
pending.resolve(msg.ok === true);
|
|
99
117
|
}
|
|
@@ -103,9 +121,15 @@ export class WarmPlayer {
|
|
|
103
121
|
if (this.stopped) {
|
|
104
122
|
return;
|
|
105
123
|
}
|
|
124
|
+
this.restartAttempts += 1;
|
|
125
|
+
if (this.restartAttempts > this.MAX_RESTART_ATTEMPTS) {
|
|
126
|
+
this.restartDisabled = true;
|
|
127
|
+
this.logger.error(`Warm worker failed to start after ${this.MAX_RESTART_ATTEMPTS} attempts; disabling warm connection until Homebridge restarts`);
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
106
130
|
const delay = this.restartDelay;
|
|
107
131
|
this.restartDelay = Math.min(this.restartDelay * 2, this.MAX_RESTART_DELAY);
|
|
108
|
-
this.logger.info(`
|
|
132
|
+
this.logger.info(`Restarting warm worker in ${delay}ms (attempt ${this.restartAttempts}/${this.MAX_RESTART_ATTEMPTS})`);
|
|
109
133
|
setTimeout(() => this.start(), delay);
|
|
110
134
|
}
|
|
111
135
|
failAllPending() {
|
|
@@ -132,7 +156,7 @@ export class WarmPlayer {
|
|
|
132
156
|
return new Promise((resolve) => {
|
|
133
157
|
const timer = setTimeout(() => {
|
|
134
158
|
this.pending.delete(id);
|
|
135
|
-
this.logger.warn(`
|
|
159
|
+
this.logger.warn(`Warm play timed out for ${filePath}`);
|
|
136
160
|
resolve(false);
|
|
137
161
|
}, this.PLAY_TIMEOUT_MS);
|
|
138
162
|
this.pending.set(id, { resolve, timer });
|
|
@@ -142,7 +166,7 @@ export class WarmPlayer {
|
|
|
142
166
|
catch (err) {
|
|
143
167
|
clearTimeout(timer);
|
|
144
168
|
this.pending.delete(id);
|
|
145
|
-
this.logger.warn(`
|
|
169
|
+
this.logger.warn(`Failed to write to warm worker: ${err}`);
|
|
146
170
|
resolve(false);
|
|
147
171
|
}
|
|
148
172
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"warmPlayer.js","sourceRoot":"","sources":["../../src/lib/warmPlayer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,eAAe,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAOlD;;;;;;;;;;GAUG;AACH,MAAM,OAAO,UAAU;
|
|
1
|
+
{"version":3,"file":"warmPlayer.js","sourceRoot":"","sources":["../../src/lib/warmPlayer.ts"],"names":[],"mappings":"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"}
|
package/dist/warm-worker.py
CHANGED
|
@@ -29,9 +29,16 @@ import os
|
|
|
29
29
|
import re
|
|
30
30
|
import sys
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
from pyatv.
|
|
32
|
+
try:
|
|
33
|
+
import pyatv
|
|
34
|
+
from pyatv.const import Protocol
|
|
35
|
+
from pyatv.interface import MediaMetadata
|
|
36
|
+
_PYATV_IMPORT_ERROR = None
|
|
37
|
+
except ImportError as ex:
|
|
38
|
+
pyatv = None
|
|
39
|
+
Protocol = None
|
|
40
|
+
MediaMetadata = None
|
|
41
|
+
_PYATV_IMPORT_ERROR = ex
|
|
35
42
|
|
|
36
43
|
|
|
37
44
|
_LOGGER = logging.getLogger("warm-worker")
|
|
@@ -198,6 +205,11 @@ def main() -> None:
|
|
|
198
205
|
format="%(asctime)s %(levelname)s [%(name)s]: %(message)s",
|
|
199
206
|
)
|
|
200
207
|
|
|
208
|
+
if _PYATV_IMPORT_ERROR is not None:
|
|
209
|
+
_LOGGER.error("Required dependency 'pyatv' was not found. Install it with: pip3 install pyatv")
|
|
210
|
+
_LOGGER.error("Import error: %s", _PYATV_IMPORT_ERROR)
|
|
211
|
+
sys.exit(1)
|
|
212
|
+
|
|
201
213
|
try:
|
|
202
214
|
asyncio.run(main_async(args.id))
|
|
203
215
|
except KeyboardInterrupt:
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@homebridge-plugins/homebridge-homepod-radio",
|
|
3
3
|
"displayName": "Homepod Mini Radio",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"version": "3.2.
|
|
5
|
+
"version": "3.2.10",
|
|
6
6
|
"description": "Homebridge accessory for streaming radio to Homepod Mini and Apple TV",
|
|
7
7
|
"author": "Petro Kushchak",
|
|
8
8
|
"license": "MIT",
|