From: Tim R. <ma...@us...> - 2004-10-25 19:12:15
|
Update of /cvsroot/gaim/gaim/src/protocols/yahoo In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3378/src/protocols/yahoo Modified Files: Tag: oldstatus yahoo.c Log Message: Evan Schoenberg writes: Problem: The Idle state for Yahoo buddies is currently non- functional in many cases. Instead of the buddy being marked idle, the buddy is reported as away to the core. When an idle time is provided by the server, the idle time is ignored. This patch fixes the Yahoo prpl's handling of the idle status. There were two problems: <snip> 2) I say potentially above because when the friend reports an actual idle, them subsequently indicates the state, the current function replaces the known idle time (say, 600 seconds) with the current time (so 0 seconds). This patch changes it so that if an idle time has already been set when we come across a second indication of idle status, then we don't reset it (to a less-true value). diff complained, so I applied this patch by hand. Furthermore, I undid "1)", because it made away and idle buddies appear as only idle. I'm not really sure how the official clients handle this. Evan should discuss this with me, et al. Index: yahoo.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/protocols/yahoo/yahoo.c,v retrieving revision 1.273.2.4 retrieving revision 1.273.2.5 diff -u -d -p -r1.273.2.4 -r1.273.2.5 --- yahoo.c 16 Oct 2004 22:37:53 -0000 1.273.2.4 +++ yahoo.c 25 Oct 2004 19:12:06 -0000 1.273.2.5 @@ -390,9 +390,11 @@ static void yahoo_process_status(GaimCon f->away = 1; else f->away = 0; - if (f->status == YAHOO_STATUS_IDLE) - f->idle = time(NULL); - else + if (f->status == YAHOO_STATUS_IDLE) { + /* Idle may have already been set in a more precise way in case 137 */ + if (f->idle == 0) + f->idle = time(NULL); + } else f->idle = 0; if (f->status != YAHOO_STATUS_CUSTOM) yahoo_friend_set_status_message(f, NULL); @@ -416,10 +418,15 @@ static void yahoo_process_status(GaimCon * mean idle. */ if (f->status == YAHOO_STATUS_AVAILABLE) break; + f->away = strtol(pair->value, NULL, 10); - if (f->away == 2) - f->idle = time(NULL); - break; + if (f->away == 2) { + /* Idle may have already been set in a more precise way in case 137 */ + if (f->idle == 0) + f->idle = time(NULL); + } + + break; case 138: /* either we're not idle, or we are but won't say how long */ if (!f) break; |