view xmpp.js @ 0:363600705376 default tip

Initial commit.
author Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
date Tue, 23 Aug 2011 18:43:15 -0700
parents
children
line wrap: on
line source

#!/usr/bin/env node

var MPD = require('./lib');
var xmpp = require('node-xmpp');
var config = require('./config');

var mpd = new MPD();
var conn = new xmpp.Client(config);
var id = 0;
var NS = 'http://jabber.org/protocol/tune';

var publish = function() {
  mpd.send('status', function(s) {
    mpd.send('currentsong', function(cs) {
      var tune = new xmpp.Element('tune', {xmlns: NS});
     
      if (cs.file && s.state === 'play') {
        // Don't publish "rating" and "uri".
        if (cs.Artist)
          tune.c('artist').t(cs.Artist);
        if (cs.Time)
          tune.c('length').t(cs.Time);
        if (cs.Album)
          tune.c('source').t(cs.Album);
        if (cs.Title)
          tune.c('title').t(cs.Title);
        if (cs.Track)
          tune.c('track').t(cs.Track);
      }
     
      conn.send(new xmpp.Element('iq', {type: 'set', id: 'mpd-'+(++id)})
        .c('pubsub', {xmlns: 'http://jabber.org/protocol/pubsub'})
          .c('publish', {node: NS})
            .c('item')
              .cnode(tune).up()
            .up()
          .up()
        .up());
     
      mpd.send('idle player', publish);
    });
  });
};

// We suppose that the XMPP connection will be open after the MPD one.
conn.on('online', publish);

// vim: sts=2 et sw=2