Use async/await instead of explicit promises

This commit is contained in:
JC Brand 2018-11-09 17:36:31 +01:00
parent d9093c09ee
commit 461ebc0aea
2 changed files with 73 additions and 65 deletions

57
dist/converse.js vendored
View File

@ -65812,21 +65812,21 @@ _converse_headless_converse_core__WEBPACK_IMPORTED_MODULE_0__["default"].plugins
return _converse.getDevicesForContact(jid).then(devices => devices.get(device_id)); return _converse.getDevicesForContact(jid).then(devices => devices.get(device_id));
}; };
_converse.getDevicesForContact = function (jid) { _converse.getDevicesForContact = async function (jid) {
let devicelist; await _converse.api.waitUntil('OMEMOInitialized');
return _converse.api.waitUntil('OMEMOInitialized').then(() => {
devicelist = _converse.devicelists.get(jid) || _converse.devicelists.create({ const devicelist = _converse.devicelists.get(jid) || _converse.devicelists.create({
'jid': jid 'jid': jid
}); });
return devicelist.fetchDevices();
}).then(() => devicelist.devices); await devicelist.fetchDevices();
return devicelist.devices;
}; };
_converse.contactHasOMEMOSupport = function (jid) { _converse.contactHasOMEMOSupport = async function (jid) {
/* Checks whether the contact advertises any OMEMO-compatible devices. */ /* Checks whether the contact advertises any OMEMO-compatible devices. */
return new Promise((resolve, reject) => { const devices = await _converse.getDevicesForContact(jid);
_converse.getDevicesForContact(jid).then(devices => resolve(devices.length > 0)).catch(_.partial(_converse.log, _, Strophe.LogLevel.ERROR)); return devices.length > 0;
});
}; };
function generateDeviceID() { function generateDeviceID() {
@ -66192,22 +66192,23 @@ _converse_headless_converse_core__WEBPACK_IMPORTED_MODULE_0__["default"].plugins
fetchDevices() { fetchDevices() {
if (_.isUndefined(this._devices_promise)) { if (_.isUndefined(this._devices_promise)) {
this._devices_promise = new Promise((resolve, reject) => { const options = {
this.devices.fetch({ 'success': c => this.onCachedDevicesFetched(c),
'success': collection => { 'error': e => _converse.log(e, Strophe.LogLevel.ERROR)
if (collection.length === 0) { };
this.fetchDevicesFromServer().then(ids => this.publishCurrentDevice(ids)).finally(resolve); this._devices_promise = this.devices.fetch(options);
} else {
resolve();
}
}
});
});
} }
return this._devices_promise; return this._devices_promise;
}, },
async onCachedDevicesFetched(collection) {
if (collection.length === 0) {
const ids = await this.fetchDevicesFromServer();
this.publishCurrentDevice(ids);
}
},
async publishCurrentDevice(device_ids) { async publishCurrentDevice(device_ids) {
if (this.get('jid') !== _converse.bare_jid) { if (this.get('jid') !== _converse.bare_jid) {
// We only publish for ourselves. // 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({ const stanza = $iq({
'type': 'get', 'type': 'get',
'from': _converse.bare_jid, 'from': _converse.bare_jid,
@ -66241,7 +66242,16 @@ _converse_headless_converse_core__WEBPACK_IMPORTED_MODULE_0__["default"].plugins
}).c('items', { }).c('items', {
'node': Strophe.NS.OMEMO_DEVICELIST 'node': Strophe.NS.OMEMO_DEVICELIST
}); });
return _converse.api.sendIQ(stanza).then(iq => { 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')); const device_ids = _.map(sizzle(`list[xmlns="${Strophe.NS.OMEMO}"] device`, iq), dev => dev.getAttribute('id'));
_.forEach(device_ids, id => this.devices.create({ _.forEach(device_ids, id => this.devices.create({
@ -66250,7 +66260,6 @@ _converse_headless_converse_core__WEBPACK_IMPORTED_MODULE_0__["default"].plugins
})); }));
return device_ids; return device_ids;
});
}, },
publishDevices() { publishDevices() {

View File

@ -497,22 +497,17 @@ converse.plugins.add('converse-omemo', {
return _converse.getDevicesForContact(jid).then(devices => devices.get(device_id)); return _converse.getDevicesForContact(jid).then(devices => devices.get(device_id));
} }
_converse.getDevicesForContact = function (jid) { _converse.getDevicesForContact = async function (jid) {
let devicelist; await _converse.api.waitUntil('OMEMOInitialized');
return _converse.api.waitUntil('OMEMOInitialized') const devicelist = _converse.devicelists.get(jid) || _converse.devicelists.create({'jid': jid});
.then(() => { await devicelist.fetchDevices();
devicelist = _converse.devicelists.get(jid) || _converse.devicelists.create({'jid': jid}); return devicelist.devices;
return devicelist.fetchDevices();
}).then(() => devicelist.devices);
} }
_converse.contactHasOMEMOSupport = function (jid) { _converse.contactHasOMEMOSupport = async function (jid) {
/* Checks whether the contact advertises any OMEMO-compatible devices. */ /* Checks whether the contact advertises any OMEMO-compatible devices. */
return new Promise((resolve, reject) => { const devices = await _converse.getDevicesForContact(jid);
_converse.getDevicesForContact(jid) return devices.length > 0;
.then((devices) => resolve(devices.length > 0))
.catch(_.partial(_converse.log, _, Strophe.LogLevel.ERROR));
});
} }
@ -845,23 +840,22 @@ converse.plugins.add('converse-omemo', {
fetchDevices () { fetchDevices () {
if (_.isUndefined(this._devices_promise)) { if (_.isUndefined(this._devices_promise)) {
this._devices_promise = new Promise((resolve, reject) => { const options = {
this.devices.fetch({ 'success': c => this.onCachedDevicesFetched(c),
'success': (collection) => { 'error': e => _converse.log(e, Strophe.LogLevel.ERROR)
if (collection.length === 0) {
this.fetchDevicesFromServer()
.then(ids => this.publishCurrentDevice(ids))
.finally(resolve)
} else {
resolve();
} }
} this._devices_promise = this.devices.fetch(options);
});
});
} }
return this._devices_promise; return this._devices_promise;
}, },
async onCachedDevicesFetched (collection) {
if (collection.length === 0) {
const ids = await this.fetchDevicesFromServer()
this.publishCurrentDevice(ids);
}
},
async publishCurrentDevice (device_ids) { async publishCurrentDevice (device_ids) {
if (this.get('jid') !== _converse.bare_jid) { if (this.get('jid') !== _converse.bare_jid) {
// We only publish for ourselves. // We only publish for ourselves.
@ -879,19 +873,24 @@ converse.plugins.add('converse-omemo', {
} }
}, },
fetchDevicesFromServer () { async fetchDevicesFromServer () {
const stanza = $iq({ const stanza = $iq({
'type': 'get', 'type': 'get',
'from': _converse.bare_jid, 'from': _converse.bare_jid,
'to': this.get('jid') 'to': this.get('jid')
}).c('pubsub', {'xmlns': Strophe.NS.PUBSUB}) }).c('pubsub', {'xmlns': Strophe.NS.PUBSUB})
.c('items', {'node': Strophe.NS.OMEMO_DEVICELIST}); .c('items', {'node': Strophe.NS.OMEMO_DEVICELIST});
return _converse.api.sendIQ(stanza)
.then(iq => { 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')); 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')})); _.forEach(device_ids, id => this.devices.create({'id': id, 'jid': this.get('jid')}));
return device_ids; return device_ids;
});
}, },
publishDevices () { publishDevices () {