Mercurial > pidgin
changeset 12663:09a241749828
[gaim-migrate @ 15006]
If we don't get an oscar blist within 30 seconds then request.
I'm hoping this will fix the problem where you come back to your
computer after having been disconnected overnight and your buddy
list is empty.
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Mon, 26 Dec 2005 08:08:03 +0000 |
parents | eb4841fa697c |
children | 4669a779341c |
files | src/protocols/oscar/oscar.c |
diffstat | 1 files changed, 19 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/protocols/oscar/oscar.c Mon Dec 26 07:43:41 2005 +0000 +++ b/src/protocols/oscar/oscar.c Mon Dec 26 08:08:03 2005 +0000 @@ -311,6 +311,7 @@ static void oscar_set_info(GaimConnection *gc, const char *info); static void oscar_set_info_and_status(GaimAccount *account, gboolean setinfo, const char *rawinfo, gboolean setstatus, GaimStatus *status); static void oscar_set_extendedstatus(GaimConnection *gc); +static gboolean gaim_ssi_rerequestdata(gpointer data); static void oscar_free_name_data(struct name_data *data) { g_free(data->name); @@ -1884,7 +1885,7 @@ if (od->getinfotimer > 0) gaim_timeout_remove(od->getinfotimer); gaim_prefs_disconnect_by_handle(gc); - + aim_session_kill(od->sess); g_free(od->sess); od->sess = NULL; @@ -5714,12 +5715,16 @@ static int conninitdone_bos(aim_session_t *sess, aim_frame_t *fr, ...) { GaimConnection *gc = sess->aux_data; + OscarData *od = gc->proto_data; aim_reqpersonalinfo(sess, fr->conn); gaim_debug_info("oscar", "ssi: requesting rights and list\n"); aim_ssi_reqrights(sess); aim_ssi_reqdata(sess); + if (od->getblisttimer > 0) + gaim_timeout_remove(od->getblisttimer); + od->getblisttimer = gaim_timeout_add(30000, gaim_ssi_rerequestdata, od->sess); aim_locate_reqrights(sess); aim_buddylist_reqrights(sess, fr->conn); @@ -6835,7 +6840,12 @@ static gboolean gaim_ssi_rerequestdata(gpointer data) { aim_session_t *sess = data; + GaimConnection *gc = sess->aux_data; + OscarData *od = gc->proto_data; + aim_ssi_reqdata(sess); + od->getblisttimer = 0; + return FALSE; } @@ -6854,7 +6864,9 @@ if (reason == 0x0005) { gaim_notify_error(gc, NULL, _("Unable To Retrieve Buddy List"), _("Gaim was temporarily unable to retrieve your buddy list from the AIM servers. Your buddy list is not lost, and will probably become available in a few hours.")); - od->getblisttimer = gaim_timeout_add(300000, gaim_ssi_rerequestdata, od->sess); + if (od->getblisttimer > 0) + gaim_timeout_remove(od->getblisttimer); + od->getblisttimer = gaim_timeout_add(30000, gaim_ssi_rerequestdata, od->sess); } oscar_set_extendedstatus(gc); @@ -6926,6 +6938,11 @@ timestamp = va_arg(ap, fu32_t); va_end(ap); + /* Don't attempt to re-request our buddy list later */ + if (od->getblisttimer != 0) + gaim_timeout_remove(od->getblisttimer); + od->getblisttimer = 0; + gaim_debug_info("oscar", "ssi: syncing local list and server list\n");