New blist saving API

Sadrul Habib Chowdhury imadil at gmail.com
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.

Cool!

> 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:

store.c:
PurpleStore
{
	gboolean (*store)(...);
	gboolean (*load)(...);
};

store/blist.c:
PurpleStoreBlist
{
	PurpleStore;
	gboolean (*save_node)(PurpleBlistNode *);
};

store/account.c:
PurpleStoreAccount
{
	PurpleStore;
	gboolean (*save_account)(PurpleAccount *);
};

store/prefs.c:
PurpleStorePrefs
{
	PurpleStore;
	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
OK.

Sadrul




More information about the Devel mailing list