Anton Shestakov <av6@dwimlabs.net>, Thu, 14 Apr 2016 02:05:24 +0800
index: remove offline contacts only when they change to being offline
Since new contacts are currently added while they still have the default
presence of 'unavailable', add event sees them as offline and throws them away
immediately, before their presence could change to something else.
js/xmpp.js
Permissions: -rw-r--r--
// Generated by CoffeeScript 1.10.0 var bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; Tram.XMPPInterface = (function() { XMPPInterface.prototype.conn = null; function XMPPInterface() { this.onConnect = bind(this.onConnect, this); XMPPInterface.prototype._prepareConnection = function() { console.debug('connection exists, not reconnecting'); return this.conn = new Strophe.Connection("https://" + Tram.config.host + "/http-bind"); XMPPInterface.prototype.connect = function(node, pass) { this._prepareConnection(); jid = node + "@" + Tram.config.domain; return this.conn.connect(jid, pass, this.onConnect); XMPPInterface.prototype.disconnect = function(reason) { this.conn.disconnect(reason); XMPPInterface.prototype.startRegistration = function() { this._prepareConnection(); return this.conn.register.connect(Tram.config.domain, this.onConnect); XMPPInterface.prototype.register = function(username, password) { this.conn.register.fields.username = username; this.conn.register.fields.password = password; return this.conn.register.submit(); XMPPInterface.prototype.finishRegistration = function() { return this.conn.authenticate(); XMPPInterface.prototype.unregister = function() { xmlns: Strophe.NS.REGISTER return this.conn.send(iq.tree()); XMPPInterface.prototype.savevCard = function(data, okcb, failcb) { var $vcard, b, bi, binval, bl, d, dl, type; $vcard.c('NICKNAME').t(data.nickname).up(); $vcard.c('FN').t(data.fullname).up(); bi = data.avatar.indexOf(b); type = data.avatar.substr(dl, bi - dl); binval = data.avatar.substr(bi + bl); $vcard.c('PHOTO').c('TYPE').t(type).up().c('BINVAL').t(binval); return this.conn.sendIQ($vcard.tree(), okcb, failcb); XMPPInterface.prototype.onConnect = function(status, error) { case Strophe.Status.CONNECTING: console.debug('Strophe is connecting.'); this.trigger('connecting'); case Strophe.Status.AUTHENTICATING: console.debug('Strophe is authenticating.'); this.trigger('authenticating'); case Strophe.Status.AUTHFAIL: console.debug('Strophe failed to authenticate:', error); this.trigger('authfail'); case Strophe.Status.ERROR: console.debug('Strophe received an error:', error); case Strophe.Status.CONNFAIL: console.debug('Strophe failed to connect:', error); this.trigger('connfail'); case Strophe.Status.DISCONNECTING: console.debug('Strophe is disconnecting.'); this.trigger('disconnecting'); case Strophe.Status.DISCONNECTED: console.debug('Strophe is disconnected.'); this.trigger('disconnected'); case Strophe.Status.CONNECTED: console.debug('Strophe is connected.'); console.info('My jid:', this.conn.jid); this.trigger('connected'); case Strophe.Status.ATTACHED: console.debug('Strophe is attached.'); console.info('My jid:', this.conn.jid); this.trigger('attached'); case Strophe.Status.REGISTER: console.debug('Got registration prompt.'); this.trigger('register'); case Strophe.Status.REGISTERED: console.debug('Registered!'); this.trigger('registered'); case Strophe.Status.CONFLICT: console.debug('Contact already exists!'); this.trigger('conflict'); case Strophe.Status.NOTACCEPTABLE: console.debug('Registration form not properly filled out.'); this.trigger('notacceptable'); case Strophe.Status.REGIFAIL: console.debug('The server does not support In-Band Registration.'); this.trigger('regifail'); return this.trigger('status', status); XMPPInterface.prototype.generateVersionString = function() { var f, features, i, id, ids, j, k, len, len1, ref, ver; var j, len, ref, results; ref = this.conn.disco._identities; for (j = 0, len = ref.length; j < len; j++) { ids.sort(function(a, b) { if (a.category > b.category) { if (a.category < b.category) { var j, len, ref, results; ref = this.conn.disco._features; for (j = 0, len = ref.length; j < len; j++) { for (j = 0, len = ids.length; j < len; j++) { ver += id.category + "/" + id.type + "/" + ((ref = id.lang) != null ? ref : '') + "/" + id.name + "<"; for (k = 0, len1 = features.length; k < len1; k++) { XMPPInterface.prototype.sendPresence = function(attrs) { ver = this.generateVersionString(); if (attrs.priority != null) { pres.c('priority').t(attrs.priority).up(); if (attrs.show != null) { pres.c('show').t(attrs.show).up(); if (attrs.status != null) { pres.c('status').t(attrs.status).up(); return this.conn.send(pres.tree()); _(Tram.XMPPInterface.prototype).extend(Backbone.Events); //# sourceMappingURL=xmpp.js.map