TNChat Client


 * Project description: TNChat

The TNChat client is an application written entirely in XUL and JavaScript, and executed by XULRunner. Its purpose is to connect to a TNChat Server and to implement the TNChat protocol -- at least, those parts of it which can be automated.

Version History
Releases are archived at http://narc.ro/CM/TNChat/releases/. As you can see, releases before version 0.3 were not kept. Don't worry, you haven't missed much -- it was the same application, only without most of the current features.

Before v. 0.3
I don't remember much about the versions I didn't keep, however they implemented most of the existing base functionality, namely:
 * Establishing a connection to the server.
 * Transmitting the contents of the user input box to the server.
 * Interpreting and displaying (where applicable) the responses from the server.
 * Disconnecting from the server, and noticing forced disconnects.
 * Nickname changes using the editable combobox to the left of the input box.
 * Tracking the users currently online by enabling the userlist capability (see /userlist for details).
 * Playing sounds under certain conditions, such as 357_shot on reception of /buzz.

v. 0.3
Version 0.3 was released 2008-04-05 and presented the first "usable" (by my criteria) release suitable for use in the real world.

Features:
 * Preferences dialog at Tools -&gt; Options: allows you to specify the host and port that File -&gt; Connect will connect to, as well as setting a preference to automatically connect as soon as the application is launched.
 * Remembering previously-used nicknames -- they are stored in the combo-box where the nickname can be typed in.
 * Foreground and background color pickers, including live preview (special note: Thanks a million, Dafi, you saved the day).

Known bugs:
 * Using the new color pickers breaks multi-line messages, in that actually applying the color is done by prepending &lt;span style="color: [fg-color]; background-color: [bg-color]"&gt; and appending &lt;/span&gt; to the message. Since multi-line messages are seen by the server as multiple separate (though simultaneous) messages, they are also sent back separately, thus resulting in mismatching &lt;span&gt; and &lt;/span&gt; tags. For now, please keep your text all on one line, if you want to keep it readable.
 * /me does not get colors applied at all. This is due to a fix for a bug whereby any /command would have the &lt;span&gt;s applied, breaking /nick horribly and not allowing logins again. Ever.
 * Text selection and clipboard operations in the history view are still not working. They probably cannot be achieved in the way I'd like them to be using the current implementation (note to self: consider using an &lt;iframe&gt; instead of the &lt;richlistbox&gt;, and writing straight XHTML in there).

v. 0.3.1
Version 0.3.1 was released about an hour after 0.3, and fixed a minor bug.

Features:
 * No new features

Bug fixes:
 * Fixed a bug with the regular expression that attempted to HTML-ize plain URLs by turning them into links, which was not transforming YouTube URLs.

Known bugs:
 * HTML-izing non-plain URLs is now broken (the regex is stupider, thus thinks a URL already inside an &lt;a href=""&gt; needs to be fixed). The operation will probably be moved entirely server-side, where a more complete implementation of Perl-compatible regular expressions (with look-behind) is available. Regular-expressions.info has more information about regexes in PHP and in JavaScript.

Future Plans
Requested features:
 * Saving chat history, presumably using a File -&gt; Save History... menu item.
 * Including a readme.txt in the release packages, with instructions on the non-obvious features (such as changing nickname).

Desired features:
 * Resurrecting old input using, e.g. Ctrl + Up, in the user input box.
 * Selection and clipboard operations (just Copy, really) in the chat history box.
 * Ordering the user list alphabetically (versus the current unsorted/by age order).
 * Popup menu for users in the user list giving access to some common user-oriented commands (which need to be implemented, as well)
 * Tab-completion for nicknames in the user input box.
 * "Private" messages (server-mediated) between users.
 * Fixes for all known bugs (a no-brainer, that one)!
 * Turning underscores into spaces automatically (the server does it the other way around to preserve the space as a separator).
 * Allow Unicode in user input... That's probably going to require some aid server-side to transform any Unicode extended chars into their &amp;#x0000; representation.
 * Trim user input before deciding whether to send it along or not (but delete it anyway -- Enter was pressed).