Gabble TODO
- Review activities code
MUC
- store disco responses in a per-room handle struct to remove idiotic triplicated room disco code (handles, room listing, room properties); at the very least when discoing a bunch of JIDs, don't repeatedly disco the same server
- report our presence changes to all of our per-room nicknames
emit the A->B rename signal before we do the "person A -> disappears, person B -> appears" stuff
- understand status codes to refresh our room properties when stuff changes
- handle more gracefully if your nick is already in use
- handle invites which fail to send
- include our nickname in MUC invites, and handle them when received?
- allow changing of our nickname before joining
Media
- update compatibility with gtalk so we speak the current client protocol (doing transport-accept, and using transport-info), not the old "candidates" one, because it harms interop with other people who can happily interop with the official client
Tweaks
- use loudmouth's thing instead of strftime?
add a small timeout to queue up <presence> changes and emit as one signal
- no way to unset aliases
- use Google's resource selection algorithm
- make sure we ref the handle of the subject setter in MUC props
- make roomlist channels asynchronously when we haven't recieved the disco service response yet
- make gabble_disco_get_service_items do filtering on category/type/namespace
- fix privacy leaks in typing notification; nothing should be sent in a channel until we've sent a messages. also, we should disable typing notification when the other party doesn't send them.
- emit avatar received opportunistically (make vcard manager inspect incoming stuff)
Open Issues
- validate UTF-8 off the wire or dbus will disconnect us?
- MUC: invites can contain passwords... how do we handle this? store password when invited, make readable later? we don't get a meaningful notification when it changes.
Wishlist
- per-buddy hiding
- jabber:iq:privacy invisibility (or maybe just jabber:invisibility)
- jabber:iq:privacy blocklists
- grok idle times
- send directed presence to people we're in IM conversations with
Refactoring
- move room list into MUC factory
- function to parse node + features into flags
- media channel factory
- make mixins into ginterfaces
- fix gengobject to include CSymbols for interface names, then the implementation of different interfaces can be done in different parts of the file, or using ginterfaces directly

