Libpurple API changes for better Gadu-Gadu support

Libpurple is a library with a very stable API. That’s convenient for users, because most of old plugins works with new versions of Pidgin, but it’s also restrictive. That means, Pidgin cannot evolve as much as other messengers to support well new protocol features.. Fortunately, there is Pidgin/Libpurple 3.0.0 coming, so we may change what we want here.

Indeed, recently I was working on libpurple API in areas, where Gadu-Gadu had too little air. For example, I have implemented validation of usernames: GG service uses only numerical identifiers, while Pidgin allowed to type in anything. Now, dialogs like buddy adding or account setup won’t accept invalid GG numbers.

I’ve also implemented setting of own avatars, so avatar support is complete now. Unfortunately, it uses old protocol, because new, GG11 protocol for avatars requires (just like file transfer) IMToken value, which isn’t accessible for current libgadu.

Among cosmetic fixes, handling of users, that blocks us is finally done well. Now it displays denied icon on the side of buddy alias. Previously, it was indicated by invisible status. There are also warnings, when we try to send a message to such person.

Another new libpurple feature was validation for dialogs created with Request API. Now, new IM dialog won’t allow to type in invalid username, Gadu-Gadu account registration dialog won’t flicker when filled in improperly.

Initial multilogon support is already implemented. Messages are synchronized between sessions and issues related to own status are fixed (#14776). There is still need for possibility to view and eventually close other sesions and (optional) status synchronization.

Code related to own status was refactored, so few bugs related to it was fixed.

One thought on “Libpurple API changes for better Gadu-Gadu support

  1. Hi ,
    whether there is any libpurple API which will retrieve the non-buddy presence status ?
    – Raju

Leave a Reply

Your email address will not be published. Required fields are marked *