As GSoC is officially starting yesterday and I made a promess to finish what I begun almost six months ago (sorry about taking so long), last week I commited the last parts of my branch. So, in the end I rewrote the configuration system of Conduit, based on a previous limited implementation that I met when working at Summer of Code 2008. If anyone wants to know if Summer of Code works, it does. I would never knew so much about Conduit had I never entered Summer of Code last year.
Why is the configuration system so important? Well, every dataprovider needs to be configured. What we do now, is that we open a configuration dialog for the user, with the standard configuration widgets: text entries, drop-boxes, item-lists, etc, and, of course, an OK and Cancel button. The problem was that every dataprovider had its own Gtk and Glade code, meaning a lot of duplicate code and usually confusing interfaces, not HIG-compliant at all. On top of that, every dataprovider showed their own configuration dialog, so we couldnt do anything else then displaying the dialog. Fixing all of this meant fixing each one of them.
I started with the idea that in order to be more useful to outside applications, we had to be more flexible and we had to fix our problems once and for all in all configuration dialogs. I knew I would have to change every dataprovider we ship, so I wanted to do it only once. In the end I created a wrapper to Gtk, letting dataproviders only deal with what matter to them. Because we have a limited set of widgets, we can have a much more useful API then dealing with Gtk directly. We also get some benefits:
- Fixing code in one place fixes it for all dataproviders.
- Being HIG compliant is much easier.
- We could change from Gtk to something else in the future much more quickly.
- We can handle configuration dialogs on clients in a much better way (think about embedding an iPod sync configuration into Rhythmbox).
- We can do something else then dialogs for configuration. Think about a sidebar, a la Glade.
It was explicitely designed for the last two points, because my first work at Conduit was the iPod module and having the same iTunes experience of syncing it was one of the main goals.
So, I wished to show a screenshot of how it looked before, but it seems we fixed so much of it lately (or we screwed up so much before) I can’t run older version. Anyway, here is a screenshot of the new code:
Of course, we changed a lot of code with the last commits and not without bugs. Our UI is still quite bad, but hopefully we can improve it soon.
I should start thinking about this year’s Summer of Code now. Hopefully we will have something really good at the end of the summer (my winter actually).
Hi, nice work, but I think you should try to experiment with some GLOBAL ACCOUNTS in GNOME, so other application can use the same information (IM, Twitter, F-spot, Conduit,…..). Many users, including me, are very lazy to enter same information twice if not more.
GLOBAL ACCOUNTS should be in System->Preferences (possibly in About Me). Something like Mozilla Password Manger? Stored in gnome keyring? Tagging?
Hi, thanks. We should indeed implement the Global Accounts in Gnome, but I dont know how that API should be. I have some things I want to implement in Conduit that would improve this situation and then if it works, we could push it into a public API.
I’ve bitched about this before in my blog … several times, in fact. Enter the information once in About Me and be done with it. It can be done using Gnome-Keyring to store the info, and letting the user authorize applications to use the _very sensitive_ information.
http://library.gnome.org/devel/gnome-keyring/stable/gnome-keyring-gnome-keyring-password.html#gnome-keyring-store-password
Looks quite nice :), a couple of comments though, to be more HIG compliant, you should set the has-separator property in the GtkDialog to FALSE, and just hide the help button if there is no help, since it’s unlikely that the button will become sensitive at runtime.
Hi, thanks. I’ll fix that. If there is any other HIG problem, I’d love to hear about it.
didn’t gnome-control-center have some kind of “about-me” capplet? but still it’s not widely used, if it still exists…
Not 100% sure if HIG says anything explicitely about this… but rather than Cancel & OK, I would select Restore & Close.
What are you canceling or okiing there? Most configuration dialogs on GNOME are instant apply (unless some really unavoidable performance/security issue requires explicit save).
🙂
I thought about this when designing it, for some reason I decided not to have it Instant Apply, that is the reason for the Cancel / OK. But I might change that in the future. This first release is really about getting the old behaviour working, so now we can experiment with it.
The system is very flexible, so having Restore / Close buttons would be quite easy to do.
Me and a few clever guys are working on an iPhone/iPod Touch module for Conduit as the protocol to synchronize calendars, contacts, bookmarks, notes (only OS 3.0+) and mail accounts is known now and things like photos are easy to add aswell later.
You might have a look here: http://cgit.sukimashita.com/python-iphonesync.git/
We’re working on HEAD of course.
That is terrific. I have an iPhone myself, and it’s a bitch to sync it (I use a Windows VM to open iTunes). I recently tried iFuse, but I had problems compiling it. I’d be willing to take the process of including that module into Conduit if it proves to be stable.
0 Pingbacks