I can’t believe it’s been over a month since my last post. So here’s a long one to document some of the latest Banshee happenings.
Banshee Core
- Updated plugin architecture, complete with a plugin management and configuration dialog.
- Sources have been beefed up, have been abstracted from the view, and are available to plugins now.
- Playlists were rewritten, are much faster, and what a shock: reordering works properly now.

Banshee 0.10.3 will ship with the first four official plugins, outlined below. If you are interested in writing plugins, I have written some early documentation as a guide.
DAAP
Banshee has full DAAP client support now, and is implemented entirely as a plugin. DAAP shares will show up as sources, and activating them will initiate a connection (and prompt for a login if necessary). Songs in the share will populate the view, and can be played like any other song, much like any other DAAP client/player.
Playing a song over DAAP works with any media engine however, including GStreamer 0.8, GStreamer 0.10, Helix/RealPlayer, and VLC. I managed this by creating a “proxy” HTTP server that listens for requests and streams a song from a DAAP database over HTTP. I also added a very light weight web-based interface that lets you browse shares and download songs over a web browser… probably not that useful, but cute nonetheless.
Also, if you have the right decoder in GStreamer, you can actually burn a CD directly from a DAAP share. The song is streamed from the DAAP server, proxied over HTTP to GStreamer, and transcoded on the fly.
I should have server support in HEAD today or tomorrow. And lastly, a big thanks to snorp for his awesome work on daap-sharp.

It’s a little hard to show a screenshot of a DAAP client…
Automated Cover Art Fetching and Metadata Supplementing
This has been a highly requested feature, and is now implemented as a plugin. If enabled, the plugin will scan your library and search for cover art and supplementary metadata using MusicBrainz. When new tracks are added to the library, they are added to the processing queue for scanning.
The plugin has three modes:
- Fetch covers only: this mode is the fastest as it will only perform one lookup per album. However, it does not attempt to correct or supplement metadata
- Fetch covers and fill in missing metadata: This will fetch covers on a track-by-track basis, so it is much slower than the first method, but it will also fill in missing fields (for instance, you are missing track names, counts, etc.)
- Fetch covers and overwrite existing metadata: Same as the previous, but it will overwrite all fields with metadata returned from the server. While this is excellent most of the time, there is a chance that the server will return an inaccurate result, which can totally screw up your tracks.
The default mode is to fetch only cover art.
Audioscrobbler
A big thanks to toshok, who a few weeks ago wrote basic Audioscrobbler support, which was abstracted enough to finally make me bite the bullet and add proper plugin support. The timing was perfect as I had already been reorganizing much of the codebase. After a light refactor on the plugin entry point and some cooking of a basic account/configuration dialog, we have Audioscrobbler support! Also a big thanks to Ruben Vermeersch, who submitted a nice queue saving/restoring patch, so it works in offline (or broken server) mode too.

File System Monitoring
A few months ago, Doğacan Güney wrote file system monitoring for Banshee, which adds new songs to the library that are added to the music directory and removes songs from the library that are removed from the file system. I have refactored this code a bit to take advantage of new library features in the core, and work with the new plugin system. It tries to use Inotify first, and then falls back on FAM.
Other non-plugin stuff
About a month ago I added some gedit-esq notification for Audio CD metadata searching. It reports the status of the lookup, whether or not a lookup was possible or failed, or if you are offline (as reported by NetworkManager, if available). If the lookup failed, timed out, etc, there is an option to manually refresh. However, it will automatically refresh if NetworkManager reports a connection is available.

Finally, I added a nice “tooltip” to the tray icon. I’ll probably be flamed for it though. Say what you will, I find it incredibly useful.

If you want more candy, view the scratch pad of recent screenshots.
So that’s the update for now… I will make the 0.10.3 release by the end of this week. Oh yeah, EXCELLENT news about FC5+Mono!
[1] Quote from Brad. It also needs to be available with the almighty lever.