Numbers with # symbol refer to issues in the GitHub issue tracker.
2.41 → 2.5
Features
- New auto-reconnect feature (enabled by default, option in miscellaneous preferences). Will try to reconnect to a server if disconnected. To avoid loops it only tries once, and not if already connected to another server on the network. #28
- Tab completion for / commands is now implemented. You can also now get a complete list of supported commands (including those from any scripts saved in 2.5) on the Options dialog. #20
- The new /server command can be used to connect to a server from scripts (or if you prefer to type it rather than use the connect dialog). #59
- You can now right-click on yourself and carry out most of the commands (for example, if you want to /whois yourself or kick yourself out of a channel). #22
- When using the notification feature on Windows or Linux, if you click on a notification it should now automatically switch to the tab or window that has new text as well as bringing leafChat to the front. #23
- Server addresses that redirect (such as irc.dal.net) are now retained in the network list. When you connect to an address like this and get a new server, the 'are you sure you want to include new server in the network' prompt doesn't appear; it's automatically added. #25
- There are new custom icons for servers, networks, and redirectors in the Connect dialog and related settings page. #38
- Automatic SSL detection caused an annoying delay when first connecting to a new server that doesn't support SSL. leafChat now assumes that ports 6667 and 7000 are unencrypted, avoiding the delay. (You can set it manually in server settings if it does require encryption on those ports.) #39
Ubuntu bugfixes
For this release I tested the system on Ubuntu 12.04 LTS using Java 7 and found a number of issues (some probably general to Linux or Java 7, some caused specifically by the Ubuntu platform). leafChat should now work well on this platform.
- Notification system causes error due to Ubuntu hiding system tray and not reporting this properly to Java. #31
- When there is no tray icon, the 'minimise to tray' option should not be available. #36
- UI style switch from Classic to Tabs view doesn't update display. #35
- Classic view shows two sets of buttons. #34
- Classic/tab view shows high-resolution (too big) buttons. #32
Automatically-detected bugfixes
- DCC chat and encrypted chat were both broken since 2.4. #41
- Occasional problem when editing highlight words (unable to reproduce, but have added some checks and better diagnostic). #43
- Added more safety procedures to preferences saving in an attempt to solve occasional problem when saving preferences on Windows. #44
- If the audio system does not work (e.g. no audio device) or is incompatible with leafChat for some reason, this is now handled without showing an error dialog, and the Sounds pref page displays more information. #45
- Fixed possible bug (concurrency issue) in internal code that lists connected servers. #46
- The /links and /lusers commands could cause a crash if server descriptions had unusual characters, such as colours. #51, #52
- When the server sent a QUIT command with no message, this caused an error. #54
- In some situations I can't reproduce, the system tried to set keyboard focus to the server box in the connect dialog after that dialog had already closed. I have made it so it doesn't send focus events if the component is not visible. #56
- If you closed the Join window while still editing a channel key, it gave an error. #57
- On Windows, there are rare situations where saving a script fails. I have attempted to make the script-saving procedure safer. #60, 61
Other bugfixes
- When using the Join button (in Favourites page of Join dialog) to join a channel, this should join only that single channel, and not trigger auto-join for all ticked channels on that server like it would if you do a normal connect. #26
- License dialog is broken (wrong text, doesn't hide splash screen). #30
- Colour 7 should be orange, not dark yellow. #24
- Multi-line paste wipes out any existing text on the line if you cancel the dialog. #40
- Should be easier to run from command-line and not have hard-coded Mac-specific paths. #29
- Scripting doesn't work from command-line launch. #37
- Classic/tab view high resolution buttons have text in the wrong place. #33
- Prevented adding network with blank suffix. #49
API changes (for plug-in authors)
- IRC plugin API version 6: new message UserCommandListMsg should be handled if you implement UserCommandMsg to provide information about the command for tab completion and the command list; new suppressAutoJoin method in Server; new PREF_REDIRECTOR server info key; new PREF_AUTORECONNECT setting.
- UI plugin API version 8: new function UI.showLatest() used to jump to latest 'red' window; new interface WidgetParent with method getWidgets() used to list all widgets in a panel or page.
- Notification plugin API version 2: new function hasTrayIcon
- Audio plugin API version 2: new class AudioSetupException thrown in cases where user doesn't have working audio playback
2.4 → 2.41
Bugfixes
There were quite a lot of regressions in 2.4; sorry about that. Hopefully these are all fixed now. These bugfixes address all the automatically-reported issues plus a few others.
- Scripting was seriously broken; you couldn't add new script or add items to it. [StartupClassLoader.java:49] #4, #16
- Pasting text that contains more than one line failed. [UISingleton.java:812] #2
- Connect dialog didn't remember network selections from the list. #15
- Receiving files via DCC caused an error. [UISingleton.java:826] #5
- Link to change topic didn't work. #14
- leafChat's nickname boxes were too restrictive, not allowing valid nicknames such as those beginning with a _. #1
- Server errors early in connection (e.g. reconnecting too fast) caused a system error instead of displaying correctly. [XML.java:749] #3
- Playing audio failed on Java 5 (mainly affects OS X 10.4 users). [StartupClassLoader.java:153] #8
- I attempted to fix miscellaneous rare, non-reproducible errors. #6, #7, #9, #10, #11, #12, #13, #17
- (Affects developers only) There was an error in the UI annotation checker regarding array properties. #18
2.31 → 2.4
Features
- Log file export from the existing log view interface. You can export to plain text files only. I also tweaked the user interface a bit (when you search, it greys out the date/item options until you clear the search, to indicate that you can't do both; also moved search to left to indicate that it's used to select a log to view, just like the date/item options).
- Audio file support so that the system can play sounds in response to the new /sound command. .ogg format (only) is supported. Sounds are also available in the highlight feature. Audio playback uses the JOrbis/JOgg libraries from JCraft, and the Tritonus Java Sound plugin, both of which are included under LGPL.
- The Windows installer has changed. It is now based on NSIS (previously it was based on 7zip). In addition, the old launcher was removed in favour of a direct link to run Java. This should result in better behaviour on recent Windows versions and on 64-bit systems, although I haven't actually tested on either. Finally, there is an uninstaller too.
- leafChat now supports highlighting. This is turned on by default (when somebody says your name, it should appear in hot pink). You can configure it on the new 'Highlighter' preferences page by turning the nickname highlight on/off and adding other words to highlight. (Note: Words in your own text are not highlighted.) You can change the colour in the same way as changing colour of other text elements.
- leafChat now supports SSL connections for encryption. To use an SSL connection, connect to a server and port that supports SSL in the usual way. You can also adjust configuration in settings if required, but for a new server connection it should Just Work, you don't need to tell it the connection is secure. (Note: This implementation of SSL supplies encryption between you and the server only, not authentication. There is no attempt to check that the server is trusted or is using the same certificate it used last time.) The connection messages now tell you whether your connection is encrypted or not.
Bugfixes
- Did not correctly escape special characters such as & in 'ERROR: closing link' lines, causing errors. [XML.java:94]
- With the automatic connect option chosen, if you did not connect to a valid server last time (e.g. you have deleted settings for the server you last connected to), it gave an error; fixed so that it just doesn't automatically connect in that case. [ConnectTool.java:488]
- The listbox API supports disabling listboxes, but disabled listboxes were not visually different (they now show greyed text). Don't think this affects existing code, just an API bug.
- The UI showFileSelect function didn't work very well in save mode; specifically, the button still said 'Open' on most platforms, but there were also other things wrong; not sure where this UI is used but I was using it in the new log stuff so I fixed it.
- When changing font size in the options dialog, bold names (anyone who spoke recently) in the channel became the wrong height so that they do not fit in the space.
- A long-standing, serious but generally invisible bug regarding the toolbar caused it to do odd things to the toolbar button focus when you changed tab.
- The interface for selection in channel windows was confusing because you could have text selected in both the edit box and the channel view. In this case, pressing Ctrl/Command-C copied the text from the edit box, but this wasn't clear. Changed so that if you select text in one view, it unselects text in the other one.
- On Mac, clicking in the channel window (to select the text box) caused the text in the textbox to become selected.
- In scripting, timer events caused an error if they tried to execute a / command when there were no existing windows open (because the context wasn't initialised correctly).
- Script commands with more than one parameter were broken (you always got a message about not typing enough parameters, even when you did).
- When kicked out of a channel, if you rejoined it without closing the window, the edit box remained disabled so you couldn't type.
- Topic display (on the right of the window) didn't work properly if the topic included colour codes; fixed to support colour.
- If you set the auto-identify system to use /msg (rather than a special command such as /identify), leafChat displayed the message on the screen. This is undesirable, as it contains your password. Now changed so it will not display the outgoing message at this point.
- If you were in a channel with a key (+k mode), and you got disconnected, then when you reconnected, leafChat didn't automatically use the key to rejoin the channel window.
- Clicking on URLs didn't work if the URL contained a highlighted word; now fixed.
- Port ranges specified at network level were ignored (i.e. if you set a server port to 7000, it worked, but if you set the network port to 7000 and leave the server port unset, it used 6667 instead of 7000).
API changes (for plug-in authors)
- UI plugin API version 7: new annotations in UI code allow the system to check XML user interface at compile-time instead of at runtime. The build script finds any errors, such as missing callbacks.
- Java 5 is now the code baseline. In core code (mainly PluginContext); deprecated existing methods like getSingleton (still work) and replaced with new ones that use Java 5 conventions to make coding easier and more type-safe.
- UI plugin API version 6: adds support for MacIndent attribute on ListBox, changed definition of MacIndent to allow different indents to match buttons as well as edit boxes (old interface remains for compatibility with previous API versions).
- New audio plugin providing singleton com.leafdigital.audio.api.Audio.
2.3 → 2.31
Minor features
- leafChat now supports SSL connections for encryption. To use an SSL connection, connect to a server and port that supports SSL in the usual way. You can also adjust configuration in settings if required. (Note: This implementation of SSL supplies encryption between you and the server only. There is no attempt to check that the server is trusted or is using the same certificate it used last time.)
Bugfixes
- Port ranges specified at network level were ignored (i.e. if you set a server port to 7000, it worked, but if you set the network port to 7000 and leave the server port unset, it used 6667 instead of 7000).
- The server name shown in the connected servers dropdown did not update with the reported hostname (i.e. if you connect to a host that no longer exists, and the network has redirected you to another server via DNS).
2.21 → 2.3
Minor features
- The Connect dialog did not support irc:// URLs. It now supports these URLs of format irc://server.name:1234/#channel?key - the port, channel, key, and # prefix of channel are optional. (Note: leafChat still doesn't contain support for automatically linking from browsers with these URLs... is this important to anyone? Let me know.)
- The server dropdown is now always visible, with 'Not connected' if you're not connected. You can type IRC commands even when not connected (this can be useful for scripting). A new X button lets you disconnect.
- Added friendlier display formatting for the following server response messages: ERROR (that you get after you quit), /links, /version, /time, and /userhost.
- A new 'minimise to tray' option is now available on the interface style options page (except on Mac which doesn't have a tray). Also, even if this option isn't selected, clicking on the tray icon will now activate the leafChat window.
- Improved ban support by adding the /ban command (syntax: /ban #channel nick - this does a *!*@host level ban) and a menu item for it.
- The command history in each channel, message window, and the toolbar command entry box is remembered between sessions.
- Added text to the Connect dialog to make it friendlier and explain the two main ways to connect.
- When creating a plugin template in the Scripting dialog, the created plugin folder is now automatically opened if using Java 6; if using an earlier version, a dialog tells you the create succeeded.
- In single-window mode, the toolbar now resizes automatically as required (when you connect to a server with a long name which wouldn't otherwise fit in the dropdown).
- In various dialogs, labels now line up better on Mac.
- In the Scripting dialog, the code boxes now automatically resize to whatever size is needed to contain your code. Also, window positions for the scripting dialog as a whole and for each individual script editor are now remembered, and I added an extra button to get to scripting help directly from the main scripting tool window.
- The scripting system now supports four low-level server events: disconnected (useful for making reconnect scripts), connection finished (useful for doing stuff on connect), 'send line', and 'receive line'.
- The 'was previously here at' information displayed when a user joins now displays up to the most recent 5 nicknames they used, instead of just the latest one.
- Added /aquit command that quits all servers at once (otherwise works just like /quit).
- The bracket characters ) and ] are now considered to end URLs (so if you put a URL in brackets, it doesn't mistakenly think the ) is part of the URL).
Automatically-reported bugs fixed and confirmed
- Using the Join dialog to directly connect to a server as well as just join the channel (by clicking the Join button when not connected) caused an error if the Connect dialog was currently open. [ConnectTool.java:154]
- When a channel window's text area was very narrow (because of expanding the names list all the way to the left), adding new text lines caused an error; fixed. [TextBlock.java:258, VerticalHolderBlock.java:158]
- When looking at themes preferences, if you made changes to installed themes (added or removed files in the themes folder), it used to cause errors. I have now made it so that if you click a theme it updates the list if required. [ThemesPage.java:134, ThemesPage.java:96]
- When you connect to a server such as irc.ChatRO.ro which puts colour codes into its reported server name, this caused a few cosmetic problems, an error if you later try to delete settings for that server, and even managed to break the preferences file (requiring a manual edit if you were going to get leafChat to start again). I made several changes to address this; first, I fixed the preferences file saving code so that it won't save invalid characters; second I changed it so that the reported server name is stripped of colour codes. I also improved error reporting to make it easier for me to see what's going on in that case. [StaticLayout.java:286]
- On the Settings page of the Connect dialog, when adding or deleting servers, it is possible to have no server selected. In this case, options should be greyed out, but port range was left enabled. Trying to edit it caused an error. [PrefsServerPage.java:905]
- The Connect dialog allowed users to connect to invalid server names, causing unexpected and unhelpful messages. I have changed it to colour the field red (and disable the Connect button) if you type in a dramatically invalid name. [ConnectTool.java:404]
- The code added previously to detect low disk space and display a more helpful error in that situation was not working, and also didn't support non-English operating system installs. I have changed it so that it (a) works at all, and (b) works in all languages when using Java 6+ (earlier Java versions don't include a 'get free disk space' API). [LoggerImp.java:188]
- IRC servers sending invalid RPL_MYINFO message could cause an error. I changed the system to ignore the message if invalid (however, connections to these broken servers might still not work; the reported example looked like a test server anyway). [IRCMsg.java:209]
- If you tried to create a plugin template in a folder which leafChat couldn't write to, this caused an error. I have changed it so it doesn't let you do that (the box shows red if it's an invalid or non-writable folder). [PluginManager.java:527]
- When the server sends unrecognised data, depending on the exact format of the unrecognised data, this could cause an error, now fixed. [IRCMsg.java:55]
- If you typed a very short / command into a DCC chat window (e.g. /x), an error occurred. [DCCChatWindow.java:336]
Automatically-reported bugs possibly fixed, not confirmed
- Renaming the new preferences file sometimes failed on Windows. I can't reproduce this, but it may possibly be caused because the delete of the old file doesn't take effect immediately. I have changed it so that it retries for up to 2 seconds before causing an error. [PreferencesImp.java:259]
- Deleting the old preferences file also sometimes failed on Windows. Again I can't reproduce this. I changed code in one place to make certain leafChat always closes the file (it should, but) and also added retries for up to 2 seconds. Note that this error could also be caused if permissions are incorrect for some reason, or if the user has the file open for manual editing, so there might not be a system problem; but just in case. [PreferencesImp.java:255]
- On some Windows XP systems, trying to open a browser gave an error about permissions on rundll32.exe. I wasn't able to reproduce this, but it shouldn't be using that code on modern Java versions (6+); there was a bug in the Java 6 call, which I have now fixed. [PlatformUtils.java:349]
- On Windows there were still some problems with the scripting system failing to delete old jar files. This is probably because Java's URLClassLoader held the file open and wasn't disposed in time, despite earlier hacks. I have implemented a custom in-memory classloader which definitely does not hold files open, for use with all leafChat plugins. This may increase memory consumption a bit, but I tried to keep that to a minimum. [Script.java:832, Script.java:102]
- A ConcurrentModificationException occurred sometimes while saving preferences. This may be a synchronization error, although it doesn't seem terribly likely; I corrected the error, just in case. [PreferencesImp.java:278, PreferencesImp.java:393]
- One user saw errors when trying to close the error dialog, because the system thought it had already closed it. I can't see how this would happen, but I made it ignore the attempt in that case. The same thing happened when cancelling the Connect dialog. [UIPlugin.java:256, ConnectTool.java:274]
- Under some circumstances (I think this only happens if you manually edit a script file), the scripting system might write out the event priority NORMAL, but will refuse to read in this priority. [ItemEvent.java:52]
Other bugs fixed and confirmed
- IRC colour codes and bold etc. had stopped working due to earlier bugfixes. These should now work again.
- The Connect dialog did not behave correctly when server names had inconsistent case, in several ways: it would end up storing two sets of preferences if you connected to a server in lower-case and it reported its name in upper-case, and also it did not offer to group servers into a network if their reported names had different cases in the network part (undernet.org vs Undernet.org).
- On the Settings page of the Connect dialog, various behaviour was wrong: adding a new server did not select it; deleting a server correctly left the global options selected, but did not make its options editable; the port range could be changed by this page but did not display correctly; some options were not always shown in grey when left at default value.
- Server notices were not detected correctly on some servers (e.g. Undernet), resulting in incorrect formatting.
- User command scripts gave errors when run without a connected server. These will now work (you may have to edit and re-save the script to fix it). Whether they do anything useful or not depends on the script, obviously.
Bugs not fixed in this version
- There were a couple of null-pointer exceptions to do with connecting and disconnecting, but I can't reproduce these nor see what might cause them. I've made changes to code that might make this error visible at an earlier stage so that it can be more easily tracked down. A similar error occurred in joining. [ConnectTool.java:415, ConnectTool.java:668, JoinTool.java:414]
- An error 'No registered MessageOwner provides the message com.leafdigital.ircui.api.IRCActionListMsg' occurred on startup for some user menu scripts, but I can't reproduce this one and (tracing through the code path) don't see how it would happen; the message owner should always have been registered before user scripts are initialised. [MessageManager.java:228]
- There is STILL a bug somewhere when changing UI style from separate-window to single-window mode. I don't know how to reproduce this and can't see how it would happen. (Only happened once, so.) [UISingleton.java:1803]
- A bug occurred when closing a message window ('Temporary mask not present'). I don't see why this should happen, but I did change some code to make it slightly safer. This may or may not have fixed the bug. [WatchListSingleton.java:244]
Bugs that I'm blaming on Java or the operating system
- String.hashCode threw an ArrayIndexOutOfBoundsException, which surely shouldn't be possible. [StyleContext.java:591] (Java 1.5.0_03, Windows XP)
- When choosing a theme to install, an error occurred when instantiating a JFileChooser. The call was in the EventDispatchThread, so I don't see what else could be wrong. [UISingleton.java:1525] (Java 1.6.0_16, Windows XP)
- There was a bug in Apple's Java 6 release on OS X which caused errors when changing dropdown options. Mac users should ensure they have latest system updates, as Apple have since fixed this problem. [PreferencesImp.java:504]
2.21 → 2.21b (Mac only)
This Mac-only update fixes problems for Snow Leopard users.
- No longer requires Rosetta to run.
- If you didn't have Growl installed, an annoying popup appeared; this should now be fixed.
2.2 → 2.21
- The file select dialog, used for importing themes and scripts, didn't work correctly on platforms other than Mac.
- Imported scripts could not be enabled until you edited them.
- Plugin API help had not been rebuilt to take into account the 2.2 changes.
Unresolved bugs
I am still unable to reproduce this error [Script.java:102, Script.java:831] that may occur in Windows when trying to save or delete a script:
leafchat.core.api.GeneralException: Failed to delete C:\Users\Your Username\Application Data\leafChat\scripts\Your Script.leafChatScript.jar
If anyone has a script that causes this error, please send me the script source file.
- Apparently it's possible to get an error when deleting a nickname in the connect settings tab. The detailed message includes the text 'No such hierarchical preference: :defaultnick'. I don't know how this can happen - if anyone knows how to make it happen reliably, please let me know. [PreferencesImp.java:524]
2.1 → 2.2
(Note: 2.2 was never publicly released.)
Minor features
- The topic is now displayed in channel windows. This is wrapping text that shows the full topic and has a 'change' link (if you have operator permission). You can use the link to change the topic via GUI. The server's given limit on topic length is applied.
- Mode display has been improved and made cross-platform (previously the button looked different on each platform). This should ensure it displays correctly.
- Changed the auto-identify string so that it supports ${password} and (optionally) ${nick}, allowing you to use auto-identify on servers that don't support a single /identify-like command. [Any existing settings should be migrated automatically.]
- Windows version now uses a custom launcher program. This ensures that even if a rogue archiving program breaks your system settings with regard to Java .jar files, leafChat will still launch.
- On Windows and Linux, the program icon (in program window and in system tray) has been changed to the current design. These icons are now provided in three sizes so they look better at high desktop resolutions.
- If you connect to the same server more than once, the two connections are now displayed with '1' and '2' after the server details (e.g. in window titles or in the dropdown selector at top).
- In the scripting system, when handling an event, you can now choose the priority - whether it's handled before or after 'normal' processing. This is useful if you want to be able to mark messages as 'handled' and prevent their normal display.
- In the Join window, on the favourite channels page, you can now select to join a channel even if you're not currently connected to that server or network. leafChat will display a confirmation dialog, then connect to the server and join that channel.
- Added a new 'install' button on the themes page which makes it much easier to install a theme.
User-reported bugs fixed and confirmed
- Spaces at the start of a line were not displayed correctly.
- Preferences.xml was not saved in a safe manner. If something went wrong during the save operation (very unlikely but possible if you ran out of memory or disk space), your preferences would be erased.
- The /away command was not correctly marked handled, resulting in two server messages for each time you typed the command. In addition, clicking the icon or typing the command to make yourself un-away after you had been marked automatically away would also result in an extra server message. These could be seen as several copies of the 'you are no longer away' message from the server.
- The 'Close this window automatically' checkbox on spare windows did not work reliably in classic mode. Also, turning the option on didn't close the window, which made it a bit confusing.
- In tab mode, new text appearing made the tab go red - even if it was the current tab.
- In tab mode, clicking on a tab did not focus the text entry box.
- If a window was scrolled to the bottom, and you resized it, it did not remain scrolled to the bottom.
- In the Connect dialog, if you selected a server, then went and deleted that server in the settings page, it remained 'selected' (and clicking connect would connect to it) even though it disappeared.
- In the Connect dialog, behaviour wasn't consistent with regard to colouring: the address line is supposed to be greyed out, indicating that it won't use it, if you select any servers from the list below. If you click in it, it's supposed to go black. This wasn't always happening.
- The 'Address' text in the connect dialog didn't line up with the edit box.
- When you connected to a new server in an existing network, and confirmed that it should be included in that network, the auto-join channels weren't joined.
- The Connect dialog didn't remember its position.
- The 'please donate' nag screen (which appears very infrequently) tells you how many days you've been using the program, but it got this completely wrong (displaying a number in the thousands).
- The 'Text display' Options page kept adding duplicate entries to the Colours list each time you visited the page.
- When copying text from a leafChat window, the timestamps appeared on their own line. (Timestamps should be to the left of the line they apply to, as on screen.)
- When you chose an alternate command character, some characters including \ and $ caused problems, this is now fixed.
- Some startup errors cause a message that tells you the error is logged to the system log. This isn't very helpful so I have made it give the full path of the necessary logfile.
User-reported bugs fixed but not tested
- In Windows the Application Data folder name is language-specific, but leafChat assumed it would be the English version, and consequently failed to load on non-English Windows.
- 'Did you notice this window' message appeared even after you had closed the window in question.
- The 'so-and-so is also in #whatever' informational messages could sometimes display visible XML code like <nick>.
- Sometimes the system created spare windows when it didn't need to (i.e. there was already a window for that server, but it created a new one). This could possibly happen if the window for the server was never active. I fixed this situation, though I'm not quite certain there are now no cases where this will happen, as I was unable to reliably reproduce the problem.
Automatically-reported bugs fixed and confirmed
- In the Settings tab of the Connect dialog, attempting to add a server caused an error if the 'Global settings' entry is currently selected. [PrefsServerPage.java:804]
- DCC chat always failed with error [CallbackHandlerImp.java:67]
- FINALLY found the log error that's been really hard to reproduce and I've given up tracking down for the last three versions. This occurred if the system tried to index a word very shortly after startup, and that word had occurred in a logfile that had just been archived/deleted on startup. [LoggerImp.java:138]
- Searching logs for certain words (that could occur in internal XML tags) such as 'topic' cased errors. [XML.java:97]
- Certain text said by you or others could confuse the URL matcher (the thing that highlights URLs so you can click on them) and cause an error. This was likely to happen when typing in program code that includes 'http' when building a string. [ChatWindow.java:370]
- It's possible to paste the unusual 'Unicode line feed' character into a textbox. This caused an error. [CommandsSingleton.java:101]
- User script error 'unable to run command because server is not available' was incorrectly included in automatic error reports, even though it's a user script error. [?]
- It was possible to open two copies of leafChat at a time. This causes serious problems if you modify the preferences. I've changed it to stop you doing that. [XML.java:467]
Automatically-reported bugs fixed but not tested
- The /who command gave an XML error if a user's mode was &. [XML.java:97]
- When saving a script, an XML error could occur if the system was unable to access a file on www.eclipse.org (e.g. no net connection). [XML.java:97]
- A disk write error (e.g. out of disk space, access permissions) might cause a later unrelated error in log system, fixed (well by 'fixed' I mean, obviously you're still going to get errors if there is no disk space, but it won't create later weird errors as well). [LoggerImp.java:1255]
- Rarely, it was possible to cause some kind of problem when typing text that wraps onto multiple lines (with the little | indicator). [EditBoxImp.java:389]
- Rarely, where the system tried to add text while a new window was just being displayed an error occurred. [WindowImp.java:388]
- Rarely, an error apparently occurred when changing from multi-window to classic interface style. [UISingleton.java:1663]
- Rarely, the text layout system apparently might fail to reflow some text before trying to get its height. [TextBlock.java:258]
- Rarely, an error occurred if you closed a message window. [WatchListSingleton.java:244]
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.