Mercurial > pidgin.yaz
diff src/blist.c @ 10052:eaec201b2688
[gaim-migrate @ 11013]
More rockin status stuff from Dave West!
Things are beginning to shape up quite well.
Dave, again, sorry it took me a week to get to this. Girl waits for no man.
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Sun, 19 Sep 2004 21:19:55 +0000 |
parents | e6e68b9db19b |
children | 9fdbfe832fac |
line wrap: on
line diff
--- a/src/blist.c Sun Sep 19 21:14:28 2004 +0000 +++ b/src/blist.c Sun Sep 19 21:19:55 2004 +0000 @@ -241,32 +241,6 @@ ops->set_visible(gaimbuddylist, show); } -void gaim_blist_update_buddy_status(GaimBuddy *buddy, int status) -{ -#if 0 - GaimBlistUiOps *ops = gaimbuddylist->ui_ops; - int old_status; - - g_return_if_fail(buddy != NULL); - - old_status = buddy->uc; - if (old_status != status) { - buddy->uc = status; - gaim_contact_compute_priority_buddy(gaim_buddy_get_contact(buddy)); - - if ((status & UC_UNAVAILABLE) != (old_status & UC_UNAVAILABLE)) { - if (status & UC_UNAVAILABLE) - gaim_signal_emit(gaim_blist_get_handle(), "buddy-away", buddy); - else - gaim_signal_emit(gaim_blist_get_handle(), "buddy-back", buddy); - } - } - - if (ops && ops->update) - ops->update(gaimbuddylist, (GaimBlistNode*)buddy); -#endif -} - static gboolean presence_update_timeout_cb(GaimBuddy *buddy) { GaimBlistUiOps *ops = gaimbuddylist->ui_ops; @@ -299,35 +273,58 @@ return FALSE; } -void gaim_blist_update_buddy_presence(GaimBuddy *buddy, gboolean online) +void +gaim_blist_update_buddy_status(GaimBuddy *buddy, GaimStatus *old_status) { GaimBlistUiOps *ops = gaimbuddylist->ui_ops; + GaimPresence *presence; + GaimStatus *status; gboolean did_something = FALSE; g_return_if_fail(buddy != NULL); - if (!GAIM_BUDDY_IS_ONLINE(buddy) && online) { + presence = gaim_buddy_get_presence(buddy); + status = gaim_presence_get_active_status(presence); + + gaim_debug_info("blist", "Updating buddy status\n"); + + if (gaim_status_is_online(status) && + !gaim_status_is_online(old_status)) { int old_present = buddy->present; - buddy->present = GAIM_BUDDY_SIGNING_ON; + gaim_signal_emit(gaim_blist_get_handle(), "buddy-signed-on", buddy); - did_something = TRUE; - if (old_present != GAIM_BUDDY_SIGNING_OFF) { ((GaimContact*)((GaimBlistNode*)buddy)->parent)->online++; if (((GaimContact*)((GaimBlistNode*)buddy)->parent)->online == 1) ((GaimGroup *)((GaimBlistNode *)buddy)->parent->parent)->online++; } - } else if (GAIM_BUDDY_IS_ONLINE(buddy) && !online) { + if (buddy->timer > 0) + gaim_timeout_remove(buddy->timer); + buddy->timer = gaim_timeout_add(10000, (GSourceFunc)presence_update_timeout_cb, buddy); + did_something = TRUE; + + } else if (!gaim_status_is_online(status) && + gaim_status_is_online(old_status)) { buddy->present = GAIM_BUDDY_SIGNING_OFF; gaim_signal_emit(gaim_blist_get_handle(), "buddy-signed-off", buddy); + if (buddy->timer > 0) + gaim_timeout_remove(buddy->timer); + buddy->timer = gaim_timeout_add(10000, (GSourceFunc)presence_update_timeout_cb, buddy); did_something = TRUE; + + } else if (gaim_status_is_available(status) && + !gaim_status_is_available(old_status)) { + gaim_signal_emit(gaim_blist_get_handle(), "buddy-back", buddy); + did_something = TRUE; + + } else if (!gaim_status_is_available(status) && + gaim_status_is_available(old_status)) { + gaim_signal_emit(gaim_blist_get_handle(), "buddy-away", buddy); + did_something = TRUE; + } if (did_something) { - if (buddy->timer > 0) - gaim_timeout_remove(buddy->timer); - buddy->timer = gaim_timeout_add(10000, (GSourceFunc)presence_update_timeout_cb, buddy); - gaim_contact_compute_priority_buddy(gaim_buddy_get_contact(buddy)); if (ops && ops->update) ops->update(gaimbuddylist, (GaimBlistNode *)buddy); @@ -607,6 +604,8 @@ buddy->alias = g_strdup(alias); buddy->presence = gaim_presence_new_for_buddy(buddy); + gaim_presence_set_status_active(buddy->presence, "offline", TRUE); + gaim_blist_node_initialize_settings((GaimBlistNode *)buddy); ((GaimBlistNode *)buddy)->type = GAIM_BLIST_BUDDY_NODE;