From 257b18a879a736f3de52daead8cf5f8ec960a7df Mon Sep 17 00:00:00 2001 From: Dario Ernst Date: Sun, 17 Apr 2016 11:08:41 +0200 Subject: [PATCH] Get state from mpv --- client/package.json | 10 ++++----- server/package.json | 9 ++++---- server/server.js | 50 +++++++++++++++++++++++++++++++++++++-------- 3 files changed, 51 insertions(+), 18 deletions(-) diff --git a/client/package.json b/client/package.json index 8c7cd11..e908e91 100644 --- a/client/package.json +++ b/client/package.json @@ -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" diff --git a/server/package.json b/server/package.json index b2aa34b..e6329c3 100644 --- a/server/package.json +++ b/server/package.json @@ -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" }, diff --git a/server/server.js b/server/server.js index d64364e..5dcf4e3 100644 --- a/server/server.js +++ b/server/server.js @@ -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