diff --git a/dev.html b/dev.html index 44f67732e..86de11adf 100644 --- a/dev.html +++ b/dev.html @@ -33,8 +33,8 @@ notify_all_room_messages: [ 'discuss@conference.conversejs.org' ], - bosh_service_url: 'http://chat.example.org:5280/http-bind/', - // bosh_service_url: 'https://conversejs.org/http-bind/', // Please use this connection manager only for testing purposes + // bosh_service_url: 'http://chat.example.org:5280/http-bind/', + bosh_service_url: 'https://conversejs.org/http-bind/', // Please use this connection manager only for testing purposes message_archiving: 'always', debug: true }); diff --git a/src/converse-omemo.js b/src/converse-omemo.js index 1c58fd935..2d3f0094d 100644 --- a/src/converse-omemo.js +++ b/src/converse-omemo.js @@ -23,17 +23,27 @@ const TRUSTED = 1; const UNTRUSTED = -1; - function contactHasOMEMOSupport (_converse, contact_jid) { + function getDevicesForContact (_converse, jid) { return new Promise((resolve, reject) => { - _converse.api.waitUntil('OMEMOInitialized', () => { - resolve(_converse.devicelists.get(contact_jid).devices.length > 0); - }); + _converse.api.waitUntil('OMEMOInitialized').then(() => { + const devicelist = _converse.devicelists.get(jid); + resolve(devicelist ? devicelist.devices : []); + }).catch(_.partial(_converse.log, _, Strophe.LogLevel.ERROR)); + }); + } + + function contactHasOMEMOSupport (_converse, jid) { + return new Promise((resolve, reject) => { + getDevicesForContact(_converse, jid).then((devices) => { + resolve(devices.length > 0) + }).catch(_.partial(_converse.log, _, Strophe.LogLevel.ERROR)); }); } function serverHasOMEMOSupport (_converse) { return new Promise((resolve, reject) => { - _converse.api.disco.getIdentity('pubsub', 'pep').then((identity) => resolve(!_.isNil(identity))) + _converse.api.disco.getIdentity('pubsub', 'pep', _converse.bare_jid) + .then((identity) => resolve(!_.isNil(identity))); }); } @@ -48,14 +58,14 @@ addOMEMOToolbarButton (options) { const { _converse } = this.__super__; - Promise.all([ contactHasOMEMOSupport(_converse, this.model.get('jid')), serverHasOMEMOSupport(_converse) - ]).then((client_support, server_support) => { - debugger; + ]).then((support) => { + const client_supports = support[0], + server_supports = support[1]; - if (client_support && server_support) { + if (client_supports && server_supports) { this.el.querySelector('.chat-toolbar').insertAdjacentHTML( 'beforeend', tpl_toolbar_omemo({'__': __})); @@ -124,12 +134,15 @@ initialize () { this.devices = new _converse.Devices(); + this.devices.browserStorage = new Backbone.BrowserStorage.session( + b64_sha1(`converse.devicelist-${_converse.bare_jid}-${this.get('jid')}`) + ); }, fetchDevices () { return new Promise((resolve, reject) => { this.devices.fetch({ - success (collection) { + 'success': (collection) => { if (collection.length === 0) { this.fetchDevicesFromServer().then(resolve).catch(reject); } else { @@ -168,9 +181,15 @@ /* If our own device is not on the list, add it. * Also, deduplicate devices if necessary. */ - // TODO: - const devicelist = _converse.devicelists.get(_converse.bare_jid); - return Promise.resolve(); + return new Promise((resolve, reject) => { + let own_devicelist = _converse.devicelists.get(_converse.bare_jid); + if (_.isNil(own_devicelist)) { + own_devicelist = _converse.devicelists.create({'jid': _converse.bare_jid}); + } + own_devicelist.fetchDevices().then(resolve).catch(reject); + // TODO: if our own device is not onthe list, add it. + // TODO: deduplicate + }); } function updateDevicesFromStanza (stanza) { @@ -207,7 +226,6 @@ */ publishBundle() .then(() => fetchDeviceLists()) - .then(() => _converse.devicelists.get(_converse.bare_jid).fetchDevices()) .then(() => updateOwnDeviceList()) .then(() => _converse.emit('OMEMOInitialized')) .catch(_.partial(_converse.log, _, Strophe.LogLevel.ERROR));