plugin.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. /**
  2. * @copyright The Converse.js contributors
  3. * @license Mozilla Public License (MPLv2)
  4. */
  5. import "../status/index.js";
  6. import VCard from './vcard.js';
  7. import _converse from '../../shared/_converse.js';
  8. import api, { converse } from '../../shared/api/index.js';
  9. import vcard_api from './api.js';
  10. import VCards from "./vcards";
  11. import {
  12. clearVCardsSession,
  13. initVCardCollection,
  14. onOccupantAvatarChanged,
  15. setVCardOnMUCMessage,
  16. setVCardOnModel,
  17. setVCardOnOccupant,
  18. } from './utils.js';
  19. const { Strophe } = converse.env;
  20. converse.plugins.add('converse-vcard', {
  21. dependencies: ["converse-status", "converse-roster"],
  22. // Overrides mentioned here will be picked up by converse.js's
  23. // plugin architecture they will replace existing methods on the
  24. // relevant objects or classes.
  25. // New functions which don't exist yet can also be added.
  26. overrides: {
  27. XMPPStatus: {
  28. getNickname () {
  29. const { _converse } = this.__super__;
  30. const nick = this.__super__.getNickname.apply(this);
  31. if (!nick && _converse.xmppstatus.vcard) {
  32. return _converse.xmppstatus.vcard.get('nickname');
  33. } else {
  34. return nick;
  35. }
  36. },
  37. getFullname () {
  38. const { _converse } = this.__super__;
  39. const fullname = this.__super__.getFullname.apply(this);
  40. if (!fullname && _converse.xmppstatus.vcard) {
  41. return _converse.xmppstatus.vcard.get('fullname');
  42. } else {
  43. return fullname;
  44. }
  45. }
  46. },
  47. RosterContact: {
  48. getDisplayName () {
  49. if (!this.get('nickname') && this.vcard) {
  50. return this.vcard.getDisplayName();
  51. } else {
  52. return this.__super__.getDisplayName.apply(this);
  53. }
  54. },
  55. getFullname () {
  56. if (this.vcard) {
  57. return this.vcard.get('fullname');
  58. } else {
  59. return this.__super__.getFullname.apply(this);
  60. }
  61. }
  62. }
  63. },
  64. initialize () {
  65. api.promises.add('VCardsInitialized');
  66. const exports = { VCard, VCards };
  67. Object.assign(_converse, exports); // XXX DEPRECATED
  68. Object.assign(_converse.exports, exports);
  69. api.listen.on('chatRoomInitialized', (m) => {
  70. setVCardOnModel(m)
  71. m.occupants.forEach(setVCardOnOccupant);
  72. m.listenTo(m.occupants, 'add', setVCardOnOccupant);
  73. m.listenTo(m.occupants, 'change:image_hash', o => onOccupantAvatarChanged(o));
  74. });
  75. api.listen.on('chatBoxInitialized', m => setVCardOnModel(m));
  76. api.listen.on('chatRoomMessageInitialized', m => setVCardOnMUCMessage(m));
  77. api.listen.on('addClientFeatures', () => api.disco.own.features.add(Strophe.NS.VCARD));
  78. api.listen.on('clearSession', () => clearVCardsSession());
  79. api.listen.on('messageInitialized', m => setVCardOnModel(m));
  80. api.listen.on('rosterContactInitialized', m => setVCardOnModel(m));
  81. api.listen.on('statusInitialized', initVCardCollection);
  82. Object.assign(_converse.api, vcard_api);
  83. }
  84. });