1
0
mirror of https://github.com/moparisthebest/kaiwa synced 2024-12-01 21:52:17 -05:00
kaiwa/clientapp/models/me.js

127 lines
3.7 KiB
JavaScript
Raw Normal View History

/*global app, client*/
2013-08-29 23:38:28 -04:00
"use strict";
var HumanModel = require('human-model');
2013-08-20 13:45:06 -04:00
var Contacts = require('./contacts');
2013-08-29 23:38:28 -04:00
var Contact = require('./contact');
2013-09-16 19:12:00 -04:00
var MUCs = require('./mucs');
var MUC = require('./muc');
var fetchAvatar = require('../helpers/fetchAvatar');
2013-06-03 18:51:30 -04:00
2013-09-05 19:53:23 -04:00
module.exports = HumanModel.define({
2013-09-11 17:58:39 -04:00
initialize: function () {
this.bind('change:jid', this.loadContacts, this);
this.bind('change:hasFocus', function () {
this.setActiveContact(this._activeContact);
}, this);
this.contacts.bind('change:unreadCount', this.updateUnreadCount, this);
app.state.bind('change:active', this.updateIdlePresence, this);
2013-09-11 17:58:39 -04:00
},
2013-06-03 18:51:30 -04:00
session: {
2013-09-10 03:57:01 -04:00
jid: ['object', true],
2013-08-20 13:45:06 -04:00
status: ['string', true, ''],
avatar: ['string', true, ''],
2013-09-18 19:24:40 -04:00
avatarID: ['string', true, ''],
connected: ['bool', true, false],
2013-09-12 14:18:44 -04:00
shouldAskForAlertsPermission: ['bool', true, false],
hasFocus: ['bool', true, false],
2013-09-25 23:38:00 -04:00
_activeContact: ['string', true, ''],
displayName: ['string', true, 'Me']
2013-06-03 18:51:30 -04:00
},
2013-08-20 13:45:06 -04:00
collections: {
2013-09-16 19:12:00 -04:00
contacts: Contacts,
mucs: MUCs
2013-08-20 13:45:06 -04:00
},
setActiveContact: function (jid) {
var prev = this.getContact(this._activeContact);
if (prev) {
prev.activeContact = false;
}
var curr = this.getContact(jid);
if (curr) {
curr.activeContact = true;
curr.unreadCount = 0;
}
this._activeContact = jid;
},
2013-09-18 19:24:40 -04:00
setAvatar: function (id, type) {
var self = this;
fetchAvatar('', id, type, function (avatar) {
self.avatarID = avatar.id;
self.avatar = avatar.uri;
2013-09-18 19:24:40 -04:00
});
},
2013-08-20 13:45:06 -04:00
getContact: function (jid, alt) {
if (typeof jid === 'string') jid = new client.JID(jid);
if (typeof alt === 'string') alt = new client.JID(alt);
2013-08-20 13:45:06 -04:00
if (this.isMe(jid)) {
jid = alt || jid;
}
2013-09-16 19:12:00 -04:00
return this.contacts.get(jid.bare) || this.mucs.get(jid.bare) || undefined;
2013-08-20 13:45:06 -04:00
},
2013-08-29 23:38:28 -04:00
setContact: function (data, create) {
var contact = this.getContact(data.jid);
2013-09-10 03:57:01 -04:00
data.jid = data.jid.bare;
2013-08-29 23:38:28 -04:00
if (contact) {
contact.set(data);
contact.save();
} else if (create) {
contact = new Contact(data);
2013-09-11 17:58:39 -04:00
contact.inRoster = true;
contact.owner = this.jid.bare;
2013-08-29 23:38:28 -04:00
contact.save();
this.contacts.add(contact);
}
},
removeContact: function (jid) {
2013-09-10 03:57:01 -04:00
this.contacts.remove(jid.bare);
app.storage.roster.remove(jid.bare);
2013-08-29 23:38:28 -04:00
},
2013-09-11 17:58:39 -04:00
loadContacts: function () {
if (!this.jid.bare) return;
var self = this;
app.storage.roster.getAll(this.jid.bare, function (err, contacts) {
if (err) return;
contacts.forEach(function (contact) {
contact = new Contact(contact);
contact.owner = self.jid.bare;
contact.inRoster = true;
contact.save();
self.contacts.add(contact);
});
self.contacts.trigger('loaded');
2013-09-11 17:58:39 -04:00
});
},
2013-08-20 13:45:06 -04:00
isMe: function (jid) {
2013-09-10 03:57:01 -04:00
return jid.bare === this.jid.bare;
},
updateIdlePresence: function () {
var update = {
status: this.status,
show: this.show,
caps: app.api.disco.caps
};
if (!app.state.active) {
update.idle = {since: app.state.idleSince};
}
app.api.sendPresence(update);
},
updateUnreadCount: function () {
var unreadCounts = this.contacts.pluck('unreadCount');
var count = unreadCounts.reduce(function (a, b) { return a + b; });
if (count === 0) {
count = '';
}
app.state.badge = '' + count;
2013-06-03 18:51:30 -04:00
}
});