After a couple of weeks where I was really busy (FOSDEM included, BTW for those who don’t know me, I’m the blonde guy on the left) I finally managed yesterday to do the 0.0.8 pre-release of Tinymail. Read the announcement for a complete list of new features but I’d like to highlight these ones:
- .NET bindings
- Improved the cancellation support: cancel retrieval of messages, cancel retrieval of headers…
- Error handling refactoring
- Several bug fixes here and there (specially a very important one in the POP backend)
So, if you want to try the new features of tinymail just download the latest release of Modest. We didn’t release a new version last week because some of us were at FOSDEM, but you can now get the latest code. Things that you’d appreciate
- Fixed some crashes here and there
- Lots of tiny UI improvements: error messages, localization, performance
- Improved the support for non-Latin emails (mainly Chinese support)
- First partial implementation of an account setup dialog for the GNOME version
In general, people are telling us that Modest is becoming quite stable, so just try it and tell us what you think. Oh I forgot a couple of mandatory screenshots, this is how Modest looks like in my scratchbox


and the GNOME version as well
we have been interviewed by a private Spanish TV channel yesterday. They’re talking about benefits that companies offer to their employees, and Igalia has a lot
.
Check out the video (only in Spanish, hope that somebody will provide subtitles)
A year ago more or less, I started to work on a project called Modest that aimed to become the e-mail client for Nokia Internet Tables like the N800/N810. Other people from Igalia joined the team later like Dape, Berto, Felipe, Javier or Juanjo, and some of them are still working on the project. And yesterday the first Modest beta release was announced. I’d like to thank all of them for their effort and their commitment.
More or less at the same time I began to contribute to the Tinymail project leaded by the unique Philip van Hoof. Thank you Philip for providing us the APIs we wanted, for reviewing our patches and for your long e-mails plenty full of decorators, bodystructures, IMAP IDLEs and so on
And finally I’d like to thank Dirk-Jan because it’s a pleasure to work with you.
Talking a little bit about Modest, these are the features I specially like
- Modest is asynchronous: this means that the UI does not block while network operations are taking place, the UI is fully responsive while Tinymail performs the network stuff in the background
- Easy Setup: as Dirk said once, Modest is for humans. Just tell Modest where you are, your ISP and provide an username and a password and Modest will do all the hard server configuration stuff for you
- Connection specific SMTPs: when you’re at work, you access the Internet through your ultra-high secured intranet which allows you to do almost anything. You can only send e-mails using your company’s SMTP for example. But when you’re at home you want to send it through your ISP’s SMTP. Do you need two configurations? No, Modest can detect the network where you are connected to and use the proper SMTP for you with almost zero configuration.
- In Rome do as Romans, so if you’re human use your thumbs don’t use stylus!
- And finally Modest can be used as a desktop e-mail client as well. I don’t recommend it to you though right now, because it’s a little bit unmaintained but it’s been designed to be used in both Hildon and GNOME desktops, so be patient (and send us your patches)
So stay tuned, more about Modest is coming soon. BTW download and try it!
My mate Berto found the ultimate option. It’s unbelievable that nobody realized that before, but fixing all the bugs of your application is quite easy. Just take a look at this
While hacking a little bit with GConf I found what IMHO is an undesirable behaviour of GConf. I think most of developers will agree because you don’t want your application to run in a different way than the one you expected when you designed it. And this happens in the following situation:
I set up a GConfClient to listen to changes in keys under a specific directory. I wrote also a handler for this GConf notifications hoping that I’ll get every change in those keys (the API doc literally says “Any changes to keys below this directory will cause the “value_changed” signal to be emitted”). So I relied in this GConf notification handler some important code of my application. But, while executing the application I realized that I was not getting some notifications even tough I was completely sure that I was setting a new value in the GConf key. So, I had to take a deeper look…
I verified that the GConf server was issuing a notification for every change I made, so the problem should be in the client. Looking at the GConfClient code I found the following in the notify_from_server_callback function:
changed = gconf_client_cache (client, FALSE, entry, TRUE);
if (!changed)
return; /* don't do the notify */
gconf_client_queue_notify (client, entry->key);
What? This means that I won’t get notifications if the key is already updated in the client cache? What’s the reason for such a behaviour? I don’t think this is what a developer expects, specially for a system that uses idles for notifications (you could never be sure when you’ll get it), because it could cause things like the one that was happening to me:
- As a response to a user action I was setting a new value to a GConf key
- Before the GConfServer notified the GConfClient, there was some other code that was trying to get the new value of the same key
- GConf cached the new value in the client while doing the get operation
- The GConfClient received the GConfServer notification, but was not issuing a notification because the value was already updated
- I was scratching my head trying to figure out what the hell was happening …
So, IMHO there are two possibilities
- Always notify
- Write in bold 46-point sized font that sometimes you could not get notifications because of that
Anyway, it’s always good to look into the guts of the software you use.
This will be probably my first post at planet GNOME. I’d like to thank Jeff for giving me a place between all you guys.
My name is Sergio Villar SenĂn. I’ve been using free software for 7 years, and I’m a free software developer since 2003 when I joined Igalia. I started there with project Fisterra, a free software framework for developing enterprise applications.
I’ve been (and I am) involved also in some projects related to Maemo technologies. Recently I’ve been contributing to the great tinymail framework started by Philip.
Now that the GUADEC is (almost) over I’d like to say that the keynotes are amazing but, what I really enjoyed this year, were the lightning talks. They were all very interesting, all the speakers did a great job, and the rhythm was really frenetic. Furthermore, the lightning talks have a great advantage, if you don’t like one of them, don’t worry, you’ll get the next one in a couple of minutes
. I’d really like to see a lightning session each day in the next GUADEC.
Update: does anybody know why I get this awful footer to my post? It does not happen for example here.
Today it’s a great day for Igalia, for tinymail and for the free software in the whole. Today an Igalian made a commit to the tinymail repository, this commit wouldn’t be so important if it weren’t done by a girl.
Her name is Antia Puentes and after drawing several awesome class diagrams (see here and here) with all the main interfaces of tinymail, she sent today her first patch to the source code. In particular she developed a functional test that allows you to delete folders of a mail account. If you want to test if (it’s not currently upstream, but I think tomorrow it will be) it’s better to modify first the mail account used by the test, otherwise Philip will go after you until death
. It’s as easy as modify some lines of the test/shared/account-store.c file that configures the mail account:
tny_account_set_proto (account, “imap”);
tny_account_set_name (account, “imap2.tinymail.org”);
tny_account_set_user (account, “tnytest”);
tny_account_set_hostname (account, “imap2.tinymail.org”);
tny_account_set_id (account, “tnytest@imap1.tinymail.org”);
The important lines are the ones that set the hostname, the user, and the proto. Furthermore, you have to modify the function that gets the password at the beginning of the same file, per_account_get_pass_func. You only have to change the string returned by the else.
So Antia, welcome to the community, I hope that you will feel comfortable despite entering a men’s world, and I also help that you’ll contribute to the GNOME’s women invasion
.
These last two days I have been playing a lot with mailbox moving/copying. There were some unimplemented features in tinymail that I needed so I had to do them. Basically the list of changes I made are
- Improved the folder changes notification when the mailboxes are transferred
- Fixed a bug in the tree model that stores mailboxes when deleting a mailbox
- Fixed an issue in the connection process
- Added some error handling to the folder loading process
- And the one that Phillip likes more
, added a functional test to check mail folder transfers
A lot of work, I sweat, but very useful I believe. There is still one issue that I found remaining, this one, but I think Phillip will fix it very soon.
After the previous post, I improved a little bit the drag and drop example. This time, I added another three view at the right. Now you can drag a row in the right tree view to a node of the left tree view.

Another improvements is the support of multiple actions, I mean, the drag & drop can now move a row (as in the first version) or copy it (just press the Control key before dropping a row). It’s easy to see the different behaviours if you drag and drop nodes of the left tree view. On the other hand if you drag a row of the right tree view to a node of the left one, the row of the left will be removed except if you perform a copy (pressing Control button).
You can download it here.
Enjoy.
I’ve recently been adding drag and drop support to a widget that is basically a GtkTreeView with an associated GtkTreeModelSort. The gtk+ drag and drop API is weird, there are just few samples and is not very well documented.
Furthermore, the GtkTreeView has its own drag and drop functions so my mind was a mess.Then after some study I finally got an idea about all this stuff and decided to code a sample where to test the things I learned. This example is available here for you.
Hope this could help somebody.
BTW, I changed the look of my blog, I like this kind of changes so don’t expect this to be the last one