diff --git a/spec/mam.js b/spec/mam.js
index c695448da..c049de6c5 100644
--- a/spec/mam.js
+++ b/spec/mam.js
@@ -2,12 +2,12 @@
define(["jasmine", "mock", "test-utils"], factory);
} (this, function (jasmine, mock, test_utils) {
"use strict";
- var _ = converse.env._;
- var Backbone = converse.env.Backbone;
- var Strophe = converse.env.Strophe;
- var $iq = converse.env.$iq;
- var $msg = converse.env.$msg;
- var moment = converse.env.moment;
+ const _ = converse.env._;
+ const Backbone = converse.env.Backbone;
+ const Strophe = converse.env.Strophe;
+ const $iq = converse.env.$iq;
+ const $msg = converse.env.$msg;
+ const moment = converse.env.moment;
// See: https://xmpp.org/rfcs/rfc3921.html
describe("Message Archive Management", function () {
@@ -18,48 +18,46 @@
it("aren't shown as duplicates",
mock.initConverseWithPromises(
null, ['discoInitialized'], {},
- function (done, _converse) {
+ async function (done, _converse) {
- let view, stanza;
+ await test_utils.openAndEnterChatRoom(_converse, 'trek-radio', 'conference.lightwitch.org', 'jcbrand');
+ const view = _converse.chatboxviews.get('trek-radio@conference.lightwitch.org');
+ let stanza = Strophe.xmlHtmlNode(
+ `
+ negan
+
+ `
+ ).firstElementChild;
+ _converse.connection._dataRecv(test_utils.createRequest(stanza));
+ await test_utils.waitUntil(() => view.content.querySelectorAll('.chat-msg').length);
+ // XXX: we wait here until the first message appears before
+ // sending the duplicate. If we don't do that, then the
+ // duplicate appears before the promise for `createMessage`
+ // has been resolved, which means that the `isDuplicate`
+ // check fails because the first message doesn't exist yet.
+ //
+ // Not sure whether such a race-condition might pose a problem
+ // in "real-world" situations.
+ stanza = Strophe.xmlHtmlNode(
+ `
+
+
+
+
+ negan
+
+
+
+ `).firstElementChild;
+
+ spyOn(view.model, 'isDuplicate').and.callThrough();
+ view.model.onMessage(stanza);
+ await test_utils.waitUntil(() => view.model.isDuplicate.calls.count());
+ expect(view.content.querySelectorAll('.chat-msg').length).toBe(1);
+ done();
+ }));
- test_utils.openAndEnterChatRoom(_converse, 'trek-radio', 'conference.lightwitch.org', 'jcbrand')
- .then(() => {
- view = _converse.chatboxviews.get('trek-radio@conference.lightwitch.org');
- stanza = Strophe.xmlHtmlNode(
- `
- negan
-
- `).firstElementChild;
- _converse.connection._dataRecv(test_utils.createRequest(stanza));
- return test_utils.waitUntil(() => view.content.querySelectorAll('.chat-msg').length)
- }).then(() => {
- // XXX: we wait here until the first message appears before
- // sending the duplicate. If we don't do that, then the
- // duplicate appears before the promise for `createMessage`
- // has been resolved, which means that the `isDuplicate`
- // check fails because the first message doesn't exist yet.
- //
- // Not sure whether such a race-condition might pose a problem
- // in "real-world" situations.
- stanza = Strophe.xmlHtmlNode(
- `
-
-
-
- negan
-
-
-
- `).firstElementChild;
- spyOn(view.model, 'isDuplicate').and.callThrough();
- view.model.onMessage(stanza);
- return test_utils.waitUntil(() => view.model.isDuplicate.calls.count());
- }).then(() => {
- expect(view.content.querySelectorAll('.chat-msg').length).toBe(1);
- done();
- }).catch(_.partial(_converse.log, _, Strophe.LogLevel.FATAL));
- }))
});
describe("The archive.query API", function () {
@@ -86,78 +84,76 @@
}));
it("can be used to query for all messages to/from a particular JID",
- mock.initConverseWithPromises(
- null, [], {},
- function (done, _converse) {
+ mock.initConverseWithPromises(
+ null, [], {},
+ async function (done, _converse) {
- _converse.api.disco.entities.get(_converse.domain).then(function (entity) {
- if (!entity.features.findWhere({'var': Strophe.NS.MAM})) {
- _converse.disco_entities.get(_converse.domain).features.create({'var': Strophe.NS.MAM});
- }
- var sent_stanza, IQ_id;
- var sendIQ = _converse.connection.sendIQ;
- spyOn(_converse.connection, 'sendIQ').and.callFake(function (iq, callback, errback) {
- sent_stanza = iq;
- IQ_id = sendIQ.bind(this)(iq, callback, errback);
- });
- _converse.api.archive.query({'with':'juliet@capulet.lit'});
- var queryid = sent_stanza.nodeTree.querySelector('query').getAttribute('queryid');
- expect(sent_stanza.toString()).toBe(
- ``+
- ``+
- ``+
- ``+
- `urn:xmpp:mam:2`+
- ``+
- ``+
- `juliet@capulet.lit`+
- ``+
- ``+
- ``+
- ``);
- done();
+ const entity = await _converse.api.disco.entities.get(_converse.domain);
+ if (!entity.features.findWhere({'var': Strophe.NS.MAM})) {
+ _converse.disco_entities.get(_converse.domain).features.create({'var': Strophe.NS.MAM});
+ }
+ let sent_stanza, IQ_id;
+ const sendIQ = _converse.connection.sendIQ;
+ spyOn(_converse.connection, 'sendIQ').and.callFake(function (iq, callback, errback) {
+ sent_stanza = iq;
+ IQ_id = sendIQ.bind(this)(iq, callback, errback);
});
+ _converse.api.archive.query({'with':'juliet@capulet.lit'});
+ const queryid = sent_stanza.nodeTree.querySelector('query').getAttribute('queryid');
+ expect(sent_stanza.toString()).toBe(
+ ``+
+ ``+
+ ``+
+ ``+
+ `urn:xmpp:mam:2`+
+ ``+
+ ``+
+ `juliet@capulet.lit`+
+ ``+
+ ``+
+ ``+
+ ``);
+ done();
}));
it("can be used to query for archived messages from a chat room",
- mock.initConverseWithPromises(
- null, [], {},
- function (done, _converse) {
+ mock.initConverseWithPromises(
+ null, [], {},
+ async function (done, _converse) {
- _converse.api.disco.entities.get(_converse.domain).then(function (entity) {
- if (!entity.features.findWhere({'var': Strophe.NS.MAM})) {
- _converse.disco_entities.get(_converse.domain).features.create({'var': Strophe.NS.MAM});
- }
+ const entity = await _converse.api.disco.entities.get(_converse.domain);
+ if (!entity.features.findWhere({'var': Strophe.NS.MAM})) {
+ _converse.disco_entities.get(_converse.domain).features.create({'var': Strophe.NS.MAM});
+ }
- var sent_stanza, IQ_id;
- var sendIQ = _converse.connection.sendIQ;
- spyOn(_converse.connection, 'sendIQ').and.callFake(function (iq, callback, errback) {
- sent_stanza = iq;
- IQ_id = sendIQ.bind(this)(iq, callback, errback);
- });
- var callback = jasmine.createSpy('callback');
-
- _converse.api.archive.query({'with': 'coven@chat.shakespeare.lit', 'groupchat': true}, callback);
- var queryid = sent_stanza.nodeTree.querySelector('query').getAttribute('queryid');
-
- expect(sent_stanza.toString()).toBe(
- ``+
- ``+
- ``+
- ``+
- `urn:xmpp:mam:2`+
- ``+
- ``+
- ``+
- ``);
- done();
+ let sent_stanza, IQ_id;
+ const sendIQ = _converse.connection.sendIQ;
+ spyOn(_converse.connection, 'sendIQ').and.callFake(function (iq, callback, errback) {
+ sent_stanza = iq;
+ IQ_id = sendIQ.bind(this)(iq, callback, errback);
});
+ const callback = jasmine.createSpy('callback');
+
+ _converse.api.archive.query({'with': 'coven@chat.shakespeare.lit', 'groupchat': true}, callback);
+ const queryid = sent_stanza.nodeTree.querySelector('query').getAttribute('queryid');
+
+ expect(sent_stanza.toString()).toBe(
+ ``+
+ ``+
+ ``+
+ ``+
+ `urn:xmpp:mam:2`+
+ ``+
+ ``+
+ ``+
+ ``);
+ done();
}));
it("checks whether returned MAM messages from a MUC room are from the right JID",
- mock.initConverseWithPromises(
- null, [], {},
- async function (done, _converse) {
+ mock.initConverseWithPromises(
+ null, [], {},
+ async function (done, _converse) {
const entity = await _converse.api.disco.entities.get(_converse.domain);
if (!entity.features.findWhere({'var': Strophe.NS.MAM})) {
@@ -233,47 +229,46 @@
}));
it("can be used to query for all messages in a certain timespan",
- mock.initConverseWithPromises(
- null, [], {},
- function (done, _converse) {
+ mock.initConverseWithPromises(
+ null, [], {},
+ async function (done, _converse) {
- var sent_stanza, IQ_id;
- var sendIQ = _converse.connection.sendIQ;
+ let sent_stanza, IQ_id;
+ const sendIQ = _converse.connection.sendIQ;
spyOn(_converse.connection, 'sendIQ').and.callFake(function (iq, callback, errback) {
sent_stanza = iq;
IQ_id = sendIQ.bind(this)(iq, callback, errback);
});
- _converse.api.disco.entities.get().then(function (entities) {
- if (!entities.get(_converse.domain).features.findWhere({'var': Strophe.NS.MAM})) {
- _converse.disco_entities.get(_converse.domain).features.create({'var': Strophe.NS.MAM});
- }
- var start = '2010-06-07T00:00:00Z';
- var end = '2010-07-07T13:23:54Z';
- _converse.api.archive.query({
- 'start': start,
- 'end': end
+ const entities = await _converse.api.disco.entities.get();
+ if (!entities.get(_converse.domain).features.findWhere({'var': Strophe.NS.MAM})) {
+ _converse.disco_entities.get(_converse.domain).features.create({'var': Strophe.NS.MAM});
+ }
+ const start = '2010-06-07T00:00:00Z';
+ const end = '2010-07-07T13:23:54Z';
+ _converse.api.archive.query({
+ 'start': start,
+ 'end': end
- });
- var queryid = sent_stanza.nodeTree.querySelector('query').getAttribute('queryid');
- expect(sent_stanza.toString()).toBe(
- ``+
- ``+
- ``+
- ``+
- `urn:xmpp:mam:2`+
- ``+
- ``+
- `${moment(start).format()}`+
- ``+
- ``+
- `${moment(end).format()}`+
- ``+
- ``+
- ``+
- ``
- );
- done();
});
+ const queryid = sent_stanza.nodeTree.querySelector('query').getAttribute('queryid');
+ expect(sent_stanza.toString()).toBe(
+ ``+
+ ``+
+ ``+
+ ``+
+ `urn:xmpp:mam:2`+
+ ``+
+ ``+
+ `${moment(start).format()}`+
+ ``+
+ ``+
+ `${moment(end).format()}`+
+ ``+
+ ``+
+ ``+
+ ``
+ );
+ done();
}));
it("throws a TypeError if an invalid date is provided",
@@ -292,208 +287,202 @@
}));
it("can be used to query for all messages after a certain time",
- mock.initConverseWithPromises(
- null, [], {},
- function (done, _converse) {
+ mock.initConverseWithPromises(
+ null, [], {},
+ async function (done, _converse) {
- _converse.api.disco.entities.get(_converse.domain).then(function (entity) {
- if (!entity.features.findWhere({'var': Strophe.NS.MAM})) {
- _converse.disco_entities.get(_converse.domain).features.create({'var': Strophe.NS.MAM});
- }
- var sent_stanza, IQ_id;
- var sendIQ = _converse.connection.sendIQ;
- spyOn(_converse.connection, 'sendIQ').and.callFake(function (iq, callback, errback) {
- sent_stanza = iq;
- IQ_id = sendIQ.bind(this)(iq, callback, errback);
- });
- if (!_converse.disco_entities.get(_converse.domain).features.findWhere({'var': Strophe.NS.MAM})) {
- _converse.disco_entities.get(_converse.domain).features.create({'var': Strophe.NS.MAM});
- }
- var start = '2010-06-07T00:00:00Z';
- _converse.api.archive.query({'start': start});
- var queryid = sent_stanza.nodeTree.querySelector('query').getAttribute('queryid');
- expect(sent_stanza.toString()).toBe(
- ``+
- ``+
- ``+
+ const entity = await _converse.api.disco.entities.get(_converse.domain);
+ if (!entity.features.findWhere({'var': Strophe.NS.MAM})) {
+ _converse.disco_entities.get(_converse.domain).features.create({'var': Strophe.NS.MAM});
+ }
+ let sent_stanza, IQ_id;
+ const sendIQ = _converse.connection.sendIQ;
+ spyOn(_converse.connection, 'sendIQ').and.callFake(function (iq, callback, errback) {
+ sent_stanza = iq;
+ IQ_id = sendIQ.bind(this)(iq, callback, errback);
+ });
+ if (!_converse.disco_entities.get(_converse.domain).features.findWhere({'var': Strophe.NS.MAM})) {
+ _converse.disco_entities.get(_converse.domain).features.create({'var': Strophe.NS.MAM});
+ }
+ const start = '2010-06-07T00:00:00Z';
+ _converse.api.archive.query({'start': start});
+ const queryid = sent_stanza.nodeTree.querySelector('query').getAttribute('queryid');
+ expect(sent_stanza.toString()).toBe(
+ ``+
+ ``+
+ ``+
+ ``+
+ `urn:xmpp:mam:2`+
+ ``+
+ ``+
+ `${moment(start).format()}`+
+ ``+
+ ``+
+ ``+
+ ``
+ );
+ done();
+ }));
+
+ it("can be used to query for a limited set of results",
+ mock.initConverseWithPromises(
+ null, [], {},
+ async function (done, _converse) {
+
+ const entity = await _converse.api.disco.entities.get(_converse.domain);
+ if (!entity.features.findWhere({'var': Strophe.NS.MAM})) {
+ _converse.disco_entities.get(_converse.domain).features.create({'var': Strophe.NS.MAM});
+ }
+ let sent_stanza, IQ_id;
+ const sendIQ = _converse.connection.sendIQ;
+ spyOn(_converse.connection, 'sendIQ').and.callFake(function (iq, callback, errback) {
+ sent_stanza = iq;
+ IQ_id = sendIQ.bind(this)(iq, callback, errback);
+ });
+ const start = '2010-06-07T00:00:00Z';
+ _converse.api.archive.query({'start': start, 'max':10});
+ const queryid = sent_stanza.nodeTree.querySelector('query').getAttribute('queryid');
+ expect(sent_stanza.toString()).toBe(
+ ``+
+ ``+
+ ``+
``+
`urn:xmpp:mam:2`+
``+
``+
`${moment(start).format()}`+
``+
- ``+
- ``+
- ``
- );
- done();
- });
- }));
-
- it("can be used to query for a limited set of results",
- mock.initConverseWithPromises(
- null, [], {},
- function (done, _converse) {
-
- _converse.api.disco.entities.get(_converse.domain).then(function (entity) {
- if (!entity.features.findWhere({'var': Strophe.NS.MAM})) {
- _converse.disco_entities.get(_converse.domain).features.create({'var': Strophe.NS.MAM});
- }
-
- var sent_stanza, IQ_id;
- var sendIQ = _converse.connection.sendIQ;
- spyOn(_converse.connection, 'sendIQ').and.callFake(function (iq, callback, errback) {
- sent_stanza = iq;
- IQ_id = sendIQ.bind(this)(iq, callback, errback);
- });
- var start = '2010-06-07T00:00:00Z';
- _converse.api.archive.query({'start': start, 'max':10});
- var queryid = sent_stanza.nodeTree.querySelector('query').getAttribute('queryid');
- expect(sent_stanza.toString()).toBe(
- ``+
- ``+
- ``+
- ``+
- `urn:xmpp:mam:2`+
- ``+
- ``+
- `${moment(start).format()}`+
- ``+
- ``+
- ``+
- `10`+
- ``+
- ``+
- ``
- );
- done();
- });
+ ``+
+ ``+
+ `10`+
+ ``+
+ ``+
+ ``
+ );
+ done();
}));
it("can be used to page through results",
- mock.initConverseWithPromises(
- null, [], {},
- function (done, _converse) {
+ mock.initConverseWithPromises(
+ null, [], {},
+ async function (done, _converse) {
- _converse.api.disco.entities.get(_converse.domain).then(function (entity) {
- if (!entity.features.findWhere({'var': Strophe.NS.MAM})) {
- _converse.disco_entities.get(_converse.domain).features.create({'var': Strophe.NS.MAM});
- }
- var sent_stanza, IQ_id;
- var sendIQ = _converse.connection.sendIQ;
- spyOn(_converse.connection, 'sendIQ').and.callFake(function (iq, callback, errback) {
- sent_stanza = iq;
- IQ_id = sendIQ.bind(this)(iq, callback, errback);
- });
- var start = '2010-06-07T00:00:00Z';
- _converse.api.archive.query({
- 'start': start,
- 'after': '09af3-cc343-b409f',
- 'max':10
- });
- var queryid = sent_stanza.nodeTree.querySelector('query').getAttribute('queryid');
- expect(sent_stanza.toString()).toBe(
- ``+
- ``+
- ``+
- ``+
- `urn:xmpp:mam:2`+
- ``+
- ``+
- `${moment(start).format()}`+
- ``+
- ``+
- ``+
- `10`+
- `09af3-cc343-b409f`+
- ``+
- ``+
- ``);
- done();
+ const entity = await _converse.api.disco.entities.get(_converse.domain);
+ if (!entity.features.findWhere({'var': Strophe.NS.MAM})) {
+ _converse.disco_entities.get(_converse.domain).features.create({'var': Strophe.NS.MAM});
+ }
+ let sent_stanza, IQ_id;
+ const sendIQ = _converse.connection.sendIQ;
+ spyOn(_converse.connection, 'sendIQ').and.callFake(function (iq, callback, errback) {
+ sent_stanza = iq;
+ IQ_id = sendIQ.bind(this)(iq, callback, errback);
});
+ const start = '2010-06-07T00:00:00Z';
+ _converse.api.archive.query({
+ 'start': start,
+ 'after': '09af3-cc343-b409f',
+ 'max':10
+ });
+ const queryid = sent_stanza.nodeTree.querySelector('query').getAttribute('queryid');
+ expect(sent_stanza.toString()).toBe(
+ ``+
+ ``+
+ ``+
+ ``+
+ `urn:xmpp:mam:2`+
+ ``+
+ ``+
+ `${moment(start).format()}`+
+ ``+
+ ``+
+ ``+
+ `10`+
+ `09af3-cc343-b409f`+
+ ``+
+ ``+
+ ``);
+ done();
}));
it("accepts \"before\" with an empty string as value to reverse the order",
- mock.initConverseWithPromises(
- null, [], {},
- function (done, _converse) {
+ mock.initConverseWithPromises(
+ null, [], {},
+ async function (done, _converse) {
- _converse.api.disco.entities.get(_converse.domain).then(function (entity) {
- if (!entity.features.findWhere({'var': Strophe.NS.MAM})) {
- _converse.disco_entities.get(_converse.domain).features.create({'var': Strophe.NS.MAM});
- }
- var sent_stanza, IQ_id;
- var sendIQ = _converse.connection.sendIQ;
- spyOn(_converse.connection, 'sendIQ').and.callFake(function (iq, callback, errback) {
- sent_stanza = iq;
- IQ_id = sendIQ.bind(this)(iq, callback, errback);
- });
- _converse.api.archive.query({'before': '', 'max':10});
- var queryid = sent_stanza.nodeTree.querySelector('query').getAttribute('queryid');
- expect(sent_stanza.toString()).toBe(
- ``+
- ``+
- ``+
- ``+
- `urn:xmpp:mam:2`+
- ``+
- ``+
- ``+
- `10`+
- ``+
- ``+
- ``+
- ``);
- done();
+ const entity = await _converse.api.disco.entities.get(_converse.domain);
+ if (!entity.features.findWhere({'var': Strophe.NS.MAM})) {
+ _converse.disco_entities.get(_converse.domain).features.create({'var': Strophe.NS.MAM});
+ }
+ let sent_stanza, IQ_id;
+ const sendIQ = _converse.connection.sendIQ;
+ spyOn(_converse.connection, 'sendIQ').and.callFake(function (iq, callback, errback) {
+ sent_stanza = iq;
+ IQ_id = sendIQ.bind(this)(iq, callback, errback);
});
+ _converse.api.archive.query({'before': '', 'max':10});
+ const queryid = sent_stanza.nodeTree.querySelector('query').getAttribute('queryid');
+ expect(sent_stanza.toString()).toBe(
+ ``+
+ ``+
+ ``+
+ ``+
+ `urn:xmpp:mam:2`+
+ ``+
+ ``+
+ ``+
+ `10`+
+ ``+
+ ``+
+ ``+
+ ``);
+ done();
}));
it("accepts a Strophe.RSM object for the query options",
- mock.initConverseWithPromises(
- null, [], {},
- function (done, _converse) {
+ mock.initConverseWithPromises(
+ null, [], {},
+ async function (done, _converse) {
- _converse.api.disco.entities.get(_converse.domain).then(function (entity) {
- if (!entity.features.findWhere({'var': Strophe.NS.MAM})) {
- _converse.disco_entities.get(_converse.domain).features.create({'var': Strophe.NS.MAM});
- }
- var sent_stanza, IQ_id;
- var sendIQ = _converse.connection.sendIQ;
- spyOn(_converse.connection, 'sendIQ').and.callFake(function (iq, callback, errback) {
- sent_stanza = iq;
- IQ_id = sendIQ.bind(this)(iq, callback, errback);
- });
- // Normally the user wouldn't manually make a Strophe.RSM object
- // and pass it in. However, in the callback method an RSM object is
- // returned which can be reused for easy paging. This test is
- // more for that usecase.
- var rsm = new Strophe.RSM({'max': '10'});
- rsm['with'] = 'romeo@montague.lit'; // eslint-disable-line dot-notation
- rsm.start = '2010-06-07T00:00:00Z';
- _converse.api.archive.query(rsm);
-
- var queryid = sent_stanza.nodeTree.querySelector('query').getAttribute('queryid');
- expect(sent_stanza.toString()).toBe(
- ``+
- ``+
- ``+
- ``+
- `urn:xmpp:mam:2`+
- ``+
- ``+
- `romeo@montague.lit`+
- ``+
- ``+
- `${moment(rsm.start).format()}`+
- ``+
- ``+
- ``+
- `10`+
- ``+
- ``+
- ``);
- done();
+ const entity = await _converse.api.disco.entities.get(_converse.domain);
+ if (!entity.features.findWhere({'var': Strophe.NS.MAM})) {
+ _converse.disco_entities.get(_converse.domain).features.create({'var': Strophe.NS.MAM});
+ }
+ let sent_stanza, IQ_id;
+ const sendIQ = _converse.connection.sendIQ;
+ spyOn(_converse.connection, 'sendIQ').and.callFake(function (iq, callback, errback) {
+ sent_stanza = iq;
+ IQ_id = sendIQ.bind(this)(iq, callback, errback);
});
+ // Normally the user wouldn't manually make a Strophe.RSM object
+ // and pass it in. However, in the callback method an RSM object is
+ // returned which can be reused for easy paging. This test is
+ // more for that usecase.
+ const rsm = new Strophe.RSM({'max': '10'});
+ rsm['with'] = 'romeo@montague.lit'; // eslint-disable-line dot-notation
+ rsm.start = '2010-06-07T00:00:00Z';
+ _converse.api.archive.query(rsm);
+
+ const queryid = sent_stanza.nodeTree.querySelector('query').getAttribute('queryid');
+ expect(sent_stanza.toString()).toBe(
+ ``+
+ ``+
+ ``+
+ ``+
+ `urn:xmpp:mam:2`+
+ ``+
+ ``+
+ `romeo@montague.lit`+
+ ``+
+ ``+
+ `${moment(rsm.start).format()}`+
+ ``+
+ ``+
+ ``+
+ `10`+
+ ``+
+ ``+
+ ``);
+ done();
}));
it("accepts a callback function, which it passes the messages and a Strophe.RSM object",
diff --git a/src/converse-omemo.js b/src/converse-omemo.js
index 2127db94f..bf010b711 100644
--- a/src/converse-omemo.js
+++ b/src/converse-omemo.js
@@ -331,10 +331,10 @@ converse.plugins.add('converse-omemo', {
}
},
- getMessageAttributesFromStanza (stanza, original_stanza) {
+ async getMessageAttributesFromStanza (stanza, original_stanza) {
const { _converse } = this.__super__,
encrypted = sizzle(`encrypted[xmlns="${Strophe.NS.OMEMO}"]`, original_stanza).pop(),
- attrs = this.__super__.getMessageAttributesFromStanza.apply(this, arguments);
+ attrs = await this.__super__.getMessageAttributesFromStanza.apply(this, arguments);
if (!encrypted || !_converse.config.get('trusted')) {
return attrs;
diff --git a/src/headless/converse-chatboxes.js b/src/headless/converse-chatboxes.js
index 2d0889a56..b6b712fd4 100644
--- a/src/headless/converse-chatboxes.js
+++ b/src/headless/converse-chatboxes.js
@@ -557,31 +557,22 @@ converse.plugins.add('converse-chatboxes', {
return attrs;
},
- createMessage (message, original_stanza) {
+ async createMessage (message, original_stanza) {
/* Create a Backbone.Message object inside this chat box
* based on the identified message stanza.
*/
- const that = this;
- function _create (attrs) {
- const is_csn = u.isOnlyChatStateNotification(attrs);
- if (is_csn && (attrs.is_delayed ||
- (attrs.type === 'groupchat' && Strophe.getResourceFromJid(attrs.from) == that.get('nick')))) {
- // XXX: MUC leakage
- // No need showing delayed or our own CSN messages
- return;
- } else if (!is_csn && !attrs.file && !attrs.plaintext && !attrs.message && !attrs.oob_url && attrs.type !== 'error') {
- // TODO: handle messages (currently being done by ChatRoom)
- return;
- } else {
- return that.messages.create(attrs);
- }
- }
- const result = this.getMessageAttributesFromStanza(message, original_stanza)
- if (typeof result.then === "function") {
- return new Promise((resolve, reject) => result.then(attrs => resolve(_create(attrs))));
+ const attrs = await this.getMessageAttributesFromStanza(message, original_stanza),
+ is_csn = u.isOnlyChatStateNotification(attrs);
+
+ if (is_csn && (attrs.is_delayed || (attrs.type === 'groupchat' && Strophe.getResourceFromJid(attrs.from) == this.get('nick')))) {
+ // XXX: MUC leakage
+ // No need showing delayed or our own CSN messages
+ return;
+ } else if (!is_csn && !attrs.file && !attrs.plaintext && !attrs.message && !attrs.oob_url && attrs.type !== 'error') {
+ // TODO: handle messages (currently being done by ChatRoom)
+ return;
} else {
- const message = _create(result)
- return Promise.resolve(message);
+ return this.messages.create(attrs);
}
},
diff --git a/src/headless/converse-mam.js b/src/headless/converse-mam.js
index b92fd82d0..319a68f4a 100644
--- a/src/headless/converse-mam.js
+++ b/src/headless/converse-mam.js
@@ -133,20 +133,10 @@ converse.plugins.add('converse-mam', {
// New functions which don't exist yet can also be added.
ChatBox: {
- getMessageAttributesFromStanza (message, original_stanza) {
- function _process (attrs) {
- const archive_id = getMessageArchiveID(original_stanza);
- if (archive_id) {
- attrs.archive_id = archive_id;
- }
- return attrs;
- }
- const result = this.__super__.getMessageAttributesFromStanza.apply(this, arguments)
- if (result instanceof Promise) {
- return new Promise((resolve, reject) => result.then((attrs) => resolve(_process(attrs))).catch(reject));
- } else {
- return _process(result);
- }
+ async getMessageAttributesFromStanza (message, original_stanza) {
+ const attrs = await this.__super__.getMessageAttributesFromStanza.apply(this, arguments);
+ attrs.archive_id = getMessageArchiveID(original_stanza);
+ return attrs;
}
},