# HG changeset patch # User Richard Laager # Date 1225653291 0 # Node ID 88a66cb4a8d909be5368815c20694d83846fb1e3 # Parent 32ad012ef6acc1e721a1fdb6a24c099ecd809c34# Parent 41485746e2b959b38ad19a0828162926d92c0368 merge of '32cd8507d8b94418ca8f083d8555916341b47b94' and 'ca1b3ac908985d80ba2b86ef01bc4fcb4cf70fb7' diff -r 32ad012ef6ac -r 88a66cb4a8d9 ChangeLog.API --- a/ChangeLog.API Sun Nov 02 06:41:34 2008 +0000 +++ b/ChangeLog.API Sun Nov 02 19:14:51 2008 +0000 @@ -8,6 +8,7 @@ * purple_connection_get_protocol_data * purple_connection_set_protocol_data * purple_buddy_get_local_buddy_alias + * purple_blist_get_buddies Deprecated: * purple_buddy_get_local_alias diff -r 32ad012ef6ac -r 88a66cb4a8d9 libpurple/account.c --- a/libpurple/account.c Sun Nov 02 06:41:34 2008 +0000 +++ b/libpurple/account.c Sun Nov 02 19:14:51 2008 +0000 @@ -2248,8 +2248,8 @@ /* Make a list of what group each buddy is in */ for (cur = buddies; cur != NULL; cur = cur->next) { - PurpleBlistNode *node = cur->data; - groups = g_list_append(groups, node->parent->parent); + PurpleBuddy *buddy = cur->data; + groups = g_list_append(groups, purple_buddy_get_group(buddy)); } if (prpl_info->add_buddies != NULL) @@ -2499,23 +2499,26 @@ purple_accounts_remove(account); /* Remove this account's buddies */ - for (gnode = purple_get_blist()->root; gnode != NULL; gnode = gnode->next) { + for (gnode = purple_blist_get_root(); + gnode != NULL; + gnode = purple_blist_node_get_sibling_next(gnode)) + { if (!PURPLE_BLIST_NODE_IS_GROUP(gnode)) continue; - cnode = gnode->child; + cnode = purple_blist_node_get_first_child(gnode); while (cnode) { - PurpleBlistNode *cnode_next = cnode->next; + PurpleBlistNode *cnode_next = purple_blist_node_get_sibling_next(cnode); if(PURPLE_BLIST_NODE_IS_CONTACT(cnode)) { - bnode = cnode->child; + bnode = purple_blist_node_get_first_child(cnode); while (bnode) { - PurpleBlistNode *bnode_next = bnode->next; + PurpleBlistNode *bnode_next = purple_blist_node_get_sibling_next(bnode); if (PURPLE_BLIST_NODE_IS_BUDDY(bnode)) { PurpleBuddy *b = (PurpleBuddy *)bnode; - if (b->account == account) + if (purple_buddy_get_account(b) == account) purple_blist_remove_buddy(b); } bnode = bnode_next; @@ -2523,7 +2526,7 @@ } else if (PURPLE_BLIST_NODE_IS_CHAT(cnode)) { PurpleChat *c = (PurpleChat *)cnode; - if (c->account == account) + if (purple_chat_get_account(c) == account) purple_blist_remove_chat(c); } cnode = cnode_next; diff -r 32ad012ef6ac -r 88a66cb4a8d9 libpurple/blist.c --- a/libpurple/blist.c Sun Nov 02 06:41:34 2008 +0000 +++ b/libpurple/blist.c Sun Nov 02 19:14:51 2008 +0000 @@ -699,6 +699,12 @@ return purplebuddylist ? purplebuddylist->root : NULL; } +GHashTable * +purple_blist_get_buddies() +{ + return purplebuddylist ? purplebuddylist->buddies : NULL; +} + void purple_blist_show() { PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); diff -r 32ad012ef6ac -r 88a66cb4a8d9 libpurple/blist.h --- a/libpurple/blist.h Sun Nov 02 06:41:34 2008 +0000 +++ b/libpurple/blist.h Sun Nov 02 19:14:51 2008 +0000 @@ -156,9 +156,6 @@ PurpleAccount *account; /**< The account this chat is attached to */ }; -#endif /* PURPLE_HIDE_STRUCTS && PURPLE_BLIST_STRUCTS */ - - /** * The Buddy List */ @@ -168,6 +165,8 @@ void *ui_data; /**< UI-specific data. */ }; +#endif /* PURPLE_HIDE_STRUCTS && PURPLE_BLIST_STRUCTS */ + /** * Buddy list UI operations. * @@ -236,6 +235,14 @@ PurpleBlistNode *purple_blist_get_root(void); /** + * Returns the hash table of every buddy in the list. + * + * @return The hash table of every buddy in the list. + * @since 2.6.0 + */ +GHashTable *purple_blist_get_buddies(void); + +/** * Returns the next node of a given node. This function is to be used to iterate * over the tree returned by purple_get_blist. * @@ -713,6 +720,7 @@ * * @param buddy The buddy * @return The local alias for the buddy + * @since 2.6.0 */ const char *purple_buddy_get_local_buddy_alias(PurpleBuddy *buddy); diff -r 32ad012ef6ac -r 88a66cb4a8d9 libpurple/buddyicon.c --- a/libpurple/buddyicon.c Sun Nov 02 06:41:34 2008 +0000 +++ b/libpurple/buddyicon.c Sun Nov 02 19:14:51 2008 +0000 @@ -889,7 +889,9 @@ if (PURPLE_BLIST_NODE_IS_CONTACT(node)) { PurpleBlistNode *child; - for (child = node->child ; child ; child = child->next) + for (child = purple_blist_node_get_first_child(node); + child; + child = purple_blist_node_get_sibling_next(child)) { PurpleBuddy *buddy; PurpleConversation *conv; diff -r 32ad012ef6ac -r 88a66cb4a8d9 libpurple/conversation.c --- a/libpurple/conversation.c Sun Nov 02 06:41:34 2008 +0000 +++ b/libpurple/conversation.c Sun Nov 02 19:14:51 2008 +0000 @@ -665,7 +665,7 @@ text = purple_buddy_get_contact_alias(b); } else if(purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) { if(account && ((chat = purple_blist_find_chat(account, name)) != NULL)) - text = chat->alias; + text = purple_chat_get_name(chat); } @@ -912,7 +912,7 @@ if (purple_account_get_alias(account) != NULL) alias = account->alias; - else if (b != NULL && strcmp(b->name, purple_buddy_get_contact_alias(b))) + else if (b != NULL && strcmp(purple_buddy_get_name(b), purple_buddy_get_contact_alias(b))) alias = purple_buddy_get_contact_alias(b); else if (purple_connection_get_display_name(gc) != NULL) alias = purple_connection_get_display_name(gc); diff -r 32ad012ef6ac -r 88a66cb4a8d9 libpurple/log.c --- a/libpurple/log.c Sun Nov 02 06:41:34 2008 +0000 +++ b/libpurple/log.c Sun Nov 02 19:14:51 2008 +0000 @@ -1952,22 +1952,28 @@ set->name = set->normalized_name = name; /* Search the buddy list to find the account and to determine if this is a buddy. */ - for (gnode = purple_get_blist()->root; !found && gnode != NULL; gnode = gnode->next) + for (gnode = purple_blist_get_root(); + !found && gnode != NULL; + gnode = purple_blist_node_get_sibling_next(gnode)) { if (!PURPLE_BLIST_NODE_IS_GROUP(gnode)) continue; - for (cnode = gnode->child; !found && cnode != NULL; cnode = cnode->next) + for (cnode = purple_blist_node_get_first_child(gnode); + !found && cnode != NULL; + cnode = purple_blist_node_get_sibling_next(cnode)) { if (!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) continue; - for (bnode = cnode->child; !found && bnode != NULL; bnode = bnode->next) + for (bnode = purple_blist_node_get_first_child(cnode); + !found && bnode != NULL; + bnode = purple_blist_node_get_sibling_next(bnode)) { PurpleBuddy *buddy = (PurpleBuddy *)bnode; - if (!strcmp(buddy->name, name)) { - set->account = buddy->account; + if (!strcmp(purple_buddy_get_name(buddy), name)) { + set->account = purple_buddy_get_account(buddy); set->buddy = TRUE; found = TRUE; } diff -r 32ad012ef6ac -r 88a66cb4a8d9 libpurple/pounce.c --- a/libpurple/pounce.c Sun Nov 02 06:41:34 2008 +0000 +++ b/libpurple/pounce.c Sun Nov 02 19:14:51 2008 +0000 @@ -1042,35 +1042,39 @@ static void buddy_state_cb(PurpleBuddy *buddy, PurplePounceEvent event) { - purple_pounce_execute(buddy->account, buddy->name, event); + PurpleAccount *account = purple_buddy_get_account(buddy); + const gchar *name = purple_buddy_get_name(buddy); + + purple_pounce_execute(account, name, event); } static void buddy_status_changed_cb(PurpleBuddy *buddy, PurpleStatus *old_status, PurpleStatus *status) { + PurpleAccount *account = purple_buddy_get_account(buddy); + const gchar *name = purple_buddy_get_name(buddy); gboolean old_available, available; available = purple_status_is_available(status); old_available = purple_status_is_available(old_status); if (available && !old_available) - purple_pounce_execute(buddy->account, buddy->name, - PURPLE_POUNCE_AWAY_RETURN); + purple_pounce_execute(account, name, PURPLE_POUNCE_AWAY_RETURN); else if (!available && old_available) - purple_pounce_execute(buddy->account, buddy->name, - PURPLE_POUNCE_AWAY); + purple_pounce_execute(account, name, PURPLE_POUNCE_AWAY); } static void buddy_idle_changed_cb(PurpleBuddy *buddy, gboolean old_idle, gboolean idle) { + PurpleAccount *account = purple_buddy_get_account(buddy); + const gchar *name = purple_buddy_get_name(buddy); + if (idle && !old_idle) - purple_pounce_execute(buddy->account, buddy->name, - PURPLE_POUNCE_IDLE); + purple_pounce_execute(account, name, PURPLE_POUNCE_IDLE); else if (!idle && old_idle) - purple_pounce_execute(buddy->account, buddy->name, - PURPLE_POUNCE_IDLE_RETURN); + purple_pounce_execute(account, name, PURPLE_POUNCE_IDLE_RETURN); } static void diff -r 32ad012ef6ac -r 88a66cb4a8d9 libpurple/privacy.c --- a/libpurple/privacy.c Sun Nov 02 06:41:34 2008 +0000 +++ b/libpurple/privacy.c Sun Nov 02 19:14:51 2008 +0000 @@ -224,8 +224,10 @@ while (list != NULL) { PurpleBuddy *buddy = list->data; - if (!g_slist_find_custom(account->permit, buddy->name, (GCompareFunc)g_utf8_collate)) - purple_privacy_permit_add(account, buddy->name, local); + const gchar *name = purple_buddy_get_name(buddy); + + if (!g_slist_find_custom(account->permit, name, (GCompareFunc)g_utf8_collate)) + purple_privacy_permit_add(account, name, local); list = g_slist_delete_link(list, list); } } diff -r 32ad012ef6ac -r 88a66cb4a8d9 libpurple/protocols/bonjour/jabber.c --- a/libpurple/protocols/bonjour/jabber.c Sun Nov 02 06:41:34 2008 +0000 +++ b/libpurple/protocols/bonjour/jabber.c Sun Nov 02 19:14:51 2008 +0000 @@ -665,7 +665,7 @@ mbba = g_new0(struct _match_buddies_by_address_t, 1); mbba->address = address_text; mbba->jdata = jdata; - g_hash_table_foreach(purple_get_blist()->buddies, _match_buddies_by_address, mbba); + g_hash_table_foreach(purple_blist_get_buddies(), _match_buddies_by_address, mbba); if (mbba->matched_buddies == NULL) { purple_debug_info("bonjour", "We don't like invisible buddies, this is not a superheros comic\n"); @@ -875,7 +875,7 @@ mbba = g_new0(struct _match_buddies_by_address_t, 1); mbba->address = bconv->ip; mbba->jdata = jdata; - g_hash_table_foreach(purple_get_blist()->buddies, _match_buddies_by_address, mbba); + g_hash_table_foreach(purple_blist_get_buddies(), _match_buddies_by_address, mbba); /* If there is exactly one match, use it */ if(mbba->matched_buddies != NULL) { diff -r 32ad012ef6ac -r 88a66cb4a8d9 libpurple/protocols/qq/buddy_info.c --- a/libpurple/protocols/qq/buddy_info.c Sun Nov 02 06:41:34 2008 +0000 +++ b/libpurple/protocols/qq/buddy_info.c Sun Nov 02 19:14:51 2008 +0000 @@ -638,7 +638,7 @@ gchar *alias_utf8; PurpleAccount *account = purple_connection_get_account(gc); - qd = (qq_data *) gc->proto_data; + qd = (qq_data *)purple_connection_get_protocol_data(gc); uid = strtol(segments[QQ_INFO_UID], NULL, 10); who = uid_to_purple_name(uid); @@ -657,15 +657,16 @@ buddy = purple_find_buddy(gc->account, who); } - if (buddy == NULL || buddy->proto_data == NULL) { + /* if the buddy is null, the api will catch it and return null here */ + bd = purple_buddy_get_protocol_data(buddy); + + if (buddy == NULL || bd) { g_free(who); g_free(alias_utf8); return; } /* update buddy list (including myself, if myself is the buddy) */ - bd = (qq_buddy_data *)buddy->proto_data; - bd->age = strtol(segments[QQ_INFO_AGE], NULL, 10); bd->gender = strtol(segments[QQ_INFO_GENDER], NULL, 10); bd->face = strtol(segments[QQ_INFO_FACE], NULL, 10); @@ -794,8 +795,7 @@ for (it = buddies; it; it = it->next) { buddy = it->data; if (buddy == NULL) continue; - if (buddy->proto_data == NULL) continue; - bd = (qq_buddy_data *)buddy->proto_data; + if ((bd = purple_buddy_get_protocol_data(buddy)) == NULL) continue; if (bd->uid == 0) continue; /* keep me as end of packet*/ if (bd->uid == qd->uid) continue; bytes += qq_put32(buf + bytes, bd->uid); diff -r 32ad012ef6ac -r 88a66cb4a8d9 libpurple/protocols/qq/buddy_list.c --- a/libpurple/protocols/qq/buddy_list.c Sun Nov 02 06:41:34 2008 +0000 +++ b/libpurple/protocols/qq/buddy_list.c Sun Nov 02 19:14:51 2008 +0000 @@ -326,7 +326,7 @@ #endif buddy = qq_buddy_find_or_new(gc, bd.uid); - if (buddy == NULL || buddy->proto_data == NULL) { + if (buddy == NULL || purple_buddy_get_protocol_data(buddy) == NULL) { g_free(bd.nickname); continue; } @@ -334,7 +334,7 @@ bd.last_update = time(NULL); qq_update_buddy_status(gc, bd.uid, bd.status, bd.comm_flag); - g_memmove(buddy->proto_data, &bd, sizeof(qq_buddy_data)); + g_memmove(purple_buddy_get_protocol_data(buddy), &bd, sizeof(qq_buddy_data)); /* nickname has been copy to buddy_data do not free g_free(bd.nickname); */ @@ -641,9 +641,10 @@ for (it = buddies; it; it = it->next) { buddy = it->data; if (buddy == NULL) continue; - if (buddy->proto_data == NULL) continue; - bd = (qq_buddy_data *)buddy->proto_data; + bd = purple_buddy_get_protocol_data(buddy); + if (bd == NULL) continue; + if (bd->uid == 0) continue; if (bd->uid == qd->uid) continue; /* my status is always online in my buddy list */ if (tm_limit < bd->last_update) continue; @@ -663,16 +664,20 @@ GSList *buddies, *it; gint count = 0; - qd = (qq_data *) (gc->proto_data); + qd = (qq_data *)purple_connection_get_protocol_data(gc); buddies = purple_find_buddies(purple_connection_get_account(gc), NULL); for (it = buddies; it; it = it->next) { + qq_buddy_data *qbd = NULL; + buddy = it->data; if (buddy == NULL) continue; - if (buddy->proto_data == NULL) continue; - qq_buddy_data_free(buddy->proto_data); - buddy->proto_data = NULL; + qbd = purple_buddy_get_protocol_data(buddy); + if (qbd == NULL) continue; + + qq_buddy_data_free(qbd); + purple_buddy_set_protocol_data(buddy, NULL); count++; } diff -r 32ad012ef6ac -r 88a66cb4a8d9 libpurple/protocols/qq/buddy_opt.c --- a/libpurple/protocols/qq/buddy_opt.c Sun Nov 02 06:41:34 2008 +0000 +++ b/libpurple/protocols/qq/buddy_opt.c Sun Nov 02 19:14:51 2008 +0000 @@ -101,6 +101,7 @@ { gchar *who; PurpleBuddy *buddy; + qq_buddy_data *bd; g_return_val_if_fail(gc != NULL, NULL); @@ -113,11 +114,12 @@ purple_debug_error("QQ", "Can not find purple buddy of %d\n", uid); return NULL; } - if (buddy->proto_data == NULL) { + + if ((bd = purple_buddy_get_protocol_data(buddy)) == NULL) { purple_debug_error("QQ", "Can not find buddy data of %d\n", uid); return NULL; } - return (qq_buddy_data *)buddy->proto_data; + return bd; } void qq_buddy_data_free(qq_buddy_data *bd) @@ -150,7 +152,7 @@ purple_debug_info("QQ", "Add new purple buddy: [%s]\n", who); buddy = purple_buddy_new(gc->account, who, NULL); /* alias is NULL */ - buddy->proto_data = NULL; + purple_buddy_set_protocol_data(buddy, NULL); g_free(who); @@ -163,11 +165,14 @@ static void qq_buddy_free(PurpleBuddy *buddy) { + qq_buddy_data *bd; + g_return_if_fail(buddy); - if (buddy->proto_data) { - qq_buddy_data_free(buddy->proto_data); + + if ((bd = purple_buddy_get_protocol_data(buddy)) != NULL) { + qq_buddy_data_free(bd); } - buddy->proto_data = NULL; + purple_buddy_set_protocol_data(buddy, NULL); purple_blist_remove_buddy(buddy); } @@ -187,6 +192,7 @@ PurpleBuddy *qq_buddy_find_or_new(PurpleConnection *gc, guint32 uid) { PurpleBuddy *buddy; + qq_buddy_data *bd; g_return_val_if_fail(gc->account != NULL && uid != 0, NULL); @@ -198,11 +204,12 @@ } } - if (buddy->proto_data != NULL) { + if (purple_buddy_get_protocol_data(buddy) != NULL) { return buddy; } - buddy->proto_data = qq_buddy_data_new(uid); + bd = qq_buddy_data_new(uid); + purple_buddy_set_protocol_data(buddy, bd); return buddy; } @@ -691,7 +698,7 @@ if (!qd->is_login) return; /* IMPORTANT ! */ - uid = purple_name_to_uid(buddy->name); + uid = purple_name_to_uid(purple_buddy_get_name(buddy)); if (uid > 0) { if (qd->client_version > 2005) { request_add_buddy_no_auth_ex(gc, uid); @@ -782,6 +789,7 @@ gchar **segments; gchar *dest_uid, *reply; PurpleBuddy *buddy; + qq_buddy_data *bd; g_return_if_fail(data != NULL && data_len != 0); g_return_if_fail(uid != 0); @@ -826,10 +834,10 @@ if (buddy == NULL) { buddy = qq_buddy_new(gc, uid); } - if (buddy != NULL && buddy->proto_data != NULL) { + if (buddy != NULL && (bd = purple_buddy_get_protocol_data(buddy)) != NULL) { /* Not authorized now, free buddy data */ - qq_buddy_data_free(buddy->proto_data); - buddy->proto_data = NULL; + qq_buddy_data_free(bd); + purple_buddy_set_protocol_data(buddy, NULL); } add_buddy_authorize_input(gc, uid, NULL, 0); @@ -905,6 +913,7 @@ void qq_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) { qq_data *qd; + qq_buddy_data *bd; guint32 uid; g_return_if_fail(gc != NULL && gc->proto_data != NULL); @@ -914,7 +923,7 @@ if (!qd->is_login) return; - uid = purple_name_to_uid(buddy->name); + uid = purple_name_to_uid(purple_buddy_get_name(buddy)); if (uid > 0 && uid != qd->uid) { if (qd->client_version > 2005) { qq_request_auth_code(gc, QQ_AUTH_INFO_BUDDY, QQ_AUTH_INFO_REMOVE_BUDDY, uid); @@ -924,11 +933,11 @@ } } - if (buddy->proto_data) { - qq_buddy_data_free(buddy->proto_data); - buddy->proto_data = NULL; + if ((bd = purple_buddy_get_protocol_data(buddy)) != NULL) { + qq_buddy_data_free(bd); + purple_buddy_set_protocol_data(buddy, NULL); } else { - purple_debug_warning("QQ", "Empty buddy data of %s\n", buddy->name); + purple_debug_warning("QQ", "Empty buddy data of %s\n", purple_buddy_get_name(buddy)); } /* Do not call purple_blist_remove_buddy, @@ -1216,6 +1225,7 @@ gint bytes; gchar **segments; gchar *primary, *secondary; + qq_buddy_data *bd; g_return_if_fail(from != NULL && to != NULL); @@ -1255,10 +1265,10 @@ g_return_if_fail(uid != 0); buddy = qq_buddy_find(gc, uid); - if (buddy != NULL && buddy->proto_data != NULL) { + if (buddy != NULL && (bd = purple_buddy_get_protocol_data(buddy)) != NULL) { /* Not authorized now, free buddy data */ - qq_buddy_data_free(buddy->proto_data); - buddy->proto_data = NULL; + qq_buddy_data_free(bd); + purple_buddy_set_protocol_data(buddy, NULL); } } diff -r 32ad012ef6ac -r 88a66cb4a8d9 libpurple/protocols/qq/group_internal.c --- a/libpurple/protocols/qq/group_internal.c Sun Nov 02 06:41:34 2008 +0000 +++ b/libpurple/protocols/qq/group_internal.c Sun Nov 02 19:14:51 2008 +0000 @@ -102,16 +102,21 @@ void qq_room_update_chat_info(PurpleChat *chat, qq_room_data *rmd) { + GHashTable *components; + if (rmd->title_utf8 != NULL && strlen(rmd->title_utf8) > 0) { purple_blist_alias_chat(chat, rmd->title_utf8); } - g_hash_table_replace(chat->components, + + components = purple_chat_get_components(chat); + + g_hash_table_replace(components, g_strdup(QQ_ROOM_KEY_INTERNAL_ID), g_strdup_printf("%d", rmd->id)); - g_hash_table_replace(chat->components, + g_hash_table_replace(components, g_strdup(QQ_ROOM_KEY_EXTERNAL_ID), g_strdup_printf("%d", rmd->ext_id)); - g_hash_table_replace(chat->components, + g_hash_table_replace(components, g_strdup(QQ_ROOM_KEY_TITLE_UTF8), g_strdup(rmd->title_utf8)); } @@ -249,11 +254,13 @@ member->uid = member_uid; buddy = purple_find_buddy(purple_connection_get_account(gc), uid_to_purple_name(member_uid)); if (buddy != NULL) { - bd = (qq_buddy_data *) buddy->proto_data; + const gchar *alias = NULL; + + bd = purple_buddy_get_protocol_data(buddy); if (bd != NULL && bd->nickname != NULL) member->nickname = g_strdup(bd->nickname); - else if (buddy->alias != NULL) - member->nickname = g_strdup(buddy->alias); + else if ((alias = purple_buddy_get_alias(buddy)) != NULL) + member->nickname = g_strdup(alias); } rmd->members = g_list_append(rmd->members, member); } @@ -382,16 +389,19 @@ } count = 0; - for (node = ((PurpleBlistNode *) purple_group)->child; node != NULL; node = node->next) { + for (node = purple_blist_node_get_first_child((PurpleBlistNode *)purple_group); + node != NULL; + node = purple_blist_node_get_sibling_next(node)) + { if ( !PURPLE_BLIST_NODE_IS_CHAT(node)) { continue; } /* got one */ chat = (PurpleChat *) node; - if (account != chat->account) /* not qq account*/ + if (account != purple_chat_get_account(chat)) /* not qq account*/ continue; - rmd = room_data_new_by_hashtable(gc, chat->components); + rmd = room_data_new_by_hashtable(gc, purple_chat_get_components(chat)); qd->groups = g_list_append(qd->groups, rmd); count++; } diff -r 32ad012ef6ac -r 88a66cb4a8d9 libpurple/protocols/qq/im.c --- a/libpurple/protocols/qq/im.c Sun Nov 02 06:41:34 2008 +0000 +++ b/libpurple/protocols/qq/im.c Sun Nov 02 19:14:51 2008 +0000 @@ -246,7 +246,7 @@ /* create no-auth buddy */ b = qq_buddy_new(gc, im_header->uid_from); } - bd = (b == NULL) ? NULL : (qq_buddy_data *) b->proto_data; + bd = (b == NULL) ? NULL : purple_buddy_get_protocol_data(b); if (bd != NULL) { bd->client_tag = im_header->version_from; } @@ -359,7 +359,7 @@ /* create no-auth buddy */ b = qq_buddy_new(gc, im_header->uid_from); } - bd = (b == NULL) ? NULL : (qq_buddy_data *) b->proto_data; + bd = (b == NULL) ? NULL : purple_buddy_get_protocol_data(b); if (bd != NULL) { bd->client_tag = im_header->version_from; } diff -r 32ad012ef6ac -r 88a66cb4a8d9 libpurple/protocols/qq/qq.c --- a/libpurple/protocols/qq/qq.c Sun Nov 02 06:41:34 2008 +0000 +++ b/libpurple/protocols/qq/qq.c Sun Nov 02 19:14:51 2008 +0000 @@ -248,7 +248,7 @@ qq_buddy_data *bd; GString *status; - bd = (qq_buddy_data *) b->proto_data; + bd = purple_buddy_get_protocol_data(b); if (bd == NULL) return NULL; @@ -291,7 +291,7 @@ g_return_if_fail(b != NULL); - bd = (qq_buddy_data *) b->proto_data; + bd = purple_buddy_get_protocol_data(b); if (bd == NULL) return; @@ -382,11 +382,12 @@ qq_data *qd; qq_buddy_data *buddy; - if (!b || !(account = b->account) || - !(gc = purple_account_get_connection(account)) || !(qd = gc->proto_data)) + if (!b || !(account = purple_buddy_get_account(b)) || + !(gc = purple_account_get_connection(account)) || + !(qd = purple_connection_get_protocol_data(gc))) return NULL; - buddy = (qq_buddy_data *)b->proto_data; + buddy = purple_buddy_get_protocol_data(b); if (!buddy) { return "not-authorized"; } @@ -798,8 +799,9 @@ static void action_chat_quit(PurpleBlistNode * node) { PurpleChat *chat = (PurpleChat *)node; - PurpleConnection *gc = purple_account_get_connection(chat->account); - GHashTable *components = chat -> components; + PurpleAccount *account = purple_chat_get_account(chat); + PurpleConnection *gc = purple_account_get_connection(account); + GHashTable *components = purple_chat_get_components(chat); gchar *num_str; guint32 room_id; @@ -817,8 +819,9 @@ static void action_chat_get_info(PurpleBlistNode * node) { PurpleChat *chat = (PurpleChat *)node; - PurpleConnection *gc = purple_account_get_connection(chat->account); - GHashTable *components = chat -> components; + PurpleAccount *account = purple_chat_get_account(chat); + PurpleConnection *gc = purple_account_get_connection(account); + GHashTable *components = purple_chat_get_components(chat); gchar *num_str; guint32 room_id; @@ -905,7 +908,7 @@ g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node)); buddy = (PurpleBuddy *) node; - gc = purple_account_get_connection(buddy->account); + gc = purple_account_get_connection(purple_buddy_get_account(buddy)); qq_add_buddy(gc, buddy, NULL); } @@ -918,7 +921,7 @@ PurpleConnection *gc = purple_account_get_connection(buddy->account); qq_data *qd = gc->proto_data; */ - qq_buddy_data *bd = (qq_buddy_data *)buddy->proto_data; + qq_buddy_data *bd = purple_buddy_get_protocol_data(buddy); if (bd == NULL) { act = purple_menu_action_new(_("Add Buddy"), diff -r 32ad012ef6ac -r 88a66cb4a8d9 libpurple/protocols/qq/send_file.c --- a/libpurple/protocols/qq/send_file.c Sun Nov 02 06:41:34 2008 +0000 +++ b/libpurple/protocols/qq/send_file.c Sun Nov 02 19:14:51 2008 +0000 @@ -804,7 +804,7 @@ "Received a FACE ip detect from %d, so he/she must be online :)\n", sender_uid); b = purple_find_buddy(gc->account, sender_name); - bd = (b == NULL) ? NULL : (qq_buddy_data *) b->proto_data; + bd = (b == NULL) ? NULL : purple_buddy_get_protocol_data(b); if (bd) { if(0 != info->remote_real_ip) { g_memmove(&(bd->ip), &info->remote_real_ip, sizeof(bd->ip)); diff -r 32ad012ef6ac -r 88a66cb4a8d9 libpurple/server.c --- a/libpurple/server.c Sun Nov 02 06:41:34 2008 +0000 +++ b/libpurple/server.c Sun Nov 02 19:14:51 2008 +0000 @@ -230,7 +230,7 @@ prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); if(b && prpl_info && prpl_info->alias_buddy) { - prpl_info->alias_buddy(gc, b->name, b->alias); + prpl_info->alias_buddy(gc, purple_buddy_get_name(b), purple_buddy_get_local_buddy_alias(b)); } } @@ -247,18 +247,21 @@ while (buddies != NULL) { + const char *server_alias; + b = buddies->data; buddies = g_slist_delete_link(buddies, buddies); - if((b->server_alias == NULL && alias == NULL) || - (b->server_alias && alias && !strcmp(b->server_alias, alias))) + server_alias = purple_buddy_get_server_alias(b); + if((server_alias == NULL && alias == NULL) || + (server_alias && alias && !strcmp(server_alias, alias))) { continue; } purple_blist_server_alias_buddy(b, alias); - conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, b->name, account); + conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, purple_buddy_get_name(b), account); if(conv != NULL && alias != NULL && strcmp(alias, who)) { char *escaped = g_markup_escape_text(who, -1); @@ -288,11 +291,13 @@ buddies = purple_find_buddies(account, who); while(buddies != NULL) { + const char *balias; b = buddies->data; buddies = g_slist_delete_link(buddies, buddies); - if((!b->alias && !alias) || (b->alias && alias && !strcmp(b->alias, alias))) + balias = purple_buddy_get_local_buddy_alias(b); + if((!balias && !alias) || (balias && alias && !strcmp(balias, alias))) continue; purple_blist_alias_buddy(b, alias); @@ -366,7 +371,9 @@ if(gc && og && ng) { if (prpl_info && prpl_info->group_buddy) { - prpl_info->group_buddy(gc, b->name, og->name, ng->name); + prpl_info->group_buddy(gc, purple_buddy_get_name(b), + purple_group_get_name(og), + purple_group_get_name(ng)); } } } diff -r 32ad012ef6ac -r 88a66cb4a8d9 libpurple/status.c --- a/libpurple/status.c Sun Nov 02 06:41:34 2008 +0000 +++ b/libpurple/status.c Sun Nov 02 19:14:51 2008 +0000 @@ -612,7 +612,8 @@ if (old_status != NULL) { - tmp = g_strdup_printf(_("%s (%s) changed status from %s to %s"), buddy_alias, buddy->name, + tmp = g_strdup_printf(_("%s (%s) changed status from %s to %s"), buddy_alias, + purple_buddy_get_name(buddy), purple_status_get_name(old_status), purple_status_get_name(new_status)); logtmp = g_markup_escape_text(tmp, -1); @@ -623,19 +624,21 @@ if (purple_status_is_active(new_status)) { - tmp = g_strdup_printf(_("%s (%s) is now %s"), buddy_alias, buddy->name, + tmp = g_strdup_printf(_("%s (%s) is now %s"), buddy_alias, + purple_buddy_get_name(buddy), purple_status_get_name(new_status)); logtmp = g_markup_escape_text(tmp, -1); } else { - tmp = g_strdup_printf(_("%s (%s) is no longer %s"), buddy_alias, buddy->name, + tmp = g_strdup_printf(_("%s (%s) is no longer %s"), buddy_alias, + purple_buddy_get_name(buddy), purple_status_get_name(new_status)); logtmp = g_markup_escape_text(tmp, -1); } } - log = purple_account_get_log(buddy->account, FALSE); + log = purple_account_get_log(purple_buddy_get_account(buddy), FALSE); if (log != NULL) { purple_log_write(log, PURPLE_MESSAGE_SYSTEM, buddy_alias, @@ -1132,13 +1135,13 @@ PurpleAccount *account; g_return_val_if_fail(buddy != NULL, NULL); - account = buddy->account; + account = purple_buddy_get_account(buddy); presence = purple_presence_new(PURPLE_PRESENCE_CONTEXT_BUDDY); - presence->u.buddy.name = g_strdup(buddy->name); - presence->u.buddy.account = buddy->account; - presence->statuses = purple_prpl_get_statuses(buddy->account, presence); + presence->u.buddy.name = g_strdup(purple_buddy_get_name(buddy)); + presence->u.buddy.account = account; + presence->statuses = purple_prpl_get_statuses(account, presence); presence->u.buddy.buddy = buddy; @@ -1234,12 +1237,13 @@ time_t current_time, gboolean old_idle, gboolean idle) { PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); + PurpleAccount *account = purple_buddy_get_account(buddy); if (!old_idle && idle) { if (purple_prefs_get_bool("/purple/logging/log_system")) { - PurpleLog *log = purple_account_get_log(buddy->account, FALSE); + PurpleLog *log = purple_account_get_log(account, FALSE); if (log != NULL) { @@ -1259,7 +1263,7 @@ { if (purple_prefs_get_bool("/purple/logging/log_system")) { - PurpleLog *log = purple_account_get_log(buddy->account, FALSE); + PurpleLog *log = purple_account_get_log(account, FALSE); if (log != NULL) { diff -r 32ad012ef6ac -r 88a66cb4a8d9 pidgin/plugins/history.c --- a/pidgin/plugins/history.c Sun Nov 02 06:41:34 2008 +0000 +++ b/pidgin/plugins/history.c Sun Nov 02 19:14:51 2008 +0000 @@ -70,16 +70,20 @@ for (cur = buddies; cur != NULL; cur = cur->next) { PurpleBlistNode *node = cur->data; - if ((node != NULL) && ((node->prev != NULL) || (node->next != NULL))) + PurpleBlistNode *prev = purple_blist_node_get_sibling_prev(node); + PurpleBlistNode *next = purple_blist_node_get_sibling_next(node); + if ((node != NULL) && ((prev != NULL) || (next != NULL))) { PurpleBlistNode *node2; + PurpleBlistNode *parent = purple_blist_node_get_parent(node); + PurpleBlistNode *child = purple_blist_node_get_first_child(parent); alias = purple_buddy_get_contact_alias((PurpleBuddy *)node); /* We've found a buddy that matches this conversation. It's part of a * PurpleContact with more than one PurpleBuddy. Loop through the PurpleBuddies * in the contact and get all the logs. */ - for (node2 = node->parent->child ; node2 != NULL ; node2 = node2->next) + for (node2 = child ; node2 != NULL ; node2 = purple_blist_node_get_sibling_next(node2)) { logs = g_list_concat( purple_log_get_logs(PURPLE_LOG_IM, diff -r 32ad012ef6ac -r 88a66cb4a8d9 pidgin/plugins/ticker/ticker.c --- a/pidgin/plugins/ticker/ticker.c Sun Nov 02 06:41:34 2008 +0000 +++ b/pidgin/plugins/ticker/ticker.c Sun Nov 02 19:14:51 2008 +0000 @@ -91,7 +91,9 @@ PurpleContact *contact = user_data; PurpleBuddy *b = purple_contact_get_priority_buddy(contact); - purple_conversation_new(PURPLE_CONV_TYPE_IM, b->account, b->name); + purple_conversation_new(PURPLE_CONV_TYPE_IM, + purple_buddy_get_account(b), + purple_buddy_get_name(b)); return TRUE; } @@ -217,20 +219,25 @@ static void buddy_ticker_show(void) { - PurpleBuddyList *list = purple_get_blist(); PurpleBlistNode *gnode, *cnode, *bnode; PurpleBuddy *b; - if(!list) - return; - - for(gnode = list->root; gnode; gnode = gnode->next) { + for(gnode = purple_blist_get_root(); + gnode; + gnode = purple_blist_node_get_sibling_next(gnode)) + { if(!PURPLE_BLIST_NODE_IS_GROUP(gnode)) continue; - for(cnode = gnode->child; cnode; cnode = cnode->next) { + for(cnode = purple_blist_node_get_first_child(gnode); + cnode; + cnode = purple_blist_node_get_sibling_next(cnode)) + { if(!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) continue; - for(bnode = cnode->child; bnode; bnode = bnode->next) { + for(bnode = purple_blist_node_get_first_child(cnode); + bnode; + bnode = purple_blist_node_get_sibling_next(bnode)) + { if(!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) continue; b = (PurpleBuddy *)bnode;