- Remove some useless locking, use messages instead
- Sessions can be created locally (we need to do a new Session) or from
incoming messages (the session is created for us but we still need to
attach a window to it). The code was not handling all cases right
- Better detection of carbons or group chat replay sessions (not sure
what they are but now we check the type to detect them)
- Add PubSub logic so we can request and handle the avatars
- Add base64 decoding + image decoding
- Rework roster item size and drawing to fit the avatar in
- Add a cache dir to store the avatars in
Use separate maps for group and normal chat, saving much confusion.
Use gloox sessions and MUC rooms as keys instead of strings.
Remove linear lookups in the map (what's the point of having a map?)
Do not create a MessageSession for MUCs as it prevents getting messages
in the MUC handler
This should fix all cases where we would accidentally create multiple
windows for the same thing.
There will be a lot more to do, but at least with this change, it is not
possible anymore to create a UserID outside of JRoster. So there should
always be a unique instance of the UserID for each roster entry. This
makes sure the state of the user is globally synchronized properly, and
no part of the code is accidentally working on a copy instead of the
real thing.
- Remove "channels" menu and instead list group chats in the roster view
- Allow joining a group chat by double ckicking on it in the roster
- Support for bookmarks2 (XEP-0402). XEP-0048 is also implemented, but
currently disabled.
- Joining a group chat adds it to the bookmarks with autojoin enabled,
unless it is not an user initiated action (for example, someone else
invited you in a room)
- Leaving a groupchat adds it to the bootkmarks, with autojoin disabled
(so you can easily access the server-side history for it or join back)
- Bookmarks can be deleted by right click->remove in the Roster.
Fixes #32, #40