From 461ebc0aea5302d99937e047985a7da336e30bbd Mon Sep 17 00:00:00 2001 From: JC Brand Date: Fri, 9 Nov 2018 17:36:31 +0100 Subject: [PATCH] Use async/await instead of explicit promises --- dist/converse.js | 73 ++++++++++++++++++++++++------------------- src/converse-omemo.js | 65 +++++++++++++++++++------------------- 2 files changed, 73 insertions(+), 65 deletions(-) diff --git a/dist/converse.js b/dist/converse.js index 78700f58c..704425d9d 100644 --- a/dist/converse.js +++ b/dist/converse.js @@ -65812,21 +65812,21 @@ _converse_headless_converse_core__WEBPACK_IMPORTED_MODULE_0__["default"].plugins return _converse.getDevicesForContact(jid).then(devices => devices.get(device_id)); }; - _converse.getDevicesForContact = function (jid) { - let devicelist; - return _converse.api.waitUntil('OMEMOInitialized').then(() => { - devicelist = _converse.devicelists.get(jid) || _converse.devicelists.create({ - 'jid': jid - }); - return devicelist.fetchDevices(); - }).then(() => devicelist.devices); + _converse.getDevicesForContact = async function (jid) { + await _converse.api.waitUntil('OMEMOInitialized'); + + const devicelist = _converse.devicelists.get(jid) || _converse.devicelists.create({ + 'jid': jid + }); + + await devicelist.fetchDevices(); + return devicelist.devices; }; - _converse.contactHasOMEMOSupport = function (jid) { + _converse.contactHasOMEMOSupport = async function (jid) { /* Checks whether the contact advertises any OMEMO-compatible devices. */ - return new Promise((resolve, reject) => { - _converse.getDevicesForContact(jid).then(devices => resolve(devices.length > 0)).catch(_.partial(_converse.log, _, Strophe.LogLevel.ERROR)); - }); + const devices = await _converse.getDevicesForContact(jid); + return devices.length > 0; }; function generateDeviceID() { @@ -66192,22 +66192,23 @@ _converse_headless_converse_core__WEBPACK_IMPORTED_MODULE_0__["default"].plugins fetchDevices() { if (_.isUndefined(this._devices_promise)) { - this._devices_promise = new Promise((resolve, reject) => { - this.devices.fetch({ - 'success': collection => { - if (collection.length === 0) { - this.fetchDevicesFromServer().then(ids => this.publishCurrentDevice(ids)).finally(resolve); - } else { - resolve(); - } - } - }); - }); + const options = { + 'success': c => this.onCachedDevicesFetched(c), + 'error': e => _converse.log(e, Strophe.LogLevel.ERROR) + }; + this._devices_promise = this.devices.fetch(options); } return this._devices_promise; }, + async onCachedDevicesFetched(collection) { + if (collection.length === 0) { + const ids = await this.fetchDevicesFromServer(); + this.publishCurrentDevice(ids); + } + }, + async publishCurrentDevice(device_ids) { if (this.get('jid') !== _converse.bare_jid) { // We only publish for ourselves. @@ -66231,7 +66232,7 @@ _converse_headless_converse_core__WEBPACK_IMPORTED_MODULE_0__["default"].plugins } }, - fetchDevicesFromServer() { + async fetchDevicesFromServer() { const stanza = $iq({ 'type': 'get', 'from': _converse.bare_jid, @@ -66241,16 +66242,24 @@ _converse_headless_converse_core__WEBPACK_IMPORTED_MODULE_0__["default"].plugins }).c('items', { 'node': Strophe.NS.OMEMO_DEVICELIST }); - return _converse.api.sendIQ(stanza).then(iq => { - const device_ids = _.map(sizzle(`list[xmlns="${Strophe.NS.OMEMO}"] device`, iq), dev => dev.getAttribute('id')); + let iq; - _.forEach(device_ids, id => this.devices.create({ - 'id': id, - 'jid': this.get('jid') - })); + try { + iq = await _converse.api.sendIQ(stanza); + } catch (e) { + _converse.log(e, Strophe.LogLevel.ERROR); - return device_ids; - }); + return []; + } + + const device_ids = _.map(sizzle(`list[xmlns="${Strophe.NS.OMEMO}"] device`, iq), dev => dev.getAttribute('id')); + + _.forEach(device_ids, id => this.devices.create({ + 'id': id, + 'jid': this.get('jid') + })); + + return device_ids; }, publishDevices() { diff --git a/src/converse-omemo.js b/src/converse-omemo.js index c8d25476c..d21265813 100644 --- a/src/converse-omemo.js +++ b/src/converse-omemo.js @@ -497,22 +497,17 @@ converse.plugins.add('converse-omemo', { return _converse.getDevicesForContact(jid).then(devices => devices.get(device_id)); } - _converse.getDevicesForContact = function (jid) { - let devicelist; - return _converse.api.waitUntil('OMEMOInitialized') - .then(() => { - devicelist = _converse.devicelists.get(jid) || _converse.devicelists.create({'jid': jid}); - return devicelist.fetchDevices(); - }).then(() => devicelist.devices); + _converse.getDevicesForContact = async function (jid) { + await _converse.api.waitUntil('OMEMOInitialized'); + const devicelist = _converse.devicelists.get(jid) || _converse.devicelists.create({'jid': jid}); + await devicelist.fetchDevices(); + return devicelist.devices; } - _converse.contactHasOMEMOSupport = function (jid) { + _converse.contactHasOMEMOSupport = async function (jid) { /* Checks whether the contact advertises any OMEMO-compatible devices. */ - return new Promise((resolve, reject) => { - _converse.getDevicesForContact(jid) - .then((devices) => resolve(devices.length > 0)) - .catch(_.partial(_converse.log, _, Strophe.LogLevel.ERROR)); - }); + const devices = await _converse.getDevicesForContact(jid); + return devices.length > 0; } @@ -845,23 +840,22 @@ converse.plugins.add('converse-omemo', { fetchDevices () { if (_.isUndefined(this._devices_promise)) { - this._devices_promise = new Promise((resolve, reject) => { - this.devices.fetch({ - 'success': (collection) => { - if (collection.length === 0) { - this.fetchDevicesFromServer() - .then(ids => this.publishCurrentDevice(ids)) - .finally(resolve) - } else { - resolve(); - } - } - }); - }); + const options = { + 'success': c => this.onCachedDevicesFetched(c), + 'error': e => _converse.log(e, Strophe.LogLevel.ERROR) + } + this._devices_promise = this.devices.fetch(options); } return this._devices_promise; }, + async onCachedDevicesFetched (collection) { + if (collection.length === 0) { + const ids = await this.fetchDevicesFromServer() + this.publishCurrentDevice(ids); + } + }, + async publishCurrentDevice (device_ids) { if (this.get('jid') !== _converse.bare_jid) { // We only publish for ourselves. @@ -879,19 +873,24 @@ converse.plugins.add('converse-omemo', { } }, - fetchDevicesFromServer () { + async fetchDevicesFromServer () { const stanza = $iq({ 'type': 'get', 'from': _converse.bare_jid, 'to': this.get('jid') }).c('pubsub', {'xmlns': Strophe.NS.PUBSUB}) .c('items', {'node': Strophe.NS.OMEMO_DEVICELIST}); - return _converse.api.sendIQ(stanza) - .then(iq => { - const device_ids = _.map(sizzle(`list[xmlns="${Strophe.NS.OMEMO}"] device`, iq), dev => dev.getAttribute('id')); - _.forEach(device_ids, id => this.devices.create({'id': id, 'jid': this.get('jid')})); - return device_ids; - }); + + let iq; + try { + iq = await _converse.api.sendIQ(stanza); + } catch (e) { + _converse.log(e, Strophe.LogLevel.ERROR); + return []; + } + const device_ids = _.map(sizzle(`list[xmlns="${Strophe.NS.OMEMO}"] device`, iq), dev => dev.getAttribute('id')); + _.forEach(device_ids, id => this.devices.create({'id': id, 'jid': this.get('jid')})); + return device_ids; }, publishDevices () {