-
Notifications
You must be signed in to change notification settings - Fork 464
/
Copy pathpauseall.js
84 lines (67 loc) · 1.99 KB
/
pauseall.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
'use strict';
const logger = require('sonos-discovery/lib/helpers/logger');
var pausedPlayers = [];
function pauseAll(player, values) {
logger.debug("pausing all players");
// save state for resume
if (values[0] && values[0] > 0) {
logger.debug("in", values[0], "minutes");
setTimeout(function () {
doPauseAll(player.system);
}, values[0] * 1000 * 60);
return Promise.resolve();
}
return doPauseAll(player.system);
}
function resumeAll(player, values) {
logger.debug("resuming all players");
if (values[0] && values[0] > 0) {
logger.debug("in", values[0], "minutes");
setTimeout(function () {
doResumeAll(player.system);
}, values[0] * 1000 * 60);
return Promise.resolve();
}
return doResumeAll(player.system);
}
function doPauseAll(system) {
pausedPlayers = [];
const promises = system.zones
.filter(zone => {
return zone.coordinator.state.playbackState === 'PLAYING'
})
.map(zone => {
pausedPlayers.push(zone.uuid);
const player = system.getPlayerByUUID(zone.uuid);
return player.pause();
});
return Promise.all(promises);
}
function doResumeAll(system) {
const promises = pausedPlayers.map(uuid => {
var player = system.getPlayerByUUID(uuid);
return player.play();
});
// Clear the pauseState to prevent a second resume to raise hell
pausedPlayers = [];
return Promise.all(promises);
}
function anyPlayerOn(player, values) {
logger.debug("is any player on");
if (values[0] && values[0] > 0) {
setTimeout(function () {
doStateOn(player.system);
}, values[0] * 1000 * 60);
return Promise.resolve();
}
return doAnyPlayerOn(player.system);
}
function doAnyPlayerOn(system) {
const promises = system.zones.some(zone => zone.coordinator.state.playbackState === 'PLAYING');
return {promises};
}
module.exports = function (api) {
api.registerAction('pauseall', pauseAll);
api.registerAction('resumeall', resumeAll);
api.registerAction('anyplayeron', anyPlayerOn);
}