2
0
Эх сурвалжийг харах

Use `@converse/openpromise`

JC Brand 4 жил өмнө
parent
commit
3d58b67517

+ 1 - 1
spec/mock.js

@@ -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;

+ 3 - 2
src/headless/core.js

@@ -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;
             });

+ 2 - 1
src/headless/plugins/bookmarks/collection.js

@@ -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(),

+ 2 - 1
src/headless/plugins/chat/message.js

@@ -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')));

+ 3 - 5
src/headless/plugins/chat/model-with-contact.js

@@ -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) {

+ 4 - 3
src/headless/plugins/chat/model.js

@@ -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();
         }
     },
 

+ 4 - 3
src/headless/plugins/disco/api.js

@@ -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 {

+ 3 - 2
src/headless/plugins/disco/entity.js

@@ -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')}`;

+ 2 - 1
src/headless/plugins/emoji/index.js

@@ -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()
 };
 
 

+ 3 - 2
src/headless/plugins/muc/muc.js

@@ -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'));

+ 4 - 3
src/headless/plugins/roster/contact.js

@@ -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();

+ 4 - 4
src/headless/plugins/smacks.js

@@ -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');
 

+ 2 - 2
src/headless/shared/_converse.js

@@ -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: {

+ 2 - 2
src/headless/shared/connection.js

@@ -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;
     }
 }

+ 2 - 2
src/headless/shared/utils.js

@@ -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 {

+ 4 - 33
src/headless/utils/core.js

@@ -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 () {

+ 2 - 4
src/modals/confirm.js

@@ -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);