2.0 → 2.1
Features
Channel user status display.
In channel windows, the names of active users (those who've said something when you were present, within the last 15 minutes) are now shown in bold, and users who are marked away are shown in grey.
Away status handling:
- By default, the /away command applies across all connected servers, not just the server you type it on.
- You can be automatically marked away after a period of idle time (default 15 minutes).
- When you are away, an away icon appears in the corner of each window. You can click the icon to cancel the away state.
Automatically closes spare windows.
Once you have connected and another window opens (because you joined a channel or something), the spare window will by default go away after 5 seconds. You can prevent this by clicking back to the spare window.
Now supports popup notification for the following events:
- New message window appears
- Somebody says something in a minimised window
- Somebody says something in a conversation that's been idle for 10 minutes or more
- Server disconnect (except when you requsted it)
- DCC file transfer complete (finished or error)
- Scripted /popup command
Popup notification on Windows and Linux requires Java 1.6 and uses a system tray icon (which will appear if you have any notifications turned on). On Mac it works via the popular 'Growl' application and doesn't require a particular Java version or display extra icons. If you don't meet those requirements, you won't see popups, and the options page will explain the situation.
Minor changes
- Changed the two-weekly update check to report the current version number to the Web server, so that I can obtain statistics on versions currently in use. (Along with the IP address, this is the only data reported to the server in an update check.)
- When receiving encrypted messages, the client now sends a response to the remote user if it doesn't support the requested encryption format, so that a fallback can be selected. (leafChat currently only offers one format. This feature is in case future versions use different formats.)
- The watch system now takes advantage of 'obvious' information about the user to update their online status immediately, without waiting for notification from the server. (I.e. if it sees a QUIT it marks them offline, if it sees anything else from them it marks them online.)
- As well as adding and deleting character encoding overrides, you can now edit existing ones.
- The system now prevents you from sending messages to a server too quickly (this can cause the server to disconnect you). It will only send one message every 2 seconds, with bursts of up to 5 permitted.
- Spare windows now correctly update with the server name when it changes during connect.
- In the connect dialog, you can now set it to automatically connect on startup as well as just showing the dialog.
- Added an 'isYou' flag to join events to make it easier to script events that happen on join.
- Auto error reporting now doesn't send in the following types of error
by default (you can make it send them if you think it is a system
error):
- Errors caused by user scripts.
- Errors occuring when loading themes.
- 'Out of disk space' errors.
- If you manually join a channel by typing /join, the channel name is remembered so that you can join it in future using the Join dialog. (Unless the channel you join requires a secret key; to remember this, you still have to specifically tell it using the Join dialog.)
- Formatting has been improved for the /who command response.
- CTCP improvements:
- Due to an oversight, received CTCP messages (PING, VERSION) were acted on but not displayed. These are now displayed.
- Formatting has been improved for request and response, including showing PING times in readable format.
- Slight corrections to built-in CTCP response text.
- You can now send CTCP ping by typing /ctcp whoever ping - this previously didn't work as the client failed to add the time.
- On Mac OS X 10.5, the default download folder is now 'Downloads' instead of 'Desktop'.
- Allowed nicknames beginning with _ in server settings.
- Changed ordering of options when nicknames are selected in channel so that 'Kick' is no longer first on the list.
- Added text to the server preferences screen to clarify how the auto-identify works (it uses nickname passwords from the table, you shouldn't type a password into that edit box) and explain that you aren't allowed to set nickname passwords at global level.
Automatically reported bugs
When certain types of error occur, leafChat offers to automatically report the problem. The bugs below were reported using that system and have now been fixed.
- When you created a script with errors in that included non-ASCII characters, saving the script caused a system error instead of displaying the correct error message. (Example: make a script with the single line é=4;)
- Added check to help diagnose an auto-reported bug that happens when typing or when using the /say command, by detecting the problem earlier.
- Added checks to help diagnose an error to do with the toolbar that occurs during startup.
- Fixed it so that if you use /nick to change name, it doesn't do the automatic change to add _ if the name is in use (which it is supposed to do only on connection)
- Receiving certain server messages with incorrect parameters caused 'Error during dispatch of [NumericIRCMsg]'. Changed to display these as unhandled messages.
- Improved handling of URLs to avoid an 'invalid URL' error. leafChat will not now make URLs into clickable links unless it thinks they are valid URLs.
- Fixed errors to do with the /ignore command. Typing /ignore on its own would ignore everybody (oops), and if it tried to generate an error message, that caused an error...
- Added extra reporting to help diagnose 'XML error on line 1' errors. (For most of these errors I was able to determine the cause and fix it, but some remain; reporting the actual text that caused the problem should help me fix it.)
- Added extra checking to hopefully avoid an error that occurred when clicking the 'Choose' button to select a download folder for DCC transfers.
- Minor changes to fix one potential error when writing to log.
- Done something which might fix a secondary error if an error occurs while creating a channel window.
- It was possible to cause an error by entering text immediately as the server became disconnected (somehow). Fixed.
- Tweaked the control as to whether the Connect button is enabled or not when invalid server names are typed.
- Added code to provide better information for the 'Command regexp didn't match' error so that I can fix this if it still happens.
- Fixed error that occurred if you set DCC download location to something with an & symbol in.
- Added check to ensure you can't enable scripts that have errors.
- Fixed error that occurred if you clicked the 'auto-identify' checkbox in the server preferences in some circumstances. This bug also caused other similar errors in that screen.
- URLs appearing in chat caused errors if they contained $ or \ symbols.
- Fixed the following error: 'java.lang.ClassCastException: com.sun.java.swing.plaf.windows.WindowsInternalFrameTitlePane$ ScalableIconUIResource' (I don't know where this occurred, but there was an incorrect assumption about the type of icon that would be returned by an API call for internal frames).
- Attempted to fix an issue in which log files might be locked (causing an error opening a log file), by synchronizing read/write access.
- Typing /watch without the right parameters caused an error box, or else didn't display the right message; fixed.
Other bugs
- In separate windows mode on Mac OS X 10.5, window size wasn't remembered correctly. Windows grew 28 pixels wider each time they were opened. Now fixed. (Note: This problem may still occur on OS X 10.4. If it does, let me know and I'll fix it next time. It should not occur on 10.3.9.)
- Problems occurred if you joined a channel using different case from the server, e.g. if the channel is called #FROG and you joined #frog. Fixed.
- On Mac OS X 10.5, table column headings (e.g. on Connect/Settings or Options/Character encoding) sometimes did not fit in the space available. I have changed the code that works out those widths so that it should hopefully work on all current and future platforms - it's still a hack, but a more reliable one.
- When using the /ctcp command e.g. /ctcp nickname FROG whatever, parameters after the command ('whatever' in this example) were sent without a space before them, causing it not to work.
- There are minor graphical problems with the display of the split pane (that lets you drag the size of the name list) in Linux. I have made changes that might address this, but probably won't help.
Back-end/API changes not covered above
These may be of interest to plugin authors.
- Updated the incorporated Eclipse Java compiler to the latest release version (3.3.1), and using the official version rather than a munged one I had made previously.
- Corrected a bug whereby plugins couldn't export more than one API version (they are supposed to export all the versions they support, e.g. if they still support v1 as well as v2).
- Made minor updates to the UI plugin (API v2) and IRC plugin (API v2):
- Clickable actions for Label via setAction(), and default support for <url> in Label.
- ListBox setBold(), setFaint().
- Window isMinimized() and isHidden().
- BorderPanel get().
- Support for clickable Pic widgets.
- Server wasQuitRequested(), isAway().
- UserCTCPRequestIRCMsg now tracks whether the client has sent a response independently from standard markHandled().
- Multi-server away constants added to IRCPrefs.
- Track ID for server requests (initially just supports WHO) via Server.sendServerRequest() and ServerIRCMsg.getResponseID()
- Possibly other things I forgot (sorry, I wasn't very good at tracking these changes).
- Minor util additions:
- PlatformUtils.getDownloadFolder()
- Other things I forgot.
2.0 beta 2 → 2.0
Features
- Tab completion at start of line now includes :
If you tab-complete a nickname (not channel), at the start of a line, it gets a colon and space afterward. For example, you could type m a <tab> to get 'Mary: ' and be immediately ready to start typing your comment directed at Mary.
- New encrypted chat feature
You can now use secure encryption to chat via the IRC server with other leafChat 2 users. To use, /encryptedquery <nickname>, or right-click somebody and choose 'Encrypted chat'.
The encryption uses a 1024 bit Diffie-Hellman key exchange, followed by TripleDES encryption. These technologies should be quite secure and have the advantage that they are available as standard in Java distributions since 1.4.2. (Encrypted messages go via the IRC server in a similar manner to normal messages, not via DCC.)
I am not an encryption expert. As this is based on standard Java infrastructure, hopefully it is OK. Source code for the encryption plugin is available if anyone would like to review it.
[If any other IRC client authors would like to support the same system I can provide full details of the format.]
The system makes no attempt whatsoever to guarantee the identity of the person you're talking to (there are no signatures involved). You will need to check their identity in some other way each time you have a secure conversation.
- Debugging turned off
Debugging features have been turned off. For example, IRC server communication is no longer printed to the standard console.
If you want a log of IRC server communication, install the optional 'debug monitor' plugin and run this using /DebugMonitor when you want to see it. When installed, the plugin remembers the last hundred lines even if the window isn't there, so you can bring the window up after an event that you want to check.
Automatically reported bugs
When certain types of error occur, leafChat offers to automatically report the problem. The bugs below were reported using that system and have all been fixed. Where a bug occurred to more than one person, I've given its 'chart position'.
- #1 - Scripts were not completely unloaded. On Windows platform, this made it impossible to delete the .jar file and caused errors whenever you tried to delete a script and sometimes when trying to save changes to a script.
- #2 - Receiving PART message (or similar) for users who weren't known to be in the channel caused an error. This could happen with 'silent' channels. Has been changed from an error to a warning stored silently in the system log.
- #3 - Some IRC commands which require a certain number of parameters caused a program error if you used less, rather than just displaying a 'needs more parameters' response.
- #4 - Some IRC network services send op modes for users who don't exist on channel. This caused a program error. Now stored as a silent warning in system log.
- #5 - The known-users information ('x was previously here at...') caused errors if the person's nickname contained certain characters.
- #6 - Sometimes when changing interface style an error could occur. I didn't find out why, but have changed the code so it won't happen anyway.
- #7 - If somebody got kicked out of a channel soon after you joined it, an error could occur.
- If a server disconnected you instantly after sending a private message, an error occurred. (An example is irc.justin.tv which does that if you log in without giving a correct password.) The root cause was that leafChat processed some events in the wrong order.
- If you did /whois on irc.justin.tv on somebody not in any channels, this caused an error due to unexpected format of the response.
- Selecting the encoding 'x-jis-autodetect' for outgoing messages caused errors. This encoding cannot be used for outgoing messages. I've made the system check and not include these in the list (for outgoing text).
- DCC sending files including the & character in their name caused errors. There could also be errors if the nickname included such unusual characters.
- If the network connection was discovered to have broken while sending text, this could show as a program error. I have fixed this so that it now shows as a standard server disconnect.
- In the Connection page of Options, entering an invalid (too big) number into the selected port fields could cause an error.
- Connecting with a nickname that included { caused an error.
- There's an undocumented syntax to direct commands to a specific server. Typing '/1/whois someone' should run '/whois someone' on server 1 (the first you connected to is 1). I'm not sure how useful this is, but anyway, it was broken. Now it works.
Other bugs
- Connect button inappropriately disabled.
If you last connected to a server by typing the name, the next time you opened the Connect dialog, the Connect button was greyed out even though the name was still there ready to connect. - Server password box didn't work properly
When you entered a password into the server password box, it did actually work, but if you clicked around to other servers, the password box didn't change as it should. - Failed to authenticate to irc.justin.tv
This server makes a (probably inappropriate) assumption that the PASS command will be within a single TCP packet. Because of the way leafChat does its output, that wasn't necessarily the case. I've changed leafChat so that this is now likely to happen (barring unusual network circumstances) and such broken servers will continue to work. - Topic setter not escaped properly
If the user who set the topic had a nickname containing special characters such as < or &, this caused an error. - 'Error adding text' was not a very helpful error message
This error message was not helpful in fixing bugs. I have changed the error message to include the text that it was trying to display, which should allow me to easily resolve such bugs. - /away messages were chopped off after first word
Only the first word of an /away message was actually used. Oops. - Double spaces were stripped from received text
If received text included multiple spaces in a row, the second (and onward) were ignored. This caused problems when trying to view ASCII art/diagrams, even after switching to fixed-width font. - Split rejoin detection was broken
Split detection (where it displays a summarised version of network splits and rejoins, rather than a million lines of QUIT or JOIN displays) was working for splits, but not working for rejoins. - Invites were displayed only as unhandled
Invite messages were displayed only as unhandled text (grey messages showing the text sent from server). These messages are now properly displayed and coloured, along with a link you can click if you do want to join the channel. - DCC chat: added confirmation (security)
Previously, DCC chat automatically connected. This was a security bug as it meant that a remote user could get your IP address without permission even if the IRC server in question hides addresses.
There is now an 'Accept' link in the DCC chat window (and instructions telling you not to accept if you weren't expecting it).
- DCC chat: removed superflous console output
A message was output to the console (for those who can see the console) whenever you closed a DCC chat window. This was unnecessary and had been left in by accident. Now removed.