Преглед изворни кода

Add `status` and `show` elements to MUC join presence in status plugin

and not in the muc plugin.

This decouples the plugins more. Ideally we can remove the status plugin
entirely from a customized Converse build (but we're not there yet).
JC Brand пре 3 година
родитељ
комит
f0297fe075

+ 1 - 0
src/headless/plugins/disco/utils.js

@@ -14,6 +14,7 @@ function onDiscoInfoRequest (stanza) {
     if (from !== null) {
         iqresult.attrs({'to': from});
     }
+
     iqresult.c('query', attrs);
     _converse.disco._identities.forEach(identity => {
         const attrs = {

+ 0 - 1
src/headless/plugins/muc/affiliations/utils.js

@@ -30,7 +30,6 @@ export async function getAffiliationList (affiliation, muc_jid) {
         const err_msg = __('Error: timeout while fetching %1s list for MUC %2s', affiliation, muc_jid);
         const err = new Error(err_msg);
         log.warn(err_msg);
-        log.warn(result);
         return err;
     }
     if (u.isErrorStanza(result)) {

+ 7 - 11
src/headless/plugins/muc/muc.js

@@ -206,17 +206,13 @@ const ChatRoomMixin = {
             stanza.cnode(Strophe.xmlElement('password', [], password));
         }
         stanza.up(); // Go one level up, out of the `x` element.
-
-        const status = _converse.xmppstatus.get('status');
-        if (['away', 'chat', 'dnd', 'xa'].includes(status)) {
-            stanza.c('show').t(status).up();
-        }
-        const status_message = _converse.xmppstatus.get('status_message');
-        if (status_message) {
-            stanza.c('status').t(status_message).up();
-        }
-
-        stanza = await api.hook('constructedMUCPresence', null, stanza);
+         /**
+          * *Hook* which allows plugins to update an outgoing MUC join presence stanza
+          * @event _converse#constructedMUCPresence
+          * @param { _converse.ChatRoom } - The MUC from which this message stanza is being sent.
+          * @param { XMLElement } stanza - The stanza which will be sent out
+          */
+        stanza = await api.hook('constructedMUCPresence', this, stanza);
         return stanza;
     },
 

+ 3 - 2
src/headless/plugins/ping/utils.js

@@ -24,10 +24,11 @@ function pong (ping) {
 }
 
 export function registerPongHandler () {
-    if (_converse.connection.disco !== undefined) {
+    const { connection } = _converse;
+    if (connection.disco) {
         api.disco.own.features.add(Strophe.NS.PING);
     }
-    return _converse.connection.addHandler(pong, Strophe.NS.PING, "iq", "get");
+    return connection.addHandler(pong, Strophe.NS.PING, "iq", "get");
 }
 
 export function registerPingHandler () {

+ 9 - 1
src/headless/plugins/status/index.js

@@ -5,7 +5,14 @@
 import XMPPStatus from './status.js';
 import status_api from './api.js';
 import { _converse, api, converse } from '@converse/headless/core';
-import { initStatus, onEverySecond, onUserActivity, registerIntervalHandler, sendCSI } from './utils.js';
+import {
+    addStatusToMUCJoinPresence,
+    initStatus,
+    onEverySecond,
+    onUserActivity,
+    registerIntervalHandler,
+    sendCSI
+} from './utils.js';
 
 const { Strophe } = converse.env;
 
@@ -54,5 +61,6 @@ converse.plugins.add('converse-status', {
 
         api.listen.on('connected', () => initStatus(false));
         api.listen.on('reconnected', () => initStatus(true));
+        api.listen.on('constructedMUCPresence', addStatusToMUCJoinPresence);
     }
 });

+ 14 - 0
src/headless/plugins/status/utils.js

@@ -126,3 +126,17 @@ export function registerIntervalHandler () {
     window.addEventListener(unloadevent, () => _converse.session?.save('active', false));
     _converse.everySecondTrigger = window.setInterval(_converse.onEverySecond, 1000);
 }
+
+export function addStatusToMUCJoinPresence (_, stanza) {
+    const { xmppstatus } = _converse;
+
+    const status = xmppstatus.get('status');
+    if (['away', 'chat', 'dnd', 'xa'].includes(status)) {
+        stanza.c('show').t(status).up();
+    }
+    const status_message = xmppstatus.get('status_message');
+    if (status_message) {
+        stanza.c('status').t(status_message).up();
+    }
+    return stanza;
+}