// Written by Mike Frysinger <vapier@gmail.com>. Released into the public domain. Suck it.
-function Mpc(socket, cb_update_state) {
+function Mpc(socket, cb_update_state, debug_enabled) {
this._socket = socket;
this._cb_update_state = cb_update_state;
+ this._debug_enabled = debug_enabled;
this._queue = ['init'];
this.state = {};
}
-Mpc.log = function(msg, obj) {
- console.log('mpc: ' + msg, obj);
+Mpc.prototype.log = function(lvl, msg, obj) {
+ if (this._debug_enabled & lvl)
+ console.log('mpc: ' + msg, obj);
+}
+
+Mpc.prototype.err = function(msg, obj) {
+ console.error('mpc: ' + msg, obj);
+}
+
+Mpc.prototype.set_debug = function(val) {
+ this._debug_enabled = val;
}
Mpc.prototype.send = function(msg) {
+ var _this = this;
this._queue.push(msg);
this._socket.send(msg, function(x) {
- Mpc.log('send: ' + msg + ':', x);
+ _this.log(0x1, 'send: ' + msg + ':', x);
});
}
Mpc.prototype.recv_msg = function(lines) {
curr = this._queue.shift();
- Mpc.log('recv: [' + curr + ']:', lines.join('\n'));
+ this.log(0x2, 'recv: [' + curr + ']:', lines.join('\n'));
curr = curr.split(' ');
switch (curr[0]) {
Mpc.__make_send_arg1 = function(cmd) {
return function(a1) {
if (a1 === undefined)
- Mpc.log(cmd + ': function requires one argument');
+ this.err(cmd + ': function requires one argument');
else
this.send(cmd + ' ' + a1);
}
Mpc.__make_send_arg2 = function(cmd) {
return function(a1, a2) {
if (a1 === undefined || a2 === undefined)
- Mpc.log(cmd + ': function requires two arguments');
+ this.err(cmd + ': function requires two arguments');
else
this.send(cmd + ' ' + a1 + ' ' + a2);
}
if (arg >= min && arg <= max)
this.send(cmd + ' ' + arg);
else
- Mpc.log(cmd + ': arg must be [' + min + ',' + max + '] but got "' + arg + '"');
+ this.err(cmd + ': arg must be [' + min + ',' + max + '] but got "' + arg + '"');
};
}
Mpc.prototype.password = Mpc.__make_send_arg1('password');
// ping
Mpc.prototype.ping = Mpc.__make_send_void('ping');
+
+/*
+ * Audio output devices
+ * http://www.musicpd.org/doc/protocol/ch03s09.html
+ */
+
+// disableoutput {ID}
+Mpc.prototype.disableoutput = Mpc.__make_send_arg1('disableoutput');
+// enableoutput {ID}
+Mpc.prototype.enableoutput = Mpc.__make_send_arg1('enableoutput');
+// outputs
+Mpc.prototype.outputs = Mpc.__make_send_void('outputs');
+
+/*
+ * Reflection
+ * http://www.musicpd.org/doc/protocol/ch03s10.html
+ */
+
+// config
+Mpc.prototype.config = Mpc.__make_send_void('config');
+// commands
+Mpc.prototype.commands = Mpc.__make_send_void('commands');
+// notcommands
+Mpc.prototype.notcommands = Mpc.__make_send_void('notcommands');
+// tagtypes
+Mpc.prototype.tagtypes = Mpc.__make_send_void('tagtypes');
+// urlhandlers
+Mpc.prototype.urlhandlers = Mpc.__make_send_void('urlhandlers');
+// decoders
+Mpc.prototype.decoders = Mpc.__make_send_void('decoders');
+
+/*
+ * Client to client
+ * http://www.musicpd.org/doc/protocol/ch03s11.html
+ */
+
+// subscribe {NAME}
+Mpc.prototype.subscribe = Mpc.__make_send_arg1('subscribe');
+// unsubscribe {NAME}
+Mpc.prototype.unsubscribe = Mpc.__make_send_arg1('unsubscribe');
+// channels
+Mpc.prototype.channels = Mpc.__make_send_void('channels');
+// readmessages
+Mpc.prototype.readmessages = Mpc.__make_send_void('readmessages');
+// sendmessage {CHANNEL} {TEXT}
+Mpc.prototype.sendmessage = Mpc.__make_send_arg2('sendmessage');