Sunday, October 02, 2005
Send functionality added, and the completion of the persistence code:Something of a milestone was reached today, in that Platemail actually graduated into a functional email client. You can now send as well as receive messages, and the persistence is now fully implemented, so I no longer have to recreate all my settings each time I start Platemail.
The basic persistence code turned out to be fairly straightforward, with the addition of a new interface for each of the persistent classes to implement, and a registry class to manage all the information. Some complications arose with the need to handle dependencies between persistent objects, but that's now taken care of too. The only thing lacking in this area now is support for circular dependencies, but I'll add that when I'm convinced it's necessary.
Although there's still a lot of work to be done with the GUI, the console interface is taking shape quite nicely, and I'm considering putting a release up on the website. I had originally planned to wait until both interfaces were up to scratch, but it's kind of tempting to get something out there earlier rather than later. On the other hand, I'm not that keen on releasing something with so many shortcomings, so I'll have to think about it more.
posted by Neil Campbell 8:16 PM
Thursday, September 22, 2005
IMAP, finally:It has been quite a while coming, but this week I merged my IMAP code back into the main Platemail trunk. I was pleasantly surprised to learn that in implementing the IMAP support I hadn't even broken the POP3 code, which I don't think has been tested for almost a year. I've almost finished adding support for persistence now, so that things like mail account settings survive across Platemail sessions.
Although all of this is only running properly with the console interface (I haven't updated the GUI code lately) it is starting to behave something like a proper email client. Admittedly, you still can't send email, but I'm hoping that adding that should be fairly trivial.
Looking forward a bit, I had a play with some scripting engines that can be embedded into a Java app; in particular Jython and Jakarta BSF. The plan is to add support for plugins at various stages (message filtering, sorting, automated replies and forwarding, etc), and these plugins could take the form of simple scripts or full Java tools. This should afford a fair amount of power to extend Platemail in various different ways while keeping the core fairly simple. This is very much the approach that applications like jEdit take, and it seems to work pretty well.
posted by Neil Campbell 8:56 PM
Monday, August 08, 2005
More on IMAP:The IMAP support in Platemail has taken another step forward lately, principally regarding the way messages are fetched. Previously, Platemail dumbly downloaded the whole message, with the body, attachments and all, whenever the server was inspected. Apart from being stupid, and somewhat against the IMAP model, this caused the flags of all messages to be set to SEEN, as Javamail sets this flag whenever the body is downloaded.
Although I don't quite agree with Javamail on whether its behaviour there is correct, it does make sense to download the message bodies lazily, and so that's what Platemail now does.
The next piece of work is to finalise the way Platemail responds to the events that Javamail fires when messages are added, changed, deleted and so on, because at the moment the folders only stay properly in sync when the remote folder is closed and reopened, which is clearly a wasteful way of doing it.
posted by Neil Campbell 10:34 PM
Monday, May 02, 2005
IMAP support:As it's been a bank holiday weekend, I've had a little time to work on Platemail's still-unfinished IMAP support. I've been able to resolve a few of the problems related to managing numbers of connections, so I no longer see repeated exceptions when Platemail tries to sync with lots of IMAP folders at once. Although the solution isn't yet perfect, it does provide a workaround for the connection limiting that my ISP has enforced.
That done, Platemail is now able to create an IMAP account and keep it in sync with the server in the face of new messages, and messages being removed. There are still a few holes in there, and there isn't yet a way of syncing back local changes to the server (ie. deleting local mails and have the server remove them), but hopefully these can be fairly easily sorted in the next few weeks.
I've also started to tidy up the way Platemail is launched, so there is now a PlatemailLauncher class which is invoked irrespective of the required user interface. This handles command line options (using the Java port of Gnu Getopt), and then creates the appropriate interface. This seems like a much cleaner way of doing it.
posted by Neil Campbell 10:07 PM
Saturday, March 26, 2005
Back to work:In keeping with the progress of the project to date, I've taken yet another lengthy enforced break from Platemail development, this time due to high-pressure deadlines at work and the resulting RSI.
Now things are starting to settle down again, at least for the time being, I'm beginning to get back to Platemail. The main focus is still the basic IMAP support, which is starting to come together - the bug I thought I was fighting when last I did some Platemail hacking turns out not to be a bug, and was simply a hard concurrent connection limit imposed by my service providers. Now that I can at least work around this issue, I can look at bringing up the rest of the IMAP functionality, and hopefully get that committed to the main code base before too long.
Meanwhile, to ease myself back into Java development, I've been putting together a plugin for the excellent jEdit editor, to provide a better directory search mechanism, something that find myself almost constantly wishing for when I'm at work. If I manage to get it working, I'll put it up on the website for general consumption.
posted by Neil Campbell 2:39 PM