- Clear timer when a messages changes from epehemeral to non-ephemeral
- Set MUC occupant on `groupchat` message when `type` changes to `groupchat` (from `error`)
- Set roster contact on `chat` message when `type` changes to `chat` (from `error`)
Thanks @afriedmanGlacier
Promises only get recreated upon logout, not reconnection.
However OMEMO was getting re-initialized on reconnection and
`_converse.omemo_store` was also deleted.
This caused a race condition where an incoming MAM message would cause
`parseEncryptedMessage` that then throws an AttributeError because
`_converse.omemo_store` is undefined because OMEMO isn't yet
initialized.
Waiting for the `OMEMOInitialized` promise doesn't help because it's
still the old (already resolved) promise from before the reconnection.
inside `parseMessageForMUCCommands`.
If the function doesn't find any core MUC commands, it calls
`parseMessageForCommands` which will trigger the hook.
I think it's appropriate to give built-in commands preference above
commands by 3rd party plugins and this also solves the issue of the hook
being triggered twice (once in `parseMessageForMUCCommands` and
then again in `parseMessageForCommands`).
When calling `getDeviceList`, wait for the devices to be fetched
Otherwise a race condition might occur, whereby a new device gets
created in the collection, and then removed again as the collection is
replaced with the values fetched from the browser-storage cache.
Also created `converse-omemo-fingerprints` component to asynchronously
render fingerprints in the user details modal. Was done as part of this
commit because due to `getDeviceList` being async, the relevant test for
the modal were also failing
before parsing message stanza for encryption parameters.
Otherwise we might not know what our own device-id/sid is, and therefore
can't decrypt the incoming message.
Fixes#2733
As mentioned in the XEP, don't show error messages for OMEMO messages
that can't be decrypted because they were already decrypted before or
because they weren't encrypted for this device.
And use that to render images in unfurls.
This solves the issue of github URL unfurl images not having an image
extension and then being rendered as a hyperlink by `converse-rich-text`.
Instead, we know that it's supposed to be a url, so we just use `converse-image`.