Categories
Technical

Software Updater Module in GCF

GCF is a application development framework for building large applications. Most real world apps out there automatically update themseleves whenever a new version is released by their vendor. We did not want apps developed using GCF to lag behind in this, so since early February this year, we have been working on a new module for GCF called “Software Updater”.

I always wanted to have an updater framework for GCF, but then there were several other things that needed to be completed first. So updater always got postponed. Our company worked on a project called “KDUpdater”, which is currently (or is going to be) a part of KDTools package from KDAB. While working on KDUpdater, I kept telling Till and Mirko (of KDAB) that I wanted to have a updater module for GCF at somepoint. They were very supportive of it too. So much so that when we started working on the Updater module for GCF, they happily gifted some code (like FileDownloaders) from KDUpdater for use within GCF. KDUpdater and GCF have similar backgrounds, but the implementation and architecture are very different.

After about 2 months of development effort, today I saw some success. Before I describe the success itself; let me give a link to the draft documentation of the Updater Module in GCF here. If you update from the SVN today you will find in examples/UpdaterExample some code that will demonstrate the updater in action. I will blog more about this at some point in the near future after we have more test results. We are planning to release a new version of GCF in July 2009, according to the roadmap announced here.

The Software Updater module in GCF is a multi-threaded one. We needed a neat mechanism to serialize log messages from different threads within the updater module into a single log file. Very recently I used log4cxx in a project. Ifound it very interesting and useful. Initially we thought of wrapping log4cxx in Qt for GCF; but then we decided to provide a simple Qt only logger module. Which is where GCF::Logger and friends come into picture. Take a look at this brief doc on the Logger Module in GCF.