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 () {
const promise = u.getResolveablePromise();
const promise = u.getOpenPromise();
const db_request = window.indexedDB.open("converse-test-persistent");
db_request.onsuccess = function () {
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 { TimeoutError } from '@converse/headless/shared/errors';
import { createStore, replacePromise } from '@converse/headless/shared/utils';
import { getOpenPromise } from '@converse/openpromise';
import { html } from 'lit-element';
import { sprintf } from 'sprintf-js';
@ -355,7 +356,7 @@ export const api = _converse.api = {
*/
await api.trigger('beforeLogout', {'synchronous': true});
const promise = u.getResolveablePromise();
const promise = getOpenPromise();
const complete = () => {
// Recreate all the promises
Object.keys(_converse.promises).forEach(replacePromise);
@ -563,7 +564,7 @@ export const api = _converse.api = {
add (promises, replace=true) {
promises = Array.isArray(promises) ? promises : [promises];
promises.forEach(name => {
const promise = u.getResolveablePromise();
const promise = getOpenPromise();
promise.replace = replace;
_converse.promises[name] = promise;
});

View File

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

View File

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

View File

@ -6,6 +6,7 @@ import log from '@converse/headless/log';
import pick from "lodash/pick";
import { Model } from '@converse/skeletor/src/model.js';
import { _converse, api, converse } from "../../core.js";
import { getOpenPromise } from '@converse/openpromise';
import { initStorage } from '@converse/headless/shared/utils.js';
import { parseMessage } from './parsers.js';
import { sendMarker } from '@converse/headless/shared/actions';
@ -39,7 +40,7 @@ const ChatBox = ModelWithContact.extend({
},
async initialize () {
this.initialized = u.getResolveablePromise();
this.initialized = getOpenPromise();
ModelWithContact.prototype.initialize.apply(this, arguments);
const jid = this.get('jid');
@ -84,7 +85,7 @@ const ChatBox = ModelWithContact.extend({
initMessages () {
this.messages = this.getMessagesCollection();
this.messages.fetched = u.getResolveablePromise();
this.messages.fetched = getOpenPromise();
this.messages.fetched.then(() => {
/**
* Triggered whenever a `_converse.ChatBox` instance has fetched its messages from
@ -244,7 +245,7 @@ const ChatBox = ModelWithContact.extend({
} finally {
delete this.msg_chain;
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 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 {
@ -310,7 +311,7 @@ export default {
entity.fields.reset();
entity.identities.reset();
if (!entity.waitUntilFeaturesDiscovered.isPending) {
entity.waitUntilFeaturesDiscovered = utils.getResolveablePromise()
entity.waitUntilFeaturesDiscovered = getOpenPromise()
}
entity.queryInfo();
} else {

View File

@ -3,8 +3,9 @@ import sizzle from "sizzle";
import { Collection } from "@converse/skeletor/src/collection";
import { Model } from '@converse/skeletor/src/model.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
@ -19,7 +20,7 @@ const DiscoEntity = Model.extend({
idAttribute: 'jid',
initialize (attrs, options) {
this.waitUntilFeaturesDiscovered = utils.getResolveablePromise();
this.waitUntilFeaturesDiscovered = getOpenPromise();
this.dataforms = new Collection();
let id = `converse.dataforms-${this.get('jid')}`;

View File

@ -6,13 +6,14 @@
import { ASCII_REPLACE_REGEX, CODEPOINTS_REGEX } from './regexes.js';
import { Model } from '@converse/skeletor/src/model.js';
import { _converse, api, converse } from "../../core.js";
import { getOpenPromise } from '@converse/openpromise';
import { html } from 'lit-html';
const u = converse.env.utils;
converse.emojis = {
'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 { _converse, api, converse } from '../../core.js';
import { computeAffiliationsDelta, setAffiliations, getAffiliationList } from './affiliations/utils.js';
import { getOpenPromise } from '@converse/openpromise';
import { initStorage } from '@converse/headless/shared/utils.js';
import { isArchived } from '@converse/headless/shared/parsers';
import { parseMUCMessage, parseMUCPresence } from './parsers.js';
@ -84,7 +85,7 @@ const ChatRoomMixin = {
},
async initialize () {
this.initialized = u.getResolveablePromise();
this.initialized = getOpenPromise();
this.debouncedRejoin = debounce(this.rejoin, 250);
this.set('box_id', `box-${this.get('jid')}`);
this.initNotifications();
@ -674,7 +675,7 @@ const ChatRoomMixin = {
id = this.getUniqueId('sendIQ');
el.setAttribute('id', id);
}
const promise = u.getResolveablePromise();
const promise = getOpenPromise();
const timeoutHandler = _converse.connection.addTimedHandler(_converse.STANZA_TIMEOUT, () => {
_converse.connection.deleteHandler(handler);
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 { _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
@ -17,7 +18,7 @@ const RosterContact = Model.extend({
},
async initialize (attributes) {
this.initialized = u.getResolveablePromise();
this.initialized = getOpenPromise();
this.setPresence();
const { jid } = attributes;
const bare_jid = Strophe.getBareJidFromJid(jid).toLowerCase();

View File

@ -1,11 +1,11 @@
/**
* @module converse-smacks
* @copyright The Converse.js contributors
* @license Mozilla Public License (MPLv2)
* @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 { _converse, api, converse } from "../core.js";
import { getOpenPromise } from '@converse/openpromise';
const { Strophe } = converse.env;
const u = converse.env.utils;
@ -158,7 +158,7 @@ function onResumedStanza (el) {
}
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(onFailedStanza(el)), Strophe.NS.SM, 'failed');
@ -175,7 +175,7 @@ async function sendEnableStanza () {
return;
}
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(onFailedStanza(el)), Strophe.NS.SM, 'failed');

View File

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

View File

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

View File

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

View File

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

View File

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