# HG changeset patch # User Mark Doliner # Date 1255650147 0 # Node ID 3161c687d7bc605f19a0b07ac4c82ddb9384cc34 # Parent d5ff2cd6064a7e748bfe624c5d302cb97b4fc416 Don't call aim_src_clientready() until we have activated our feedbag (and also until after we have our bos rights, but I'm not sure if that matters). This fixes the bug where AIM block lists recently stopped working. I imagine AIM permit lists were also broken, as well as the three ICQ privacy lists. It's conceivable that this will also fix the bug where your contact list is sometimes empty, but I have no evidence to support that either way. This change will be in the next release of Pidgin, 2.6.3, which will probably be released within the next week. Thanks to AOL for telling me what we were doing wrong. Fixes #10489 Fixes #10499 Fixes #10509 Refs #10411 diff -r d5ff2cd6064a -r 3161c687d7bc libpurple/protocols/oscar/oscar.c --- a/libpurple/protocols/oscar/oscar.c Thu Oct 15 16:13:57 2009 +0000 +++ b/libpurple/protocols/oscar/oscar.c Thu Oct 15 23:42:27 2009 +0000 @@ -3909,12 +3909,8 @@ od->rights.maxpermits = (guint)maxpermits; od->rights.maxdenies = (guint)maxdenies; - purple_connection_set_state(gc, PURPLE_CONNECTED); - purple_debug_info("oscar", "buddy list loaded\n"); - aim_srv_clientready(od, conn); - if (purple_account_get_user_info(account) != NULL) serv_set_info(gc, purple_account_get_user_info(account)); @@ -3957,6 +3953,22 @@ aim_srv_requestnew(od, SNAC_FAMILY_ALERT); aim_srv_requestnew(od, SNAC_FAMILY_CHATNAV); + od->bos.have_rights = TRUE; + + /* + * If we've already received our feedbag data then we're not waiting on + * anything else, so send the server clientready. + * + * Normally we get bos rights before we get our feedbag data, so this + * rarely (never?) happens. And I'm not sure it actually matters if we + * wait for bos rights before calling clientready. But it seems safer + * to do it this way. + */ + if (od->ssi.received_data) { + aim_srv_clientready(od, conn); + purple_connection_set_state(gc, PURPLE_CONNECTED); + } + return 1; } @@ -5396,6 +5408,15 @@ oscar_set_icon(gc, img); purple_imgstore_unref(img); + /* + * If we've already received our bos rights then we're not waiting on + * anything else, so send the server clientready. + */ + if (od->bos.have_rights) { + aim_srv_clientready(od, conn); + purple_connection_set_state(gc, PURPLE_CONNECTED); + } + return 1; } diff -r d5ff2cd6064a -r 3161c687d7bc libpurple/protocols/oscar/oscar.h --- a/libpurple/protocols/oscar/oscar.h Thu Oct 15 16:13:57 2009 +0000 +++ b/libpurple/protocols/oscar/oscar.h Thu Oct 15 23:42:27 2009 +0000 @@ -535,6 +535,10 @@ struct aim_userinfo_s *userinfo; } locate; + struct { + gboolean have_rights; + } bos; + /* Server-stored information (ssi) */ struct { gboolean received_data;