A lot has been going on in the world of Folks lately, so it's time for another update. There have been a ton of fixes and clean-ups in the code (including some well-documented API breaks). We're narrowing down on another set of API breaks in our unstable 0.5.x branch before starting the stable 0.6.x branch. Our goal is to have very few (if any) API breaks after that.
Perhaps more importantly, we've added a lot of great features in the last few months. Read on for more (heavily-summarized) details.
I'd like to thank Intel for both sponsoring most of this work and understanding open source development. We were able to work in the open very early on and keeping things upstream was a goal, not a challenge. All the work is LGPL 2 or 2.1 and none of it requires copyright assignment.
One big focus in 0.4.0 was adding a number of address-book-type fields, like:
• Role (within an Organization)
• Postal address
In all, contacts from Folks support most of the generally-useful fields you'd find in a typical address book.
The remaining features are new as of version 0.5.0.
A design goal of Folks, since the beginning, has been to simplify the way writes happen. There is, at most, one (primary) backend which provides contact linking hints to the aggregator and which stores address-book-like contacts (which are generally fully-writable for all supported fields). This has historically been (hard-coded as) our simple key-file backend but it is now configurable.
The new Tracker backend acts as an address book and supports both reads and writes. Creating this help fill out our support for local, address-book-like contacts, so that portion of Folks is in decent shape now. It can be set as the primary backend, though the default remains the key-file backend. My colleague, Raúl, did a great job putting this and a sizable set of tests together.
We've also added a backend for libsocialweb which lets us expose contacts from various web services through Folks. This required a little work on libsocialweb itself to add a Contacts interface and implement it for a handful of services (so far, Facebook, Flickr, Twitter, and Last.FM). Alban picked up on Marco's work in this area, added the last three services and implemented the newer Folks interfaces for the libsocialweb backend.
I think this area is especially exciting, since it lets us include contacts' details from a very wide range of services in the future, just by adding more services to libsocialweb.
A long-requested feature has been the ability to hint matches between various contacts within Folks (since it's tedious to have to manually discover them all yourself). This clears the way for us to make linking nicer in Empathy.
In the future, we'll be looking into making this process even easier.
Our handy folks-inspect utility has gotten a bit of attention to support the fields added since 0.4.0, making it even more useful for debugging.
I've followed up on Marco's initial QtContacts bindings for Folks (QtFolks) by adding additional fields and supporting contact adds, edits, and removes. The git respository is here and release tarballs here (for now).
I hope we can get our KDE-using friends interested in Folks now that we've got some decent Qt bindings!
The moment everyone has been waiting for:
(In case your browser can't play WebM: download here; YouTube version here)
The demos in the video are done through the QtFolks demo program because Empathy filters out non-IM contacts (at least as of this writing). But we'll certainly be supporting all Folks contacts in the Gnome 3.2 contacts features.
New features in Folks 0.4/0.5
April 25th, 2011