New blist saving API

Sadrul Habib Chowdhury imadil at
Sat Jun 6 10:30:07 EDT 2009

* Jan Kaluza had this to say on [06 Jun 2009, 13:30:09 +0200]:
> Hi,
> some days ago, I've written patch (attached to this email) which
> allows applications, which use libpurple, to choose how they want to
> save/load blist data (currently stored in blist.xml). The goal is to
> make it easy to write for example mysql backend for blist storing
> without any change in libpurple code.


> About the patch:
> This patch moves all blist.xml read/write functions from blist.c to
> special file blistsaving.c for backward compatibility and it also
> moves purple_blist_load() and purple_blist_schedule_save() from
> blist.h/blist.c to blistsaving.h/blistsaving.c. It adds new
> PurpleBlistUiOps function called save_node(PurpleBuddyList *blist,
> PurpleBlistNode *node) which is called every time the node is changed
> (it replaces all purple_schedule_save() in blist.c) and it's up to UI
> to save it how it wants. For backward compatibility, there is
> purple_blist_save_callback(PurpleBuddyList *blist, PurpleBlistNode
> *node) defined in blistsaving.h, which can be used for save_node op
> and simply calls purple_schedule_save().

I wouldn't tie this with the UiOps. A completely independant plugin
could, for example, handle the loading of the blist/accounts/prefs etc.

Let's have something like this instead:

	gboolean (*store)(...);
	gboolean (*load)(...);

	gboolean (*save_node)(PurpleBlistNode *);

	gboolean (*save_account)(PurpleAccount *);

	gboolean (*save_int)(const char *, int);

.. and so on and so forth for Status, SavedStatus etc. You get the idea.

I believe InstantBird uses something other than the standard .xml files
libpurple uses for some of the stuff. Folrian, do you have any
suggestions in this regard?

> This patch also contains changes in Pidgin and Finch to work well with
> my new API.

Ideally, I think, it would be better if the change is completely
transparent to the client. So there will be no change *necessary* in
Pidgin or Finch, although some change for enhanced performance should be


More information about the Devel mailing list