Shape of things to come
I just committed the first version of a working GObject binding to the Conduit DBus API. You can check out an example test program here .
Contrived Example-like Code
/* The running conduit app/daemon */
ConduitGApplication *application = conduit_g_application_new ();
/* Get two dataproviders, a datasource and datasink */
ConduitGDataprovider *source = conduit_g_application_get_dataprovider(application, "TestSource");
ConduitGDataprovider *sink = conduit_g_application_get_dataprovider(application, "TestSink");
/* Put them in a conduit so we can sync them */
ConduitGConduit *conduit = conduit_g_application_build_conduit(application,source,sink);
g_signal_connect (conduit, "sync-progress", (GCallback) _sync_progress_cb, NULL);
g_signal_connect (conduit, "sync-completed", (GCallback) _sync_completed_cb, NULL);
g_signal_connect (conduit, "sync-conflict", (GCallback) _sync_conflict_cb, NULL);
/* Add it to the GUI so the user can see it (optional) */
ConduitGSyncset *gui_syncset = conduit_g_syncset_new(application, "/syncset/gui");
conduit_g_syncset_add_conduit(gui_syncset, conduit);
/* Perform the sync (boom!) */
conduit_g_conduit_sync(conduit);
g_main_loop_run (mainloop);
Conclusion
A GObject binding to the Conduit DBus API means you can synchronize your application data, from within your application, in very few lines of code;
Your application is not going to crash
Your application is not going to hang or block the UI
The difficult sync logic for interfacing with various other places can be written in Python (faster, more productive, most web-services get python bindings first), live in the Conduit source tree, and immediately be available to all other applications which use Conduit to sync stuff.
In SVN NOW!
Hat-tip to Mikkel Kamstrup Erlandsen whose Xesam Glib bindings provided a useful starting point, and saved me much autotools pain.
Yes, the names are a bit long.Who has a better idea for the prefix, gcond_ perhaps?
Who wants to help me integrate this into;
Cheese
Evolution
GNOME Phone Manager
$YOUR_APP_HERE