Use `@converse/openpromise`

This commit is contained in:
JC Brand 2021-04-28 18:35:08 +02:00
parent 57ccf4c20e
commit 3d58b67517
17 changed files with 47 additions and 71 deletions

View File

@ -590,7 +590,7 @@ window.addEventListener('converse-loaded', () => {
}; };
function clearIndexedDB () { function clearIndexedDB () {
const promise = u.getResolveablePromise(); const promise = u.getOpenPromise();
const db_request = window.indexedDB.open("converse-test-persistent"); const db_request = window.indexedDB.open("converse-test-persistent");
db_request.onsuccess = function () { db_request.onsuccess = function () {
const db = db_request.result; const db = db_request.result;

View File

@ -35,6 +35,7 @@ import { Model } from '@converse/skeletor/src/model.js';
import { Strophe, $build, $iq, $msg, $pres } from 'strophe.js/src/strophe'; import { Strophe, $build, $iq, $msg, $pres } from 'strophe.js/src/strophe';
import { TimeoutError } from '@converse/headless/shared/errors'; import { TimeoutError } from '@converse/headless/shared/errors';
import { createStore, replacePromise } from '@converse/headless/shared/utils'; import { createStore, replacePromise } from '@converse/headless/shared/utils';
import { getOpenPromise } from '@converse/openpromise';
import { html } from 'lit-element'; import { html } from 'lit-element';
import { sprintf } from 'sprintf-js'; import { sprintf } from 'sprintf-js';
@ -355,7 +356,7 @@ export const api = _converse.api = {
*/ */
await api.trigger('beforeLogout', {'synchronous': true}); await api.trigger('beforeLogout', {'synchronous': true});
const promise = u.getResolveablePromise(); const promise = getOpenPromise();
const complete = () => { const complete = () => {
// Recreate all the promises // Recreate all the promises
Object.keys(_converse.promises).forEach(replacePromise); Object.keys(_converse.promises).forEach(replacePromise);
@ -563,7 +564,7 @@ export const api = _converse.api = {
add (promises, replace=true) { add (promises, replace=true) {
promises = Array.isArray(promises) ? promises : [promises]; promises = Array.isArray(promises) ? promises : [promises];
promises.forEach(name => { promises.forEach(name => {
const promise = u.getResolveablePromise(); const promise = getOpenPromise();
promise.replace = replace; promise.replace = replace;
_converse.promises[name] = promise; _converse.promises[name] = promise;
}); });

View File

@ -3,6 +3,7 @@ import Bookmark from './model.js';
import log from "@converse/headless/log.js"; import log from "@converse/headless/log.js";
import { __ } from 'i18n'; import { __ } from 'i18n';
import { _converse, api, converse } from "@converse/headless/core"; import { _converse, api, converse } from "@converse/headless/core";
import { getOpenPromise } from '@converse/openpromise';
import { initStorage } from '@converse/headless/shared/utils.js'; import { initStorage } from '@converse/headless/shared/utils.js';
const { Strophe, $iq, sizzle } = converse.env; const { Strophe, $iq, sizzle } = converse.env;
@ -40,7 +41,7 @@ const Bookmarks = {
}, },
fetchBookmarks () { fetchBookmarks () {
const deferred = u.getResolveablePromise(); const deferred = getOpenPromise();
if (window.sessionStorage.getItem(this.fetched_flag)) { if (window.sessionStorage.getItem(this.fetched_flag)) {
this.fetch({ this.fetch({
'success': () => deferred.resolve(), 'success': () => deferred.resolve(),

View File

@ -1,6 +1,7 @@
import ModelWithContact from './model-with-contact.js'; import ModelWithContact from './model-with-contact.js';
import log from '../../log.js'; import log from '../../log.js';
import { _converse, api, converse } from '../../core.js'; import { _converse, api, converse } from '../../core.js';
import { getOpenPromise } from '@converse/openpromise';
const u = converse.env.utils; const u = converse.env.utils;
const { Strophe } = converse.env; const { Strophe } = converse.env;
@ -26,7 +27,7 @@ const MessageMixin = {
if (!this.checkValidity()) { if (!this.checkValidity()) {
return; return;
} }
this.initialized = u.getResolveablePromise(); this.initialized = getOpenPromise();
if (this.get('type') === 'chat') { if (this.get('type') === 'chat') {
ModelWithContact.prototype.initialize.apply(this, arguments); ModelWithContact.prototype.initialize.apply(this, arguments);
this.setRosterContact(Strophe.getBareJidFromJid(this.get('from'))); this.setRosterContact(Strophe.getBareJidFromJid(this.get('from')));

View File

@ -1,13 +1,11 @@
import { api, converse } from "../../core.js";
import { Model } from '@converse/skeletor/src/model.js'; import { Model } from '@converse/skeletor/src/model.js';
import { api } from "../../core.js";
const u = converse.env.utils; import { getOpenPromise } from '@converse/openpromise';
const ModelWithContact = Model.extend({ const ModelWithContact = Model.extend({
initialize () { initialize () {
this.rosterContactAdded = u.getResolveablePromise(); this.rosterContactAdded = getOpenPromise();
}, },
async setRosterContact (jid) { async setRosterContact (jid) {

View File

@ -6,6 +6,7 @@ import log from '@converse/headless/log';
import pick from "lodash/pick"; import pick from "lodash/pick";
import { Model } from '@converse/skeletor/src/model.js'; import { Model } from '@converse/skeletor/src/model.js';
import { _converse, api, converse } from "../../core.js"; import { _converse, api, converse } from "../../core.js";
import { getOpenPromise } from '@converse/openpromise';
import { initStorage } from '@converse/headless/shared/utils.js'; import { initStorage } from '@converse/headless/shared/utils.js';
import { parseMessage } from './parsers.js'; import { parseMessage } from './parsers.js';
import { sendMarker } from '@converse/headless/shared/actions'; import { sendMarker } from '@converse/headless/shared/actions';
@ -39,7 +40,7 @@ const ChatBox = ModelWithContact.extend({
}, },
async initialize () { async initialize () {
this.initialized = u.getResolveablePromise(); this.initialized = getOpenPromise();
ModelWithContact.prototype.initialize.apply(this, arguments); ModelWithContact.prototype.initialize.apply(this, arguments);
const jid = this.get('jid'); const jid = this.get('jid');
@ -84,7 +85,7 @@ const ChatBox = ModelWithContact.extend({
initMessages () { initMessages () {
this.messages = this.getMessagesCollection(); this.messages = this.getMessagesCollection();
this.messages.fetched = u.getResolveablePromise(); this.messages.fetched = getOpenPromise();
this.messages.fetched.then(() => { this.messages.fetched.then(() => {
/** /**
* Triggered whenever a `_converse.ChatBox` instance has fetched its messages from * Triggered whenever a `_converse.ChatBox` instance has fetched its messages from
@ -244,7 +245,7 @@ const ChatBox = ModelWithContact.extend({
} finally { } finally {
delete this.msg_chain; delete this.msg_chain;
delete this.messages.fetched_flag; delete this.messages.fetched_flag;
this.messages.fetched = u.getResolveablePromise(); this.messages.fetched = getOpenPromise();
} }
}, },

View File

@ -1,8 +1,9 @@
import { _converse, api, converse } from "@converse/headless/core.js";
import isObject from "lodash-es/isObject"; import isObject from "lodash-es/isObject";
import log from "@converse/headless/log.js"; import log from "@converse/headless/log.js";
import { _converse, api, converse } from "@converse/headless/core.js";
import { getOpenPromise } from '@converse/openpromise';
const { Strophe, $iq, utils } = converse.env; const { Strophe, $iq } = converse.env;
export default { export default {
@ -310,7 +311,7 @@ export default {
entity.fields.reset(); entity.fields.reset();
entity.identities.reset(); entity.identities.reset();
if (!entity.waitUntilFeaturesDiscovered.isPending) { if (!entity.waitUntilFeaturesDiscovered.isPending) {
entity.waitUntilFeaturesDiscovered = utils.getResolveablePromise() entity.waitUntilFeaturesDiscovered = getOpenPromise()
} }
entity.queryInfo(); entity.queryInfo();
} else { } else {

View File

@ -3,8 +3,9 @@ import sizzle from "sizzle";
import { Collection } from "@converse/skeletor/src/collection"; import { Collection } from "@converse/skeletor/src/collection";
import { Model } from '@converse/skeletor/src/model.js'; import { Model } from '@converse/skeletor/src/model.js';
import { _converse, api, converse } from "@converse/headless/core.js"; import { _converse, api, converse } from "@converse/headless/core.js";
import { getOpenPromise } from '@converse/openpromise';
const { Strophe, utils } = converse.env; const { Strophe } = converse.env;
/** /**
* @class * @class
@ -19,7 +20,7 @@ const DiscoEntity = Model.extend({
idAttribute: 'jid', idAttribute: 'jid',
initialize (attrs, options) { initialize (attrs, options) {
this.waitUntilFeaturesDiscovered = utils.getResolveablePromise(); this.waitUntilFeaturesDiscovered = getOpenPromise();
this.dataforms = new Collection(); this.dataforms = new Collection();
let id = `converse.dataforms-${this.get('jid')}`; let id = `converse.dataforms-${this.get('jid')}`;

View File

@ -6,13 +6,14 @@
import { ASCII_REPLACE_REGEX, CODEPOINTS_REGEX } from './regexes.js'; import { ASCII_REPLACE_REGEX, CODEPOINTS_REGEX } from './regexes.js';
import { Model } from '@converse/skeletor/src/model.js'; import { Model } from '@converse/skeletor/src/model.js';
import { _converse, api, converse } from "../../core.js"; import { _converse, api, converse } from "../../core.js";
import { getOpenPromise } from '@converse/openpromise';
import { html } from 'lit-html'; import { html } from 'lit-html';
const u = converse.env.utils; const u = converse.env.utils;
converse.emojis = { converse.emojis = {
'initialized': false, 'initialized': false,
'initialized_promise': u.getResolveablePromise() 'initialized_promise': getOpenPromise()
}; };

View File

@ -11,6 +11,7 @@ import { Model } from '@converse/skeletor/src/model.js';
import { Strophe, $build, $iq, $msg, $pres } from 'strophe.js/src/strophe'; import { Strophe, $build, $iq, $msg, $pres } from 'strophe.js/src/strophe';
import { _converse, api, converse } from '../../core.js'; import { _converse, api, converse } from '../../core.js';
import { computeAffiliationsDelta, setAffiliations, getAffiliationList } from './affiliations/utils.js'; import { computeAffiliationsDelta, setAffiliations, getAffiliationList } from './affiliations/utils.js';
import { getOpenPromise } from '@converse/openpromise';
import { initStorage } from '@converse/headless/shared/utils.js'; import { initStorage } from '@converse/headless/shared/utils.js';
import { isArchived } from '@converse/headless/shared/parsers'; import { isArchived } from '@converse/headless/shared/parsers';
import { parseMUCMessage, parseMUCPresence } from './parsers.js'; import { parseMUCMessage, parseMUCPresence } from './parsers.js';
@ -84,7 +85,7 @@ const ChatRoomMixin = {
}, },
async initialize () { async initialize () {
this.initialized = u.getResolveablePromise(); this.initialized = getOpenPromise();
this.debouncedRejoin = debounce(this.rejoin, 250); this.debouncedRejoin = debounce(this.rejoin, 250);
this.set('box_id', `box-${this.get('jid')}`); this.set('box_id', `box-${this.get('jid')}`);
this.initNotifications(); this.initNotifications();
@ -674,7 +675,7 @@ const ChatRoomMixin = {
id = this.getUniqueId('sendIQ'); id = this.getUniqueId('sendIQ');
el.setAttribute('id', id); el.setAttribute('id', id);
} }
const promise = u.getResolveablePromise(); const promise = getOpenPromise();
const timeoutHandler = _converse.connection.addTimedHandler(_converse.STANZA_TIMEOUT, () => { const timeoutHandler = _converse.connection.addTimedHandler(_converse.STANZA_TIMEOUT, () => {
_converse.connection.deleteHandler(handler); _converse.connection.deleteHandler(handler);
promise.reject(new _converse.TimeoutError('Timeout Error: No response from server')); promise.reject(new _converse.TimeoutError('Timeout Error: No response from server'));

View File

@ -1,7 +1,8 @@
import { _converse, api, converse } from "@converse/headless/core";
import { Model } from '@converse/skeletor/src/model.js'; import { Model } from '@converse/skeletor/src/model.js';
import { _converse, api, converse } from "@converse/headless/core";
import { getOpenPromise } from '@converse/openpromise';
const { Strophe, $iq, $pres, u } = converse.env; const { Strophe, $iq, $pres } = converse.env;
/** /**
* @class * @class
@ -17,7 +18,7 @@ const RosterContact = Model.extend({
}, },
async initialize (attributes) { async initialize (attributes) {
this.initialized = u.getResolveablePromise(); this.initialized = getOpenPromise();
this.setPresence(); this.setPresence();
const { jid } = attributes; const { jid } = attributes;
const bare_jid = Strophe.getBareJidFromJid(jid).toLowerCase(); const bare_jid = Strophe.getBareJidFromJid(jid).toLowerCase();

View File

@ -1,11 +1,11 @@
/** /**
* @module converse-smacks
* @copyright The Converse.js contributors * @copyright The Converse.js contributors
* @license Mozilla Public License (MPLv2) * @license Mozilla Public License (MPLv2)
* @description Converse.js plugin which adds support for XEP-0198: Stream Management * @description Converse.js plugin which adds support for XEP-0198: Stream Management
*/ */
import { _converse, api, converse } from "../core.js";
import log from "../log.js"; import log from "../log.js";
import { _converse, api, converse } from "../core.js";
import { getOpenPromise } from '@converse/openpromise';
const { Strophe } = converse.env; const { Strophe } = converse.env;
const u = converse.env.utils; const u = converse.env.utils;
@ -158,7 +158,7 @@ function onResumedStanza (el) {
} }
async function sendResumeStanza () { async function sendResumeStanza () {
const promise = u.getResolveablePromise(); const promise = getOpenPromise();
_converse.connection._addSysHandler(el => promise.resolve(onResumedStanza(el)), Strophe.NS.SM, 'resumed'); _converse.connection._addSysHandler(el => promise.resolve(onResumedStanza(el)), Strophe.NS.SM, 'resumed');
_converse.connection._addSysHandler(el => promise.resolve(onFailedStanza(el)), Strophe.NS.SM, 'failed'); _converse.connection._addSysHandler(el => promise.resolve(onFailedStanza(el)), Strophe.NS.SM, 'failed');
@ -175,7 +175,7 @@ async function sendEnableStanza () {
return; return;
} }
if (await isStreamManagementSupported()) { if (await isStreamManagementSupported()) {
const promise = u.getResolveablePromise(); const promise = getOpenPromise();
_converse.connection._addSysHandler(el => promise.resolve(saveSessionData(el)), Strophe.NS.SM, 'enabled'); _converse.connection._addSysHandler(el => promise.resolve(saveSessionData(el)), Strophe.NS.SM, 'enabled');
_converse.connection._addSysHandler(el => promise.resolve(onFailedStanza(el)), Strophe.NS.SM, 'failed'); _converse.connection._addSysHandler(el => promise.resolve(onFailedStanza(el)), Strophe.NS.SM, 'failed');

View File

@ -1,11 +1,11 @@
import i18n from '@converse/headless/shared/i18n'; import i18n from '@converse/headless/shared/i18n';
import log from '@converse/headless/log'; import log from '@converse/headless/log';
import u from '@converse/headless/utils/core';
import { CONNECTION_STATUS } from '@converse/headless/shared/constants'; import { CONNECTION_STATUS } from '@converse/headless/shared/constants';
import { Router } from '@converse/skeletor/src/router.js'; import { Router } from '@converse/skeletor/src/router.js';
import { TimeoutError } from '@converse/headless/shared/errors'; import { TimeoutError } from '@converse/headless/shared/errors';
import { createStore, getDefaultStore } from '@converse/headless/shared/utils.js'; import { createStore, getDefaultStore } from '@converse/headless/shared/utils.js';
import { getInitSettings } from '@converse/headless/shared/settings'; import { getInitSettings } from '@converse/headless/shared/settings';
import { getOpenPromise } from '@converse/openpromise';
/** /**
@ -19,7 +19,7 @@ const _converse = {
CONNECTION_STATUS, CONNECTION_STATUS,
templates: {}, templates: {},
promises: { promises: {
'initialized': u.getResolveablePromise() 'initialized': getOpenPromise()
}, },
STATUS_WEIGHTS: { STATUS_WEIGHTS: {

View File

@ -2,9 +2,9 @@ import debounce from 'lodash/debounce';
import isElement from 'lodash/isElement'; import isElement from 'lodash/isElement';
import log from "../log.js"; import log from "../log.js";
import sizzle from 'sizzle'; import sizzle from 'sizzle';
import u from '@converse/headless/utils/core';
import { Strophe } from 'strophe.js/src/core'; import { Strophe } from 'strophe.js/src/core';
import { _converse, api, clearSession, tearDown } from "../core.js"; import { _converse, api, clearSession, tearDown } from "../core.js";
import { getOpenPromise } from '@converse/openpromise';
const BOSH_WAIT = 59; const BOSH_WAIT = 59;
@ -331,7 +331,7 @@ export class Connection extends Strophe.Connection {
restoreWorkerSession () { restoreWorkerSession () {
this.attach(this.onConnectStatusChanged); this.attach(this.onConnectStatusChanged);
this.worker_attach_promise = u.getResolveablePromise(); this.worker_attach_promise = getOpenPromise();
return this.worker_attach_promise; return this.worker_attach_promise;
} }
} }

View File

@ -1,7 +1,7 @@
import Storage from '@converse/skeletor/src/storage.js'; import Storage from '@converse/skeletor/src/storage.js';
import log from '@converse/headless/log'; import log from '@converse/headless/log';
import u from '@converse/headless/utils/core';
import { _converse, api } from '@converse/headless/core'; import { _converse, api } from '@converse/headless/core';
import { getOpenPromise } from '@converse/openpromise';
export function getDefaultStore () { export function getDefaultStore () {
if (_converse.config.get('trusted')) { if (_converse.config.get('trusted')) {
@ -38,7 +38,7 @@ export function replacePromise (name) {
throw new Error(`Tried to replace non-existing promise: ${name}`); throw new Error(`Tried to replace non-existing promise: ${name}`);
} }
if (existing_promise.replace) { if (existing_promise.replace) {
const promise = u.getResolveablePromise(); const promise = getOpenPromise();
promise.replace = existing_promise.replace; promise.replace = existing_promise.replace;
_converse.promises[name] = promise; _converse.promises[name] = promise;
} else { } else {

View File

@ -11,6 +11,7 @@ import log from "@converse/headless/log";
import sizzle from "sizzle"; import sizzle from "sizzle";
import { Model } from '@converse/skeletor/src/model.js'; import { Model } from '@converse/skeletor/src/model.js';
import { Strophe } from 'strophe.js/src/strophe'; import { Strophe } from 'strophe.js/src/strophe';
import { getOpenPromise } from '@converse/openpromise';
/** /**
* The utils object * The utils object
@ -328,38 +329,8 @@ u.isPersistableModel = function (model) {
return model.collection && model.collection.browserStorage; return model.collection && model.collection.browserStorage;
}; };
/** u.getResolveablePromise = getOpenPromise;
* Returns a promise object on which `resolve` or `reject` can be called. u.getOpenPromise = getOpenPromise;
* @private
* @method u#getResolveablePromise
*/
u.getResolveablePromise = function () {
const wrapper = {
isResolved: false,
isPending: true,
isRejected: false
};
const promise = new Promise((resolve, reject) => {
wrapper.resolve = resolve;
wrapper.reject = reject;
})
Object.assign(promise, wrapper);
promise.then(
function (v) {
promise.isResolved = true;
promise.isPending = false;
promise.isRejected = false;
return v;
},
function (e) {
promise.isResolved = false;
promise.isPending = false;
promise.isRejected = true;
throw (e);
}
);
return promise;
};
u.interpolate = function (string, o) { u.interpolate = function (string, o) {
return string.replace(/{{{([^{}]*)}}}/g, return string.replace(/{{{([^{}]*)}}}/g,
@ -576,7 +547,7 @@ u.waitUntil = function (func, max_wait=300, check_delay=3) {
return Promise.reject(e); return Promise.reject(e);
} }
const promise = u.getResolveablePromise(); const promise = getOpenPromise();
const timeout_err = new Error(); const timeout_err = new Error();
function checker () { function checker () {

View File

@ -1,8 +1,6 @@
import BootstrapModal from './base.js'; import BootstrapModal from './base.js';
import tpl_prompt from "./templates/prompt.js"; import tpl_prompt from "./templates/prompt.js";
import { converse } from "@converse/headless/core"; import { getOpenPromise } from '@converse/openpromise';
const u = converse.env.utils;
const Confirm = BootstrapModal.extend({ const Confirm = BootstrapModal.extend({
@ -12,7 +10,7 @@ const Confirm = BootstrapModal.extend({
}, },
initialize () { initialize () {
this.confirmation = u.getResolveablePromise(); this.confirmation = getOpenPromise();
BootstrapModal.prototype.initialize.apply(this, arguments); BootstrapModal.prototype.initialize.apply(this, arguments);
this.listenTo(this.model, 'change', this.render) this.listenTo(this.model, 'change', this.render)
this.el.addEventListener('closed.bs.modal', () => this.confirmation.reject(), false); this.el.addEventListener('closed.bs.modal', () => this.confirmation.reject(), false);