# HG changeset patch # User Emmanuel Gil Peyrot # Date 1330026037 -3600 # Node ID 88eb49491a1edb85f22515aa7a03906728461af1 # Parent 617063bc96f73ecee9777ced632f367621af5395 Reply to iq, and better split code. diff --git a/isshouni.js b/isshouni.js --- a/isshouni.js +++ b/isshouni.js @@ -29,6 +29,7 @@ var spawn = require('child_process').spa var cl = new xmpp.Client(config); var mplayer = spawn('mplayer', args); var paused = false; +var connected = false; var connect = function() { cl.send(new xmpp.Element('presence', {to: config.muc + '/' + config.nick}) @@ -45,9 +46,12 @@ var disconnect = function() { cl.end(); }; -var send_message = function(name, arg) { +var send_message = function(name, arg, type) { //console.log('SENT: ' + name + ' ' + arg); - var message = new xmpp.Element('message', {to: config.muc, type: 'groupchat'}) + if (!type) + type = 'groupchat'; + + var message = new xmpp.Element('message', {to: config.muc, type: type}) .c(name, {xmlns: 'urn:linkmauve:player'}); if (arg) @@ -63,12 +67,29 @@ var send_command = function(text) { cl.on('stanza', function(stanza) { //console.log(stanza.toString()); - if (!stanza.is('message') || stanza.attrs['type'] !== 'groupchat') + + var type = stanza.attrs['type']; + var from = new JID(stanza.attrs['from']); + var id = stanza.attrs['id'] || ''; + + if (stanza.is('iq') && (type === 'get' || type === 'set')) + return cl.send(new xmpp.Element('iq', {to: from, id: id, type: 'error'}) + .c('error', {type: 'cancel'}) + .c('service-unavailable', {xmlns: 'urn:ietf:params:xml:ns:xmpp-stanzas'}) + .up() + .up()); + + if (from.bare !== config.muc) return; - var from = new JID(stanza.attrs['from']); - if (from.bare !== config.muc) - return; + if (stanza.is('presence') && type !== 'unavailable') + return on_presence(stanza); + + if (stanza.is('message')) + return on_message(stanza); +}); + +var on_message = function(from, stanza) { if (from.resource === config.nick) return; @@ -89,7 +110,14 @@ cl.on('stanza', function(stanza) { send_command('seek ' + payload.getText()); else if (payload.name === 'synchro') send_command('seek ' + payload.getText() + ' 2'); -}); +}; + +var on_presence = function(from, stanza) { + if (from.resource === config.nick) { + connected = true; + return; + } +}; cl.on('error', function(e) { console.log(e);