1
0
mirror of https://github.com/moparisthebest/kaiwa synced 2024-11-12 04:25:05 -05:00
kaiwa/clientapp/helpers/xmppEventHandlers.js

218 lines
5.9 KiB
JavaScript
Raw Normal View History

2013-08-29 23:38:28 -04:00
/*global XMPP, me, app, client*/
"use strict";
2013-08-20 13:45:06 -04:00
var crypto = XMPP.crypto;
var _ = require('underscore');
2013-09-03 18:25:14 -04:00
var log = require('andlog');
2013-08-29 23:38:28 -04:00
var Contact = require('../models/contact');
var Resource = require('../models/resource');
var Message = require('../models/message');
2013-08-20 13:45:06 -04:00
module.exports = function (client, app) {
client.on('*', function (name, data) {
2013-09-03 18:25:14 -04:00
log.debug(name, data);
2013-08-20 13:45:06 -04:00
});
2013-09-05 19:53:23 -04:00
client.on('credentials:update', function (creds) {
client.config.credentials = creds;
if (creds.clientKey && creds.serverKey) {
delete creds.password;
delete creds.saltedPassword;
} else if (creds.saltedPassword) {
delete creds.password;
}
localStorage.config = JSON.stringify({
jid: client.config.jid,
server: client.config.server,
wsURL: client.config.wsURL,
credentials: creds
});
});
client.on('disconnected', function () {
me.connectionStatus = 'disconnected';
});
client.on('auth:failed', function () {
console.log('auth failed');
window.location = '/login';
});
2013-08-20 13:45:06 -04:00
client.on('session:started', function (jid) {
me.jid = jid;
2013-09-05 19:53:23 -04:00
me.connectionStatus = 'connected';
2013-08-20 13:45:06 -04:00
client.getRoster(function (err, resp) {
resp = resp.toJSON();
2013-08-29 23:38:28 -04:00
2013-09-05 19:53:23 -04:00
app.storage.rosterver.set(me.barejid, resp.roster.ver);
2013-08-29 23:38:28 -04:00
2013-08-20 13:45:06 -04:00
_.each(resp.roster.items, function (item) {
2013-08-29 23:38:28 -04:00
console.log(item);
me.setContact(item, true);
2013-08-20 13:45:06 -04:00
});
client.updateCaps();
client.sendPresence({
caps: client.disco.caps
});
client.enableCarbons();
});
});
client.on('roster:update', function (iq) {
2013-08-29 23:38:28 -04:00
iq = iq.toJSON();
var items = iq.roster.items;
2013-09-05 19:53:23 -04:00
app.storage.rosterver.set(me.barejid, iq.roster.ver);
2013-08-29 23:38:28 -04:00
2013-08-20 13:45:06 -04:00
_.each(items, function (item) {
var contact = me.getContact(item.jid);
if (item.subscription === 'remove') {
if (contact) {
2013-08-29 23:38:28 -04:00
me.removeContact(contact);
2013-08-20 13:45:06 -04:00
}
return;
}
2013-08-29 23:38:28 -04:00
me.setContact(item, false);
2013-08-20 13:45:06 -04:00
});
});
client.on('available', function (pres) {
pres = pres.toJSON();
var contact = me.getContact(pres.from);
if (contact) {
delete pres.id;
pres.show = pres.show || '';
pres.status = pres.status || '';
pres.priority = pres.priority || 0;
var resource = contact.resources.get(pres.from);
if (resource) {
resource.set(pres);
} else {
resource = new Resource(pres);
resource.cid = pres.from;
contact.resources.add(resource);
}
}
});
client.on('unavailable', function (pres) {
pres = pres.toJSON();
var contact = me.getContact(pres.from);
if (contact) {
var resource = contact.resources.get(pres.from);
if (resource) {
contact.resources.remove(resource);
}
if (contact.resources.length === 0) {
contact.offlineStatus = pres.status;
}
}
});
client.on('avatar', function (info) {
var contact = me.getContact(info.jid);
if (contact) {
2013-08-29 23:38:28 -04:00
var id = '';
var type = 'image/png';
2013-08-20 13:45:06 -04:00
if (info.avatars.length > 0) {
2013-08-29 23:38:28 -04:00
id = info.avatars[0].id;
type = info.avatars[0].type || 'image/png';
2013-08-20 13:45:06 -04:00
}
2013-08-29 23:38:28 -04:00
contact.setAvatar(id, type);
2013-08-20 13:45:06 -04:00
}
});
client.on('chatState', function (info) {
var contact = me.getContact(info.from);
if (contact) {
contact.chatState = info.chatState;
if (info.chatState === 'gone') {
contact.lockedResource = undefined;
}
}
});
client.on('chat', function (msg) {
msg = msg.toJSON();
var contact = me.getContact(msg.from, msg.to);
if (contact && !msg.replace) {
var message = new Message();
message.cid = msg.id;
message.set(msg);
2013-08-29 23:38:28 -04:00
2013-09-03 18:25:14 -04:00
//if (msg.archived) {
// msg.archived.forEach(function (archived) {
// if (me.isMe(archived.by)) {
// message.id = archived.id;
// message.cid = msg.id;
// }
// });
//}
2013-08-29 23:38:28 -04:00
2013-08-20 13:45:06 -04:00
contact.messages.add(message);
if (!contact.lockedResource) {
contact.lockedResource = msg.from;
} else if (msg.from !== contact.lockedResource) {
contact.lockedResource = undefined;
}
}
});
client.on('replace', function (msg) {
msg = msg.toJSON();
var contact = me.getContact(msg.from, msg.to);
if (!contact) return;
var id = msg.replace;
var original = contact.messages.get(id);
if (!original) return;
original.correct(msg);
});
client.on('carbon:received', function (carbon) {
if (!me.isMe(carbon.from)) return;
var msg = carbon.carbonReceived.forwarded.message;
var delay = carbon.carbonReceived.forwarded.delay;
if (!delay.stamp) {
delay.stamp = Date.now();
}
if (!msg._extensions.delay) {
msg.delay = delay;
}
client.emit('message', msg);
});
client.on('carbon:sent', function (carbon) {
if (!me.isMe(carbon.from)) return;
var msg = carbon.carbonSent.forwarded.message;
var delay = carbon.carbonSent.forwarded.delay;
if (!delay.stamp) {
delay.stamp = Date.now();
}
if (!msg._extensions.delay) {
msg.delay = delay;
}
client.emit('message', msg);
});
};