Get state from mpv

master
Dario Ernst 10 years ago
parent 41bedb24c3
commit 257b18a879

@ -10,11 +10,11 @@
}
],
"dependencies": {
"angular": "^1.4.9",
"angular-animate": "^1.4.9",
"angular-aria": "^1.4.9",
"angular-material": "^1.0.5",
"restify": "^4.0.4"
"angular": "1.4.9",
"angular-animate": "1.4.9",
"angular-aria": "1.4.9",
"angular-material": "1.0.5",
"restify": "4.0.4"
},
"scripts": {
"prestart": "npm update"

@ -11,10 +11,11 @@
],
"dependencies": {
"bunyan": "^1.8.0",
"nesh": "^1.6.0",
"nodemon": "^1.9.1",
"q": "^1.4.1",
"q-io": "^1.13.2",
"every-moment": "0.0.1",
"nesh": "1.6.0",
"nodemon": "1.9.1",
"q": "1.4.1",
"q-io": "1.13.2",
"restify": "4.0.4",
"restify-plugins": "1.0.2"
},

@ -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

Loading…
Cancel
Save