|
|
|
|
@ -3,6 +3,7 @@ var bunyan = require('bunyan');
|
|
|
|
|
var Q = require("q");
|
|
|
|
|
var FS = require("q-io/fs");
|
|
|
|
|
const net = require('net');
|
|
|
|
|
var util = require("util");
|
|
|
|
|
|
|
|
|
|
String.prototype.format = function() {
|
|
|
|
|
var formatted = this;
|
|
|
|
|
@ -41,6 +42,7 @@ global.mpvstate = {
|
|
|
|
|
"volume":null,
|
|
|
|
|
"mute":null,
|
|
|
|
|
};
|
|
|
|
|
global.mpvisWaitingFor = null;
|
|
|
|
|
|
|
|
|
|
global.mpvsocket = null;
|
|
|
|
|
global.mpvisConnected = false;
|
|
|
|
|
@ -70,8 +72,16 @@ global.mpvconnect = function() {
|
|
|
|
|
defer.reject(new Error("socket ended"))
|
|
|
|
|
});
|
|
|
|
|
sock.on("data", function(dta) {
|
|
|
|
|
log.info("had data '{0}'".format(dta));
|
|
|
|
|
global.mpvdata.push(dta)
|
|
|
|
|
log.info("had data '{0}' while waitingfor {1}".format(dta, global.mpvisWaitingFor));
|
|
|
|
|
if(global.mpvisWaitingFor) {
|
|
|
|
|
dta = JSON.parse(dta);
|
|
|
|
|
var property = global.mpvisWaitingFor[0];
|
|
|
|
|
var defer = global.mpvisWaitingFor[1];
|
|
|
|
|
log.info("was waitingfor {0}, had data {1}, resolving now".format(property, dta['data']));
|
|
|
|
|
global.mpvstate[property] = dta['data'];
|
|
|
|
|
global.mpvisWaitingFor = null;
|
|
|
|
|
defer.resolve();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
return defer.promise;
|
|
|
|
|
}
|
|
|
|
|
@ -107,18 +117,40 @@ function writeCommand(cmd, params) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function updateProperty(propertyIdx) {
|
|
|
|
|
var defer = Q.defer();
|
|
|
|
|
var keys = Object.keys(global.mpvstate);
|
|
|
|
|
var property = keys[propertyIdx];
|
|
|
|
|
log.info("updating property at idx {0} which is {1}".format(propertyIdx, property));
|
|
|
|
|
|
|
|
|
|
writeCommand("get_property", [property]).then(function(){
|
|
|
|
|
global.mpvisWaitingFor=[property,defer];
|
|
|
|
|
|
|
|
|
|
if(propertyIdx >= keys.length-1) {
|
|
|
|
|
log.info("idx too large, returning");
|
|
|
|
|
return;
|
|
|
|
|
} else {
|
|
|
|
|
log.info("deferring updateProperty({0})".format(propertyIdx+1));
|
|
|
|
|
defer.promise.then(function() { updateProperty(propertyIdx+1) } );
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function stateUpdate() {
|
|
|
|
|
log.info("updating state");
|
|
|
|
|
for(var key in global.mpvstate) {
|
|
|
|
|
global.mpvconnect().then(function(sock){
|
|
|
|
|
|
|
|
|
|
}, function(reason){
|
|
|
|
|
log.error("could not update state because "+reason);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
updateProperty(0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var every = require('every-moment');
|
|
|
|
|
var timer = every(10, 'second', function() {
|
|
|
|
|
stateUpdate();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var timer = every(12, 'second', function() {
|
|
|
|
|
log.info("my current state is: "+util.inspect(global.mpvstate));
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// /seekTime/:time — seeks relative
|
|
|
|
|
// /seekPercent/:percent — seeks percent absolute
|
|
|
|
|
// /seekChapter/:where — seeks to prev (where=-x) or next (where=+x) chapter
|
|
|
|
|
|