Get state from mpv

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

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

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

@ -3,6 +3,7 @@ var bunyan = require('bunyan');
var Q = require("q"); var Q = require("q");
var FS = require("q-io/fs"); var FS = require("q-io/fs");
const net = require('net'); const net = require('net');
var util = require("util");
String.prototype.format = function() { String.prototype.format = function() {
var formatted = this; var formatted = this;
@ -41,6 +42,7 @@ global.mpvstate = {
"volume":null, "volume":null,
"mute":null, "mute":null,
}; };
global.mpvisWaitingFor = null;
global.mpvsocket = null; global.mpvsocket = null;
global.mpvisConnected = false; global.mpvisConnected = false;
@ -70,8 +72,16 @@ global.mpvconnect = function() {
defer.reject(new Error("socket ended")) defer.reject(new Error("socket ended"))
}); });
sock.on("data", function(dta) { sock.on("data", function(dta) {
log.info("had data '{0}'".format(dta)); log.info("had data '{0}' while waitingfor {1}".format(dta, global.mpvisWaitingFor));
global.mpvdata.push(dta) 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; 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() { function stateUpdate() {
log.info("updating state"); log.info("updating state");
for(var key in global.mpvstate) { updateProperty(0);
global.mpvconnect().then(function(sock){
}, function(reason){
log.error("could not update state because "+reason);
});
}
} }
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 // /seekTime/:time — seeks relative
// /seekPercent/:percent — seeks percent absolute // /seekPercent/:percent — seeks percent absolute
// /seekChapter/:where — seeks to prev (where=-x) or next (where=+x) chapter // /seekChapter/:where — seeks to prev (where=-x) or next (where=+x) chapter

Loading…
Cancel
Save