static void prplcb_blist_update( PurpleBuddyList *list, PurpleBlistNode *node ) { if( node->type == PURPLE_BLIST_BUDDY_NODE ) { PurpleBuddy *bud = (PurpleBuddy*) node; PurpleGroup *group = purple_buddy_get_group( bud ); struct im_connection *ic = purple_ic_by_pa( bud->account ); PurpleStatus *as; int flags = 0; if( ic == NULL ) return; if( bud->server_alias ) imcb_rename_buddy( ic, bud->name, bud->server_alias ); else if( bud->alias ) imcb_rename_buddy( ic, bud->name, bud->alias ); if( group ) imcb_add_buddy( ic, bud->name, purple_group_get_name( group ) ); flags |= purple_presence_is_online( bud->presence ) ? OPT_LOGGED_IN : 0; flags |= purple_presence_is_available( bud->presence ) ? 0 : OPT_AWAY; as = purple_presence_get_active_status( bud->presence ); imcb_buddy_status( ic, bud->name, flags, purple_status_get_name( as ), purple_status_get_attr_string( as, "message" ) ); imcb_buddy_times( ic, bud->name, purple_presence_get_login_time( bud->presence ), purple_presence_get_idle_time( bud->presence ) ); } }
void purple_prpl_got_user_login_time(PurpleAccount *account, const char *name, time_t login_time) { GSList *list; PurplePresence *presence; g_return_if_fail(account != NULL); g_return_if_fail(name != NULL); if ((list = purple_find_buddies(account, name)) == NULL) return; if (login_time == 0) login_time = time(NULL); while (list) { PurpleBuddy *buddy = list->data; presence = purple_buddy_get_presence(buddy); list = g_slist_delete_link(list, list); if (purple_presence_get_login_time(presence) != login_time) { purple_presence_set_login_time(presence, login_time); purple_signal_emit(purple_blist_get_handle(), "buddy-got-login-time", buddy); } } }
static gint compare_onofflinetime(PurpleBlistNode *node1, PurpleBlistNode *node2) { PurpleBuddy *buddy1=NULL, *buddy2=NULL; int t1=0, t2=0; if(!node1) { return 0; } if(PURPLE_BLIST_NODE_IS_CHAT(node1) && PURPLE_BLIST_NODE_IS_CHAT(node2)) { return 0; } else if(PURPLE_BLIST_NODE_IS_CHAT(node1)) { return 1; } else if(PURPLE_BLIST_NODE_IS_CHAT(node2)) { return -1; } if(PURPLE_BLIST_NODE_IS_CONTACT(node1)) { buddy1 = purple_contact_get_priority_buddy((PurpleContact *)node1); } else if(PURPLE_BLIST_NODE_IS_BUDDY(node1)) { buddy1 = (PurpleBuddy *)node1; } if(PURPLE_BUDDY_IS_ONLINE(buddy1)) { t1 = purple_presence_get_login_time(purple_buddy_get_presence(buddy1)); } else { t1 = purple_blist_node_get_int((PurpleBlistNode *)buddy1, "last_seen"); } if(PURPLE_BLIST_NODE_IS_CONTACT(node2)) { buddy2 = purple_contact_get_priority_buddy((PurpleContact *)node2); } else if(PURPLE_BLIST_NODE_IS_BUDDY(node2)) { buddy2 = (PurpleBuddy *)node2; } if(PURPLE_BUDDY_IS_ONLINE(buddy2)) { t2 = purple_presence_get_login_time(purple_buddy_get_presence(buddy2)); } else { t2 = purple_blist_node_get_int((PurpleBlistNode *)buddy2, "last_seen"); } if(t1 > t2) { return -1; } if(t2 > t1) { return 1; } return 0; }
void purple_connection_set_state(PurpleConnection *gc, PurpleConnectionState state) { PurpleConnectionUiOps *ops; g_return_if_fail(gc != NULL); if (gc->state == state) return; gc->state = state; ops = purple_connections_get_ui_ops(); if (gc->state == PURPLE_CONNECTING) { connections_connecting = g_list_append(connections_connecting, gc); } else { connections_connecting = g_list_remove(connections_connecting, gc); } if (gc->state == PURPLE_CONNECTED) { PurpleAccount *account; PurplePresence *presence; account = purple_connection_get_account(gc); presence = purple_account_get_presence(account); /* Set the time the account came online */ purple_presence_set_login_time(presence, time(NULL)); #if 0 if (purple_prefs_get_bool("/purple/logging/log_system")) { PurpleLog *log = purple_account_get_log(account, TRUE); if (log != NULL) { char *msg = g_strdup_printf(_("+++ %s signed on"), purple_account_get_username(account)); purple_log_write(log, PURPLE_MESSAGE_SYSTEM, purple_account_get_username(account), purple_presence_get_login_time(presence), msg); g_free(msg); } } #endif if (ops != NULL && ops->connected != NULL) ops->connected(gc); purple_blist_add_account(account); purple_signal_emit(purple_connections_get_handle(), "signed-on", gc); purple_signal_emit_return_1(purple_connections_get_handle(), "autojoin", gc); serv_set_permit_deny(gc); update_keepalive(gc, TRUE); } else if (gc->state == PURPLE_DISCONNECTED) { PurpleAccount *account = purple_connection_get_account(gc); #if 0 if (purple_prefs_get_bool("/purple/logging/log_system")) { PurpleLog *log = purple_account_get_log(account, FALSE); if (log != NULL) { char *msg = g_strdup_printf(_("+++ %s signed off"), purple_account_get_username(account)); purple_log_write(log, PURPLE_MESSAGE_SYSTEM, purple_account_get_username(account), time(NULL), msg); g_free(msg); } } purple_account_destroy_log(account); #endif if (ops != NULL && ops->disconnected != NULL) ops->disconnected(gc); } }