Earlier today I posted the following to the Aggie development list
As some of you may have noticed, Aggie has been updated twice during this weekend. This mail describes the changes.
Extensible RSS components
The most significant change is difficult to observer: Aggie's RSS parser has been modified so that it becomes extensible. The parser regards RSS feeds as a container ("channel") that holds a sequence of information pieces ("item"). While both the container and the items it contains have three mandatory (perhaps empty) properties -- title, link, and description -- each may also have any number of additional properties that the parser can now hold.
Moreover, the parser now supports defining new channel and item properties at run-time. (The necessary code to read external configuration files into the parser is not yet done, but all the necessary pieces are in place.) This means that adding support for new elements has become quite simple. You only need to define the namespace the elements appear in, what variants of RSS they are relevant to, and how they are to be taken from the RSS document into the aggregated output that the parser spits out.
(For those with source access, check out the static RssDocument constructor, which I intend to replace with a configuration file shortly.)
Support for output of arbitrary elements is already partially implemented. If you're using the HTML output of Aggie, simply modify the skin template to include any property that is found in the parser's aggregated output.
(If you have not updated your skin template in a long while, I advise you to do so now -- I've checked-in a version that displays all the comments that Aggie has to say about non-well-formed feeds, as well as added support for dc:date elements.)
(Also, if you are a template writer yourself, please have a look at what elements Aggie may put into the aggregated XML document and decide if you want the new elements to appear in your output.)
Email and short-notes channels
During the last few weeks we see a growth in use of RSS feeds to publish comments, pingbacks, and trackbacks to a particular feed. If you read Aggie's email output (like me), this means you now get lots of "short-notes" messages which are difficult to fathom because they hold no context information.
To fix this, I've finally caved and added support in the mailer for aggregating several items in a single mail message. (Yes, the ultimate solution would actually be to provide an external XSLT transform, like what we do with HTML, but we're not there yet.)
The mailer can now be instructed to do one of the following:
- Put each item in its own mail message
- Put all items from a single channel in one mail message
- Group all items of a channel with the same title in one mail message
Additionally, the mailer can reverse the order of items (useful for upside-down feeds).
In principle, we would like this to be per-channel configuration option. However, Aggie currently has no way (other than by twicking the URL, an obvious hack) to maintain per-channel configuration information. We'll need to work out an extension model for the OPML with AmphetaDesk (and perhaps UserLand?) Until we do, however, controlling this aspect of the mailer is a global setting.
The little things that count
These modifications provided a good opportunity to make several bug fixes that mainly affect the "polish" of Aggie. For example, we now have better UX when a user attempts to add a channel to Aggie and something goes wrong.
A plea for testing
There's no chance all these changes took place without breaking something. While I've tried everything on my test feeds, and am constantly dog-fooding any change I make, I'm sure there are problems I've not caught. Please install the latest build and let me know if you see something wrong.
(For those who have no source access, or who do not want to build Aggie, I'd be happy to provide the necessary binaries and configuration files. Note that all changes are completely backward-compatible with respects to your configuration files, so you won't lose anything if you decide to switch back later.)