From 0a07cad2cb9495ffd34d9a584d289a5b10d0d70d Mon Sep 17 00:00:00 2001 From: JC Brand Date: Mon, 25 Apr 2022 09:47:11 +0200 Subject: [PATCH] Move connection api into separate file --- src/headless/core.js | 71 ++----------------- src/headless/shared/connection/api.js | 63 ++++++++++++++++ .../{connection.js => connection/index.js} | 6 +- src/headless/utils/init.js | 2 +- src/plugins/muc-views/heading.js | 7 +- 5 files changed, 77 insertions(+), 72 deletions(-) create mode 100644 src/headless/shared/connection/api.js rename src/headless/shared/{connection.js => connection/index.js} (99%) diff --git a/src/headless/core.js b/src/headless/core.js index 708982183..9e5388211 100644 --- a/src/headless/core.js +++ b/src/headless/core.js @@ -5,6 +5,7 @@ import URI from 'urijs'; import _converse from '@converse/headless/shared/_converse'; import advancedFormat from 'dayjs/plugin/advancedFormat'; +import connection_api from '@converse/headless/shared/connection/api.js'; import dayjs from 'dayjs'; import i18n from '@converse/headless/shared/i18n'; import invoke from 'lodash-es/invoke'; @@ -13,10 +14,10 @@ import log from '@converse/headless/log.js'; import pluggable from 'pluggable.js/src/pluggable.js'; import sizzle from 'sizzle'; import u, { setUnloadEvent, replacePromise } from '@converse/headless/utils/core.js'; -import { Collection } from "@converse/skeletor/src/collection"; -import { Connection, MockConnection } from '@converse/headless/shared/connection.js'; -import { Events } from '@converse/skeletor/src/events.js'; import { CHAT_STATES, KEYCODES } from './shared/constants.js'; +import { Collection } from "@converse/skeletor/src/collection"; +import { Connection, MockConnection } from '@converse/headless/shared/connection/index.js'; +import { Events } from '@converse/skeletor/src/events.js'; import { Model } from '@converse/skeletor/src/model.js'; import { Strophe, $build, $iq, $msg, $pres } from 'strophe.js/src/strophe'; import { TimeoutError } from '@converse/headless/shared/errors'; @@ -101,66 +102,9 @@ pluggable.enable(_converse, '_converse', 'pluggable'); * @memberOf _converse */ export const api = _converse.api = { - /** - * This grouping collects API functions related to the XMPP connection. - * - * @namespace _converse.api.connection - * @memberOf _converse.api - */ - connection: { - /** - * @method _converse.api.connection.connected - * @memberOf _converse.api.connection - * @returns {boolean} Whether there is an established connection or not. - */ - connected () { - return _converse?.connection?.connected && true; - }, - /** - * Terminates the connection. - * - * @method _converse.api.connection.disconnect - * @memberOf _converse.api.connection - */ - disconnect () { - if (_converse.connection) { - _converse.connection.disconnect(); - } - }, - - /** - * Can be called once the XMPP connection has dropped and we want - * to attempt reconnection. - * Only needs to be called once, if reconnect fails Converse will - * attempt to reconnect every two seconds, alternating between BOSH and - * Websocket if URLs for both were provided. - * @method reconnect - * @memberOf _converse.api.connection - */ - reconnect () { - const { __, connection } = _converse; - connection.setConnectionStatus( - Strophe.Status.RECONNECTING, - __('The connection has dropped, attempting to reconnect.') - ); - if (connection?.reconnecting) { - return connection.debouncedReconnect(); - } else { - return connection.reconnect(); - } - }, - - /** - * Utility method to determine the type of connection we have - * @method isType - * @memberOf _converse.api.connection - * @returns {boolean} - */ - isType (type) { - return _converse.connection.isType(type); - } - }, + connection: connection_api, + settings: settings_api, /** * Lets you trigger events, which can be listened to via @@ -318,9 +262,6 @@ export const api = _converse.api = { } }, - settings: settings_api, - - /** * Converse and its plugins trigger various events which you can listen to via the * {@link _converse.api.listen} namespace. diff --git a/src/headless/shared/connection/api.js b/src/headless/shared/connection/api.js new file mode 100644 index 000000000..af42f13e7 --- /dev/null +++ b/src/headless/shared/connection/api.js @@ -0,0 +1,63 @@ +import _converse from '@converse/headless/shared/_converse.js'; +import { Strophe } from 'strophe.js/src/strophe.js'; + +/** + * This grouping collects API functions related to the XMPP connection. + * + * @namespace _converse.api.connection + * @memberOf _converse.api + */ +export default { + /** + * @method _converse.api.connection.connected + * @memberOf _converse.api.connection + * @returns {boolean} Whether there is an established connection or not. + */ + connected () { + return _converse?.connection?.connected && true; + }, + + /** + * Terminates the connection. + * + * @method _converse.api.connection.disconnect + * @memberOf _converse.api.connection + */ + disconnect () { + if (_converse.connection) { + _converse.connection.disconnect(); + } + }, + + /** + * Can be called once the XMPP connection has dropped and we want + * to attempt reconnection. + * Only needs to be called once, if reconnect fails Converse will + * attempt to reconnect every two seconds, alternating between BOSH and + * Websocket if URLs for both were provided. + * @method reconnect + * @memberOf _converse.api.connection + */ + reconnect () { + const { __, connection } = _converse; + connection.setConnectionStatus( + Strophe.Status.RECONNECTING, + __('The connection has dropped, attempting to reconnect.') + ); + if (connection?.reconnecting) { + return connection.debouncedReconnect(); + } else { + return connection.reconnect(); + } + }, + + /** + * Utility method to determine the type of connection we have + * @method isType + * @memberOf _converse.api.connection + * @returns {boolean} + */ + isType (type) { + return _converse.connection.isType(type); + } +}; diff --git a/src/headless/shared/connection.js b/src/headless/shared/connection/index.js similarity index 99% rename from src/headless/shared/connection.js rename to src/headless/shared/connection/index.js index 77ec12941..78177593c 100644 --- a/src/headless/shared/connection.js +++ b/src/headless/shared/connection/index.js @@ -1,10 +1,10 @@ import debounce from 'lodash-es/debounce'; import isElement from 'lodash-es/isElement'; -import log from "../log.js"; +import log from "@converse/headless/log.js"; import sizzle from 'sizzle'; import { BOSH_WAIT } from '@converse/headless/shared/constants.js'; -import { Strophe } from 'strophe.js/src/core'; -import { _converse, api, clearSession } from "../core.js"; +import { Strophe } from 'strophe.js/src/core.js'; +import { _converse, api, clearSession } from "@converse/headless/core.js"; import { getOpenPromise } from '@converse/openpromise'; import { setUserJID, } from '@converse/headless/utils/init.js'; import { tearDown } from '@converse/headless/utils/core.js'; diff --git a/src/headless/utils/init.js b/src/headless/utils/init.js index 003ca9c7e..9de7379d9 100644 --- a/src/headless/utils/init.js +++ b/src/headless/utils/init.js @@ -5,7 +5,7 @@ import localDriver from 'localforage-webextensionstorage-driver/local'; import log from '@converse/headless/log'; import syncDriver from 'localforage-webextensionstorage-driver/sync'; import { CORE_PLUGINS } from '@converse/headless/shared/constants.js'; -import { Connection } from '@converse/headless/shared/connection.js'; +import { Connection } from '@converse/headless/shared/connection/index.js'; import { Model } from '@converse/skeletor/src/model.js'; import { Strophe } from 'strophe.js/src/strophe'; import { createStore, initStorage } from '@converse/headless/utils/storage.js'; diff --git a/src/plugins/muc-views/heading.js b/src/plugins/muc-views/heading.js index 5276a6d3c..b538f730b 100644 --- a/src/plugins/muc-views/heading.js +++ b/src/plugins/muc-views/heading.js @@ -177,9 +177,10 @@ export default class MUCHeading extends CustomElement { }); } - const chatview = _converse.chatboxviews.get(this.getAttribute('jid')); - if (chatview) { - return _converse.api.hook('getHeadingButtons', chatview, buttons); + const el = _converse.chatboxviews.get(this.getAttribute('jid')); + if (el) { + // This hook is described in src/plugins/chatview/heading.js + return _converse.api.hook('getHeadingButtons', el, buttons); } else { return Promise.resolve(buttons); // Happens during tests }