Saturday, March 15, 2008

GSoC - Adium and Group Chats

GSoC is here again. This year, I'm planning on applying to work for / with my favorite IM client: Adium. The project I have picked to propose is one already suggested by the devs. It has to do with improving Adium's Group Chat UI.

Most users might not know this but Adium does currently (unofficially) support IRC chat. If you've ever looked at the source code, you'll notice an IRC Service Libpurple Plugin. Below is the entire description of the project proposal on the Adium GSoC wiki: "Right now, groupchat is working, but the UI is inadequate. This holds back IRC-support. That's bad. You could fix that. That's good."

I decided to first find out for myself exactly what "... the UI is inadequate ..." meant. I tried out the IRC plugin with all the default message styles. With the exception of Stockholm and Mockie, the rest of the message styles would have to be tweaked a bit to work well with chats like those that occur in IRC. Another thing I noticed was that, the waving dock duck icon and red message number that displays when a user sends you a message were being displayed for every single message in the channel regardless of whether or not it was addressed directly at me. These two observations have led me to believe that fixing the groupchat UI will probably involve touching some other parts of the source code that might not necessarily have a direct relationship with the message window.

The next thing I did was to take a closer look at an example of a Group Chat UI that works well for me => Colloquy. I examined the source code for their message window UI. It is interesting to note that Colloquy does borrow some source code for tabs from Adium. The left column of the window that displays the channels and persons is a customized NSOutlineView. (I spent sometime developing a mock app to bring myself up to speed with NSOutlineView programming. The app just displays a tree view of the contents of its Resources folder).

I am still examining how the tabbed views work in both Adium and Colloquy. Through correspondence with Kent Sutherland, who worked on integrating Adium's tabs with PSMTabbarControl (in another GSoC project), I have learnt that the classes he made major changes to were AIMessageWindowController and AIMessageTabViewItem.

Thats as far as my current research has gone. I am aiming for a solution that will consist mainly of cosmetic changes to the UI that work, rather than a huge overhaul to Adium's underlying tabbing mechanism. It would be a bad idea to bias towards some particular UI solution from the get go; rather I'll start by proposing a lits of possible ideas with mock ups and screenshots. Most or some of these will come from those already existing in popular IM clients. Another good thing to do (which I have already started) is to catalogue open tickets having to do with the group chat UI; that way some of them can be factored in when working on this project. (It is even possible that the chosen solution will be to have two UI's, one for group chats and the other for one on one chats.)

I made a quick shortlist, in addition to browsing screen shots for the following: AIM ,aMSN ,Colloquy, Fire, iChat, icq ,Kopete,Miranda , Pidgin ,Trillian ,Yahoo . From my preliminary findings, the UI's fall into two broad categories. Those that use a column to display the contacts in a group chat (columnChats) e.g. Colloquy, and those that use a drawer (drawerChats) e.g. Fire.

After deciding on the UI design. The next, fun part will be to start coding it up. I have made a shortlist of Cocoa technologies and some other things which I might have to learn in order to accomplish this task. I'll probably start reading up on them really early on. OutlineView programming (I have already started work on this), Key-Value Coding and Observing, Managed Objects (Core Data etc.), View programming, How Adium's tabbed view's work, PSMTabbarControl Framework. The list is probably more than that but thats all I can think of for now.

The thing I like most about this project is that there is a clear goal and yet much is left open to design decisions. This means, in addition to coding, careful thought will have to be given to big picture issues like look and feel and user response etc. I will probably want to have a lot of user input and testing during the coding process. One nice side effect I am envisioning is that the transcript browser window might benefit from the an improved Group UI: (see last sentence in Ticket #7299).

Ok ... I think should go finish drafting my application. Wish me luck!! :)




No comments:

Blog Archive

Labels