[GSoC] Quail Summary

Phil Hannent phil at hannent.co.uk
Thu Sep 26 05:15:35 EDT 2013

This is a reflection on my Google Summer of Code creating Quail
Instant Messenger during the summer of 2013. Quail utilises C++ and
the Qt toolkit to create a similar application to Pidgin. With a view
that it would be available on more platforms since Qt is available on
a wider selection of devices than that of GTK.

For the most part I have been able to create a basic messaging client
which functions in a similar way to Pidgin. I have a foundation on
which to add features and port to other platforms, much of the code is
taking cross-platform into consideration and I don’t anticipate many
issues porting over. I had wanted to get a Mac and Android build done,
however Windows was more of a priority for me.

During the course of summer I have met challenges that I have faced have been:

1, Getting to grips with learning the important differences between C and C++,
2, Getting to understand Pidgins GTK code and how that converts into
Quails Qt code, an example of this is purples signaling system which
is akin to:

    purple_signal_connect(purple_connections_get_handle(), "signed-on",
                      blist->ui_data, PURPLE_CALLBACK(signedOnCb), blist);

As opposed to Qt's connect() function:

connect(this, SIGNAL(itemExpanded(QTreeWidgetItem *)),
          this, SLOT(nodeExpandedSlot(QTreeWidgetItem *)));

Certain things were new to me, for example I had never need to create
a tree view with icons to the left and to the right (status to the
left and buddy icon to the right) before in Qt and its great to break
new ground like that.

The largest chunk of my time has been on windows, the eventloop which
I was anticipating implementing using QAbstractEventDispatcher turned
out to be a nightmare to code. Very few people have ever implemented
such a thing and examples are very thin on the ground. I have been
getting advice from the Qt developers but since windows (whilst
running) is still not stable I need to spend more time on it before I
stamp that as complete. The code requires that I create a system that
accepts both Windows events (which are complex) and Glib events which
are more straightforward. Combining these two systems will provide an
excellent template for others in the future, but I think I am missing
one or two code paths to make it complete. I am going to continue this
until its done.

On reflection I’ve had a great learning experience, I have always been
shy of writing open source code because the standard of acceptable
code is so high. I don’t believe that Quail is ready for others to
judge me on as its still a work in progress for me. Moving forward I
plan on improving Quail, so that it comes on par with Pidgin and Finch
over the next year. I hope to also contribute to libpurple and work
towards Pidgin developer status, which is a qualification in quality
and commitment in itself.


My project to create Quail a Qt/C++ based Instant Messaging client
using libpurple has been so beneficial to me and my learning, I have
delved into areas I’ve been near before. I’ve gotten over worries
about contributing to open source and realised a passion for
contributing something in my own way. I plan to keep on developing the
software and in so doing improve my coding ability.

I am so grateful for being accepted by the project to be apart of the
Google Summer of Code that I can only recommend it to all programming
students. A big thank you to the Pidgin developers especially my
mentor QuLogic and to Google for running the program. Without the
friendly and encouraging environment of Pidgin my work wouldn’t be

More information about the Devel mailing list