Background Channels

I’d worked on this project a while ago, it stalled in Red Hat for various reasons but I continued to toy around with it beyond that because I think it’s really cool and I am pretty sad nothing has happened with it.

The idea of background channels is to give GNOME Desktop users a way to subscribe to a background service. A background service could be a website that periodically releases new background images to a person in a similar way that a weblog provides periodically new entries.

How it works

The background service, (see example background service) runs just like a weblog. Art.gnome.org could provide their own background service just like this example one that would give people all the latest GNOME Backgrounds on their desktop without having to visit their website.

A person who travels to the background service website would see a channel link and click on it to subscribe to the service. This brings up the subscribe dialog like this one below.

When a person chooses to subscribe to a channel they are delivered new backgrounds to their desktop as the channel site updates. In the persons background preferences capplet they see that they are subscribed to a channel and are allowed to remove it if they don’t want to download updates any longer. (You could also just switch to a regular background and leave the channel around).

Things Left

There is probably some UI work that could be done to allow you to choose a specific background from those available from the service. This was never high on my list of finishing right away since the real work is in getting the initial experience done and then later we could work on letting people be more custom about the backgrounds in the channel.

RSS, I’m not an XML head so I just did what I could to make it work. However I’ve discovered a better, simpler way of doing the RSS than in my original example page. Instead of using the seldom seen enclosure tag for the image, which is the right way I believe. You’d probably get the same mileage from using the link tag and less people would have to rework their feedparser to get this thing running.

Code, I’ve coded a lot of this thing up in PyGTK, however I keep getting busy and have to continue to let it rot for a while. But I’ll describe the major parts (since it’s simple anyway) if anyone is interested in picking this up with me.

  • Background Channel RSS Feed
  • Feed Subscribe Dialog
  • Feed Parser Service
  • Background Capplet

Background Channel RSS Feed is a basic RSS feed that I used a pybloxsom blog to generate for me. There is some extra meta-data that you want to provide people about your images like author and description and copyright. I used the native plugin so I could have title=”", author=”", image=”", image_mime_type=”", and so on.

Feed Subscribe Dialog uses the feedparser from Mark Pilgrim to grab a new feed and get the content out of it in order to confirm that the person wants to subscribe.

Feed Parser Service is the most unfinished part of the code. This is supposed to be daemon process that runs in the background and periodically checks the background service site for new backgrounds. It downloads the RSS feed and the backgrounds and stores them locally, it also updates the persons background with the newly downloaded one. During download it displays something like below using egg.trayicon so the person knows the program is active and they are about to get a new background. I created this as a D-BUS service since I wanted to be able to activate it from the background capplet or the subscribe dialog and to make sure that I wouldn’t have multiple copies of the thing running.

Background Capplet was re-written in PyGTK, but I didn’t do too much to change it besides actually using glade and some general HIG cleanups. It stores everything in an XML format that’s close to the original but I avoided the mess with this dead-end wallpaper vs. background term debate and just used background everywhere. It doesn’t import your old backgrounds right now because that’s not a fun feature to add.

Here’s the code that I have so far, bgchannels.tgz. I’d like to get this into CVS sometime, but I wasn’t sure where it could go.

Possible Add-Ons

Torrents? I imagine for a background channel service to really exist with a decent amount of users they’ll want to move to using torrents to distribute their files. Not a big deal anytime soon, but worth thinking about in the future.

UI Love? As I mentioned the background capplet could be changed to better handle channels, however this isn’t the real interesting part so I hope people don’t get stuck on this aspect until we have the rest looking better.

References:

Update: Chris Aillon and I were planning on working more on this at GUADEC if anyone is interested in hacking on it there.


About this entry