-We have a minimally functional client which can do chat rooms and 1:1 IM.
-The code is at "prototype" quality and needs improving, and there are
-features and corner cases which are still unhandled. What se need to do
-includes...
+ • CHAT ROOMS / IM
- • Meetings
+ The chat functionality is fairly complete, but some parts are
+ exposed rather clumsily or not at all due to the limitations of the
+ Pidgin/libpurple APIs. The good news is that when we publish this
+ plugin as open source, we can improve those APIs to expose our
+ functionality in a saner way. Things we don't support yet for this
+ reason — but which we *could* expose somehow in the meantime if
+ there is demand for it — include:
- Handle the incoming JoinableMeetings information. We can't actually
- join yet but at least we could pop up a notification with a
- clickable URL for the web client. We should use the individual PIN
- so we join with the correct identity.
+ • Removing chat room members.
+ • Deleting / administration of / leaving chat rooms.
+ • Notification settings for IM/chat (always/mention/never).
+ • Displaying full name of users who are not "buddies".
+ • List of chat rooms with unread message counts, especially in the
+ buddy list.
+ • Creating new group chats (not rooms).
- • Error handling
+ Other TODO items which are less constrained by the Pidgin APIs:
- There is very little of this; a lot of silent "return" on failures.
- That's all very well for a rapid prototype but crap for a piece of
- software that people are actually going to use. Someone needs to do
- the fun part of turning all those failures into coherent error
- messages.
+ • Automatically populate buddy list with chat rooms, as we do for
+ contacts.
+ • Markdown support: this works for incoming but you have to
+ explicitly type "/md ... " in your outbound messages to send it.
+ This is the same as the web client but we should do better and
+ convert from HTML generated by Pidgin's UI editor/formatter.
- • GObjectification
- Make it look a bit more like a glib program, and turn things into
- proper objects. Things like struct chime_contact should definitely
- be a ChimeContact object, with signals that can be subscribed to
- instead of the direct hacks in set_contact_presence(), for example.
+ • FILE TRANSFER
+ • We support receiving photo attachments, but complete support for
+ sending/receiving arbitrary attachments is being worked on in a
+ Github PR.
- • Initial login
- Even if it has to be screen-scraping HTML and invoking
- purple_request_fields()
+ • MEETINGS
+ Basic meeting handling is functional — we can schedule meetings and
+ join them, and the participant list is displayed.
- • Code documentation
+ • Audio
- Now that the APIs for the internal functions are no longer evolving
- quite so rapidly, document them. Especially the subtle parts about
- object ownership.
+ This is now basically working, but needs cleanup. In particular
+ the transport code needs to be properly implemented so that it
+ can handle reconnects, and use DTLS in preference to the TCP
+ websocket.
+ • Screen share
- • Logging
+ Implementing screen share RX and representing it as an incoming
+ video stream in Pidgin should be relatively simple. Outbound also
+ shouldn't be so hard, based on libshadow and the code in the Lync
+ plugin.
- Somewhat ties into the above. We should emit decent application
- logs through purple_debug(), in addition to dumping the wire
- traffic as we do when $CHIME_DEBUG is set. We should ensure we
- log unhandled incoming messages — the juggernaut callback already
- has a start at returning a 'handled' status.
+ • Video
+ Video is mostly RTP-based, so should be a lot easier to throw
+ together than audio was.
- • Multi-party conversations
- These will need to be represented as chats in Pidgin.
+ • DIRECT MEDIA CALLS
+ The Chime app gives you a way to make audio/video calls directly to
+ individuals. We can currently receive those calls, since they
+ basically show up as meetings. We need to work out the protocol
+ API which set up such a 1:1 call, and implement them so that you
+ can make an audio/video call directly to an IM contact.
- • Message notifications / attachments
- Handle the special cases in messages other than just plain text.
-
-
- • IM history
-
- Work out how we can make historical IM messages available without
- having to present then *all* as new messages on first startup.
-
-
- • Presence / availability
+ • PRESENCE / AVAILABILITY
Investigate and properly implement the device availability workflow,
use the 'Automatic' status instead of 'Available', and ensure we
have coverage of the other states that a peer can be in.
- • Login
-
- Work out if there's a way we can actually handling the login from
- within Pidgin.
-
-
- • Pidgin 3.x
+ • PIDGIN 3.x
Port to Pidgin 3.x
-
-
- • 'Typing' status
-
- Send and show the 'is typing a message...' status
-
-
- • Message receipts
-
- As of Pidgin 3.x we can show when a message has been read:
- https://developer.pidgin.im/ticket/6940#comment:34
-
-
- • Valgrind testing
-
- Keep running under 'valgrind --leak-check=full' and other testing
-
-
- • Voice / video / meetings
-
- Lots more fun here when we're ready...