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