# HG changeset patch # User Tim Ringenbach # Date 1094621469 0 # Node ID 7286c1483ceb0115b1481ddae1dee0c9e7ff3be1 # Parent 8db453e87678b433588bb799cc0da2566c8c851b [gaim-migrate @ 10894] This hopefully makes parsing user statuses work, and gives rid of all serv_got_update's. It's still incomplete, and still doesn't compile. committer: Tailor Script diff -r 8db453e87678 -r 7286c1483ceb src/protocols/yahoo/yahoo.c --- a/src/protocols/yahoo/yahoo.c Wed Sep 08 04:55:31 2004 +0000 +++ b/src/protocols/yahoo/yahoo.c Wed Sep 08 05:31:09 2004 +0000 @@ -317,6 +317,7 @@ static void yahoo_update_status(GaimConnection *gc, const char *name, YahooFriend *f) { gboolean online = TRUE; + char *status = NULL; if (!gc || !name || !f || !gaim_find_buddy(gaim_connection_get_account(gc), name)) return; @@ -324,11 +325,66 @@ if (f->status == YAHOO_STATUS_OFFLINE) online = FALSE; - serv_got_update(gc, name, online, 0, 0, f->idle, f->away ? UC_UNAVAILABLE : 0); + switch (f->status) { + case YAHOO_STATUS_AVAILABLE: + status = "available"; + break; + case YAHOO_STATUS_BRB: + status = "brb"; + break; + case YAHOO_STATUS_BUSY: + status = "busy"; + break; + case YAHOO_STATUS_NOTATHOME: + status = "notathome"; + break; + case YAHOO_STATUS_NOTATDESK: + status = "notatdesk"; + break; + case YAHOO_STATUS_NOTINOFFICE: + status = "notinoffice"; + break; + case YAHOO_STATUS_ONPHONE: + status = "onphone"; + break; + case YAHOO_STATUS_ONVACATION: + status = "onvacation"; + break; + case YAHOO_STATUS_OUTTOLUNCH: + status = "outtolunch"; + break; + case YAHOO_STATUS_STEPPEDOUT: + status = "steppedout"; + break; + case YAHOO_STATUS_INVISIBLE: /* this should never happen? */ + status = "invisible"; + break; + case YAHOO_STATUS_CUSTOM: + if (!f->away) + status = "avaiablewm"; + else + status = "away"; + break; + case YAHOO_STATUS_IDLE: /* FIXME: handle this */ + break; + default: + gaim_debug_warning("yahoo", "Warning, unknown status %d\n", f->status); + break; + } + + if (status) { + if (f->status == YAHOO_STATUS_CUSTOM) + gaim_prpl_got_user_status(gaim_connection_get_account(gc), name, status, "message", + yahoo_friend_get_status_message(f), NULL); + else + gaim_prpl_got_user_status(gaim_connection_get_account(gc), name, status, NULL); + } + } static void yahoo_process_status(GaimConnection *gc, struct yahoo_packet *pkt) { + GaimAccount *account = gaim_connection_get_account(gc); struct yahoo_data *yd = gc->proto_data; GSList *l = pkt->hash; YahooFriend *f = NULL; @@ -438,7 +494,7 @@ if (strtol(pair->value, NULL, 10) == 0) { if (f) f->status = YAHOO_STATUS_OFFLINE; - serv_got_update(gc, name, FALSE, 0, 0, 0, 0); + gaim_prpl_got_user_status(account, name, "offline", NULL); break; } @@ -948,7 +1004,7 @@ gaim_notify_info(gc, NULL, _("Add buddy rejected"), buf->str); g_string_free(buf, TRUE); g_hash_table_remove(yd->friends, who); - serv_got_update(gc, who, FALSE, 0, 0, 0, 0); + gaim_prpl_got_user_status(gaim_connection_get_account(gc), who, "offline", NULL); /* FIXME: make this set not on list status instead */ } }