Avoid unnecessarily connecting to rooms that should instead receive room
activity indicators (RAI).
- Don't join a newly created room that qualifies for RAI.
- Upon switching back to the tab, don't reconnect to a room that qualifies for RAI.
- Don't ping a room that we didn't actually enter.
- Add a `Stanza` class which can be used by Strophe because it has a
`tree()` function. This is what gets returned by the `stx` tagged
template.
- Throw an error when no valid namespace is on the stanza.
Strophe.Builder used to automatically add the `jabber:client` namespace,
but that doesn't happen with `toStanza`, so we need to fail if it's not
specified by the user.
- Use the Strophe XML Parser
This opens the door to NodeJS support
if the occupant can't be found via XEP-0421 occupant id.
We cannot safely assume that an occupant found via nick/jid but without
the same occupant id is the same occupant.
(Although they do load when using converse.min.js)
I wasn't able to figure out why exactly, but setting `mode` to
`production` for the `converse.js` build solved the issue.
insofar we have an `occupant_id`.
We do this by subclassing `create` on the `ChatRoomOccupants` collection
and `save` on the `ChatRoomOccupant` model, to make sure that whenever
an occupant is created or saved, that the `id` matches the `occupant_id`
value if it's available.
This lets us look up the occupant via `occupant_id` via dictionary lookup,
instead of array traversal.
Another change is to save `from_real_jid` when adding an occupant to a message
and not in the muc plugin.
This decouples the plugins more. Ideally we can remove the status plugin
entirely from a customized Converse build (but we're not there yet).
For error messages we still use the `message` attribute, since error
messages generally don't have a body, and if one does, it likely refers
to the `body` of a rejected message that the error refers to.
We're still setting both `body` and `message` attributes, but usage of
`message` for a normal `chat`, `groupchat` or `headline` stanza should
be considered deprecated.
Add the ability to send OMEMO corrections.
Refactor how OMEMO messages are sent to avoid having to override
`sendMessage` and thereby also allowing corrections of OMEMO messages to
be sent out.
Add two new hooks.
- getOutgoingMessageAttributes
- createMessageStanza