X-Git-Url: http://cgit.babelmonkeys.de/?p=socialXMPP.git;a=blobdiff_plain;f=scripts%2Fbasic.js;h=984b0cc383236f0d9850ccae0af96d241afcdc42;hp=1246bfbcff0de95e3aff7a0b368a1eb046b0feb4;hb=694dfd793638d1890731e9f6e67494abdfe176b9;hpb=e0c6e75d7c56ee68814d3f291f6fe00fb1e88888 diff --git a/scripts/basic.js b/scripts/basic.js index 1246bfb..984b0cc 100644 --- a/scripts/basic.js +++ b/scripts/basic.js @@ -1,13 +1,19 @@ var NS_VCARD = 'vcard-temp'; +var NS_CAPS= 'http://jabber.org/protocol/caps'; +var NS_PEP = 'http://jabber.org/protocol/pubsub#event'; +var NS_TUNE = 'http://jabber.org/protocol/tune'; var BOSH_SERVICE = 'http://localhost:5280/http-bind/'; var connection = null; var show_log = true; +var features = new Array(NS_CAPS, NS_TUNE+'+notify', Strophe.NS.DISCO_INFO); +var appName = 'socialXMPP'; + var roster = new Array(); function log(msg) { - var entry = $('
').append(document.createTextNode(msg)); + var entry = $('
').append(Strophe.xmlTextNode(msg)); $('#log').append(entry); } @@ -20,6 +26,7 @@ function rawOutput(data) { } function jid2id(jid) { + jid = Strophe.getBareJidFromJid(jid); return jid.split('@').join('-').split('.').join('-'); } @@ -29,7 +36,7 @@ function populateVCard(e, jid) { var text = e.getElementsByTagName(easy_cases[i])[0]; if (text) { text = Strophe.getText(text); - $('#'+easy_cases[i]).append(document.createTextNode(text)); + $('#'+easy_cases[i]).append(Strophe.xmlTextNode(text)); } } var avatar = e.getElementsByTagName('PHOTO')[0]; @@ -104,6 +111,55 @@ function getRoster() { connection.send(rosteriq.tree()); } +function _cbDisco(e) { + var id = e.getAttribute('id'); + var jid = e.getAttribute('from'); + + var response = $iq({id: id, type: 'result', to: jid}); + var query = response.c('query', {xmlns: Strophe.NS.DISCO_INFO}) + query.c('identity', {category: 'client', type: 'web', name: appName}).up(); + for (var i = 0; i < features.length; i++) { + query.c('feature', {var: features[i]}).up(); + } + connection.send(response.tree()); + + return true; +} + +function genCaps() { + var S = ''; + S += 'client/web//' + appName + '<' + features.sort(); + for (var i = 0; i < features.length; i++) { + S += features[i] + '<'; + } + return b64_sha1(S); +} + +function _cbPEP(e) { + var from = e.getAttribute('from'); + var items = e.getElementsByTagName('items')[0]; + // Handle Tune + if (items.getAttribute('node') == NS_TUNE) { + var tune = new Tune(); + tune.artist = Strophe.getText(items.getElementsByTagName('artist')[0]); + tune.length= Strophe.getText(items.getElementsByTagName('length')[0]); + tune.rating= Strophe.getText(items.getElementsByTagName('rating')[0]); + tune.source= Strophe.getText(items.getElementsByTagName('source')[0]); + tune.title= Strophe.getText(items.getElementsByTagName('title')[0]); + tune.track= Strophe.getText(items.getElementsByTagName('track')[0]); + tune.uri= Strophe.getText(items.getElementsByTagName('uri')[0]); + roster[jid2id(from)].tune = tune; + if ( $('#'+jid2id(from)+' .tune').length > 0 ) { + $('#'+jid2id(from)+' .tune').empty(); + $('#'+jid2id(from)+' .tune').append(Strophe.xmlTextNode('Listening to '+ tune.title + ' by ' + tune.artist + ' from ' + tune.source)); + } else { + $('#'+jid2id(from)).append('
Listening to '+ tune.title + ' by ' + tune.artist + ' from ' + tune.source + ''); + } + } + return true; +} + function onConnect(status) { if (status == Strophe.Status.CONNECTING) { log('Strophe is connecting.'); @@ -120,6 +176,10 @@ function onConnect(status) { } else if (status == Strophe.Status.CONNECTED) { log('Strophe is connected.'); getRoster(); + connection.addHandler(_cbPEP, NS_PEP, 'message'); + connection.addHandler(_cbDisco, Strophe.NS.DISCO_INFO, 'iq', 'get'); + var initialPresence = $pres().c('c', {xmlns: NS_CAPS, hash: 'sha-1', node: 'http://jabber.babelmonkeys.de', ver: genCaps()}).up(); + connection.send(initialPresence.tree()); } }