Using a callback to display a sent message inside the ChatControl means
that all messages we send have to be issued from the GUI layer
(send_message()) if we want them to display in the ChatControl.
This replaces the callback and catches the stanza-message-outgoing event
after it was processed by the core.
This is easier to read/understand than dealing with callbacks and lets
the core issue messages without having to care if a ChatControl is open or not
- Calculating so many hashes for each Message is quite expensive
- It hides our own implementation bugs, like when we retrieve history
from a MUC with wrong timestamps, or on rejoin. We never know about it
because the Messages are dropped.
- It should not be necessary anymore. The original problem was a bug
in nbxmpp which triggered mass resending of old messages.
Right now oob data is merged into the message text and stored into the DB.
If we load this message from the DB we cannot know anymore if and which
parts of the text was oob data.
Use the additional_data api to store oob data into the DB instead of
altering the original message text.
This lets us decide later on if and which data we want to display, even
on history replays. Also plugins can use the data.
- Add support for Pubsub Avatars
- Dont poll for vCard Updates, only use XEP-0153
- Dont cache vCards
- Store the avatar SHA of roster contacts in the DB
- Store the current SHA of each contact in the Contacts Object
- Move some code into the ConnectionVcard Class
- Use new parse_datetime() method
- Drop message with error if MAM doesnt supply a timestamp.
- If the user supplys an own timestamp, save it so we can decide in the
future how to display it.
We get our full JID on the bind event.
After that it is saved in the `registered_name` attr on the Connection
Object.
In case the bind never occured we get the bare JID from config.
- Condition type = groupchat is not needed because we drop messages
type groupchat that come from the user archive. To get these messages
we will query the MUC.
- Because of this the logging method save_if_not_exists() can be much
simpler
A missing stanza ID means, we will have to take some measures to make
sure we get no duplicates in the Database later on.
Also fix getting the origin-id. Third time is a charm.
The gaol why we need to determine what ID should be used as stanza-id,
is so we can use the stanza-id in the future for deduplication.
Case we are the sender:
Either we look for a origin-id element, which we will include in the
Future in all messages we send, or until then the ID we set on the
message as attr.
Case we are the receiver:
If our server supports mam:2 we take the ID of the result element,
because mam:2 injects the archive ID live into every message we
receive. If we dont have mam:2 we fall back to the ID of the message
attr.
- Refactor and clean up code around MamMessageReceivedEvent
- Goal is to add a GcMamMessageReceivedEvent later on
- For that cause added a raw-mam-message-received base event