Why rewrite the IRC protocol plugin? (Part 2)

I previously wrote about why I'm rewriting the libpurple IRC implementation into a JavaScript implementation for Instantbird.  This is kind of a follow up, but more focused on what I hope to accomplish feature wise for IRC in Instantbird.  A good overview to look at is the dependencies of bug 507 (implement IRC in JavaScript) -- you'll want to look to the left of bug 507, these are the bugs that depend on 507 (as opposed to blocking 507).

My overall hope is to make Instantbird the easiest and simplest IRC client to use.  I've found that most IRC clients tend to depend a great deal on commands and essentially being a very thin GUI layer on top of the protocol.  I don't really see the reason for this, we should attempt to hide the protocol as much as possible from the users.  This means fitting the IRC command responses into the GUI wherever possible and possibly "losing" some features compared to other IRC clients, although I think that's a matter of perspective.  (For example, there's often an IRC command to list all the channels available, I do not think this should be implemented as a text command, but it should be available via the join chat GUI).

Now some more specific plans:
There's some not as user visible improvements I'd like to make:
There's also a few "bugs" in the libpurple implementation that this will fix:
These are just some ideas and it's a long ways off for feature parity with libpurple even.  (Although since Instantbird doesn't support all the features of Pidgin, feature-parity in this case doesn't include things like DCC transfer, etc. until Instantbird itself supports those.)

Right now, the code is mostly usable (and I'm finally catching any exceptions that are thrown so the code shouldn't crash anymore), and works fine.  The one issue I'm having is sometimes I'm unable to reconnect when the connection is lost, but I think I've finally fixed that issue and reconnection should happen automatically!

One last quick note, if you happen to have the repository checked out, you'll want to update on the default branch from now on as I've merged the separate branches together under subfolders.

Labels: ,