[Pidgin] #1725: proposed patch to prevent buddy list from disappearing

Pidgin trac at pidgin.im
Fri Jun 15 19:12:51 EDT 2007


#1725: proposed patch to prevent buddy list from disappearing
-----------------------+----------------------------------------------------
 Reporter:  truxton    |       Type:  defect
   Status:  new        |   Priority:  minor 
Component:  libpurple  |    Version:  2.0.1 
 Keywords:             |    Pending:  0     
-----------------------+----------------------------------------------------
 Hi,

 I just started using Pidgin, and my workplace has a jabber server.  There
 are some server-defined groups, such as the
 list of all engineers.  When I try to create a special buddy
 list, and move/copy some of the engineers to my buddy list,
 it looks good, and when I exit pidgin, the blist.xml has
 my buddy list correct.

 However when I reconnect, the server sends the whole engineering list
 again, and jabber_roster_parse() in roster.c blows away my existing list
 of buddies.  I debugged through the code, and found out it was because the
 contact exists in multiple groups.

 I made this change to add_purple_buddies_to_groups() in
 libpurple/protocols/jabber/roster.c and now it works for me.  Please
 consider this patch :

 --- ../../pidgin-2.0.1/libpurple/protocols/jabber/roster.c      Fri May 25
 09:28:21 2007
 +++ protocols/jabber/roster.c   Fri Jun 15 16:11:05 2007
 @@ -75,22 +75,22 @@
         while(buddies) {
                 PurpleBuddy *b = buddies->data;
                 PurpleGroup *g = purple_buddy_get_group(b);
 +               const char *servernick;

                 buddies = g_slist_remove(buddies, b);

 -               if((l = g_slist_find_custom(g2, g->name,
 (GCompareFunc)strcmp))) {
 -                       const char *servernick;
 -
 -                       if((servernick =
 purple_blist_node_get_string((PurpleBlistNode*)b, "servernick")))
 -                               serv_got_alias(js->gc, jid, servernick);
 +                if((servernick =
 purple_blist_node_get_string((PurpleBlistNode*)b, "servernick")))
 +                  serv_got_alias(js->gc, jid, servernick);
 +
 +                if(alias && (!b->alias || strcmp(b->alias, alias)))
 +                  purple_blist_alias_buddy(b, alias);

 -                       if(alias && (!b->alias || strcmp(b->alias,
 alias)))
 -                               purple_blist_alias_buddy(b, alias);
 +               if((l = g_slist_find_custom(g2, g->name,
 (GCompareFunc)strcmp))) {
                         g_free(l->data);
                         g2 = g_slist_delete_link(g2, l);
 -               } else {
 -                       purple_blist_remove_buddy(b);
                 }
 +
 +                // purple_blist_remove_buddy(b);
         }


 Thanks,

 -Truxton

-- 
Ticket URL: <http://developer.pidgin.im/ticket/1725>
Pidgin <http://pidgin.im>
Pidgin


More information about the Tracker mailing list