xmpp.chapril.org-conversejs/src/headless/plugins/vcard/index.js
2022-07-03 13:36:15 +02:00

101 lines
3.3 KiB
JavaScript

/**
* @copyright The Converse.js contributors
* @license Mozilla Public License (MPLv2)
*/
import "../status";
import VCard from './vcard.js';
import vcard_api from './api.js';
import { Collection } from "@converse/skeletor/src/collection";
import { _converse, api, converse } from "../../core.js";
import {
clearVCardsSession,
initVCardCollection,
onOccupantAvatarChanged,
setVCardOnMUCMessage,
setVCardOnModel,
setVCardOnOccupant,
} from './utils.js';
const { Strophe } = converse.env;
converse.plugins.add('converse-vcard', {
dependencies: ["converse-status", "converse-roster"],
// Overrides mentioned here will be picked up by converse.js's
// plugin architecture they will replace existing methods on the
// relevant objects or classes.
// New functions which don't exist yet can also be added.
overrides: {
XMPPStatus: {
getNickname () {
const { _converse } = this.__super__;
const nick = this.__super__.getNickname.apply(this);
if (!nick && _converse.xmppstatus.vcard) {
return _converse.xmppstatus.vcard.get('nickname');
} else {
return nick;
}
},
getFullname () {
const { _converse } = this.__super__;
const fullname = this.__super__.getFullname.apply(this);
if (!fullname && _converse.xmppstatus.vcard) {
return _converse.xmppstatus.vcard.get('fullname');
} else {
return fullname;
}
}
},
RosterContact: {
getDisplayName () {
if (!this.get('nickname') && this.vcard) {
return this.vcard.getDisplayName();
} else {
return this.__super__.getDisplayName.apply(this);
}
},
getFullname () {
if (this.vcard) {
return this.vcard.get('fullname');
} else {
return this.__super__.getFullname.apply(this);
}
}
}
},
initialize () {
api.promises.add('VCardsInitialized');
_converse.VCard = VCard;
_converse.VCards = Collection.extend({
model: _converse.VCard,
initialize () {
this.on('add', v => v.get('jid') && api.vcard.update(v));
}
});
api.listen.on('chatRoomInitialized', (m) => {
setVCardOnModel(m)
m.occupants.forEach(setVCardOnOccupant);
m.listenTo(m.occupants, 'add', setVCardOnOccupant);
m.listenTo(m.occupants, 'change:image_hash', o => onOccupantAvatarChanged(o));
});
api.listen.on('chatBoxInitialized', m => setVCardOnModel(m));
api.listen.on('chatRoomMessageInitialized', m => setVCardOnMUCMessage(m));
api.listen.on('addClientFeatures', () => api.disco.own.features.add(Strophe.NS.VCARD));
api.listen.on('clearSession', () => clearVCardsSession());
api.listen.on('messageInitialized', m => setVCardOnModel(m));
api.listen.on('rosterContactInitialized', m => setVCardOnModel(m));
api.listen.on('statusInitialized', initVCardCollection);
Object.assign(_converse.api, vcard_api);
}
});