# HG changeset patch # User Sadrul Habib Chowdhury # Date 1201379546 0 # Node ID 6bb29f94862c45f565be8f707875d0c00346df16 # Parent eddcf0f2da51a5f85c997682a8e8870129f211c6 Add API so Finch doesn't need to touch the internals of PurpleBlistNode. diff -r eddcf0f2da51 -r 6bb29f94862c ChangeLog.API --- a/ChangeLog.API Sat Jan 26 20:28:35 2008 +0000 +++ b/ChangeLog.API Sat Jan 26 20:32:26 2008 +0000 @@ -34,6 +34,7 @@ * purple_blist_node_get_parent * purple_blist_node_get_first_child * purple_blist_node_get_sibling_next + * purple_blist_node_get_sibling_prev * purple_chat_get_account * Added last_received to PurpleConnection, the time_t of the last received packet. diff -r eddcf0f2da51 -r 6bb29f94862c finch/gntblist.c --- a/finch/gntblist.c Sat Jan 26 20:28:35 2008 +0000 +++ b/finch/gntblist.c Sat Jan 26 20:32:26 2008 +0000 @@ -2158,7 +2158,7 @@ static int blist_node_compare_position(PurpleBlistNode *n1, PurpleBlistNode *n2) { - while ((n1 = n1->prev) != NULL) + while ((n1 = purple_blist_node_get_sibling_prev(n1)) != NULL) if (n1 == n2) return 1; return -1; @@ -2171,10 +2171,10 @@ char *us1, *us2; int ret; - if (n1->type != n2->type) + if (purple_blist_node_get_type(n1) != purple_blist_node_get_type(n2)) return blist_node_compare_position(n1, n2); - switch (n1->type) + switch (purple_blist_node_get_type(n1)) { case PURPLE_BLIST_CHAT_NODE: s1 = purple_chat_get_name((PurpleChat*)n1); @@ -2206,10 +2206,10 @@ { int ret; - if (n1->type != n2->type) + if (purple_blist_node_get_type(n1) != purple_blist_node_get_type(n2)) return blist_node_compare_position(n1, n2); - switch (n1->type) { + switch (purple_blist_node_get_type(n1)) { case PURPLE_BLIST_CONTACT_NODE: n1 = (PurpleBlistNode*)purple_contact_get_priority_buddy((PurpleContact*)n1); n2 = (PurpleBlistNode*)purple_contact_get_priority_buddy((PurpleContact*)n2); @@ -2251,10 +2251,10 @@ int ret; PurpleBuddy *b1, *b2; - if (n1->type != n2->type) + if (purple_blist_node_get_type(n1) != purple_blist_node_get_type(n2)) return blist_node_compare_position(n1, n2); - switch (n1->type) { + switch (purple_blist_node_get_type(n1)) { case PURPLE_BLIST_BUDDY_NODE: b1 = (PurpleBuddy*)n1; b2 = (PurpleBuddy*)n2; diff -r eddcf0f2da51 -r 6bb29f94862c finch/gntconv.c --- a/finch/gntconv.c Sat Jan 26 20:28:35 2008 +0000 +++ b/finch/gntconv.c Sat Jan 26 20:32:26 2008 +0000 @@ -79,7 +79,7 @@ switch (purple_conversation_get_type(conv)) { case PURPLE_CONV_TYPE_IM: node = (PurpleBlistNode*)purple_find_buddy(conv->account, conv->name); - node = node ? node->parent : NULL; + node = node ? purple_blist_node_get_parent(node) : NULL; break; case PURPLE_CONV_TYPE_CHAT: node = (PurpleBlistNode*)purple_blist_find_chat(conv->account, conv->name); @@ -236,7 +236,8 @@ if (!buddy) return NULL; - for (node = ((PurpleBlistNode*)buddy)->parent->child; node; node = node->next) { + for (node = purple_blist_node_get_first_child(purple_blist_node_get_parent((PurpleBlistNode*)buddy)); + node; node = purple_blist_node_get_sibling_next(node)) { if (node == (PurpleBlistNode*)buddy) continue; if ((ret = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, @@ -476,7 +477,8 @@ for (; buds; buds = g_slist_delete_link(buds, buds)) { PurpleBlistNode *node = (PurpleBlistNode *)purple_buddy_get_contact((PurpleBuddy *)buds->data); - for (node = node->child; node != NULL; node = node->next) { + for (node = purple_blist_node_get_first_child(node); node != NULL; + node = purple_blist_node_get_sibling_next(node)) { PurpleBuddy *buddy = (PurpleBuddy *)node; PurpleAccount *account = purple_buddy_get_account(buddy); if (purple_account_is_connected(account)) { diff -r eddcf0f2da51 -r 6bb29f94862c finch/gntrequest.c --- a/finch/gntrequest.c Sat Jan 26 20:28:35 2008 +0000 +++ b/finch/gntrequest.c Sat Jan 26 20:32:26 2008 +0000 @@ -424,7 +424,8 @@ *screenname = entry; } else if (hint && !strcmp(hint, "group")) { PurpleBlistNode *node; - for (node = purple_blist_get_root(); node; node = node->next) { + for (node = purple_blist_get_root(); node; + node = purple_blist_node_get_sibling_next(node)) { if (PURPLE_BLIST_NODE_IS_GROUP(node)) gnt_entry_add_suggest(GNT_ENTRY(entry), ((PurpleGroup *)node)->name); } diff -r eddcf0f2da51 -r 6bb29f94862c finch/plugins/gnthistory.c --- a/finch/plugins/gnthistory.c Sat Jan 26 20:28:35 2008 +0000 +++ b/finch/plugins/gnthistory.c Sat Jan 26 20:32:26 2008 +0000 @@ -51,8 +51,7 @@ PurpleMessageFlags mflag; convtype = purple_conversation_get_type(c); - if (convtype == PURPLE_CONV_TYPE_IM) - { + if (convtype == PURPLE_CONV_TYPE_IM) { GSList *buddies; GSList *cur; @@ -62,17 +61,17 @@ return; /* Find buddies for this conversation. */ - buddies = purple_find_buddies(account, name); + buddies = purple_find_buddies(account, name); /* If we found at least one buddy, save the first buddy's alias. */ if (buddies != NULL) alias = purple_buddy_get_contact_alias((PurpleBuddy *)buddies->data); - for (cur = buddies; cur != NULL; cur = cur->next) - { - PurpleBlistNode *node = cur->data; - if ((node != NULL) && ((node->prev != NULL) || (node->next != NULL))) - { + for (cur = buddies; cur != NULL; cur = cur->next) { + PurpleBlistNode *node = cur->data; + if ((node != NULL) && + ((purple_blist_node_get_sibling_prev(node) != NULL) || + (purple_blist_node_get_sibling_next(node) != NULL))) { PurpleBlistNode *node2; alias = purple_buddy_get_contact_alias((PurpleBuddy *)node); @@ -80,26 +79,24 @@ /* 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 = purple_blist_node_get_first_child(purple_blist_node_get_parent(node)); + node2 != NULL ; node2 = purple_blist_node_get_sibling_next(node2)) { logs = g_list_concat( - purple_log_get_logs(PURPLE_LOG_IM, - purple_buddy_get_name((PurpleBuddy *)node2), - purple_buddy_get_account((PurpleBuddy *)node2)), - logs); + purple_log_get_logs(PURPLE_LOG_IM, + purple_buddy_get_name((PurpleBuddy *)node2), + purple_buddy_get_account((PurpleBuddy *)node2)), + logs); } break; - } - } - g_slist_free(buddies); + } + } + g_slist_free(buddies); if (logs == NULL) logs = purple_log_get_logs(PURPLE_LOG_IM, name, account); else logs = g_list_sort(logs, purple_log_compare); - } - else if (convtype == PURPLE_CONV_TYPE_CHAT) - { + } else if (convtype == PURPLE_CONV_TYPE_CHAT) { /* If we're not logging, don't show anything. * Otherwise, we might show a very old log. */ if (!purple_prefs_get_bool("/purple/logging/log_chats")) @@ -115,7 +112,7 @@ history = purple_log_read((PurpleLog*)logs->data, &flags); header = g_strdup_printf(_("Conversation with %s on %s:
"), alias, - purple_date_format_full(localtime(&((PurpleLog *)logs->data)->time))); + purple_date_format_full(localtime(&((PurpleLog *)logs->data)->time))); purple_conversation_write(c, "", header, mflag, time(NULL)); g_free(header); diff -r eddcf0f2da51 -r 6bb29f94862c libpurple/blist.c --- a/libpurple/blist.c Sat Jan 26 20:28:35 2008 +0000 +++ b/libpurple/blist.c Sat Jan 26 20:32:26 2008 +0000 @@ -768,6 +768,11 @@ return node? node->next : NULL; } +PurpleBlistNode *purple_blist_node_get_sibling_prev(PurpleBlistNode *node) +{ + return node? node->prev : NULL; +} + void purple_blist_update_buddy_status(PurpleBuddy *buddy, PurpleStatus *old_status) { diff -r eddcf0f2da51 -r 6bb29f94862c libpurple/blist.h --- a/libpurple/blist.h Sat Jan 26 20:28:35 2008 +0000 +++ b/libpurple/blist.h Sat Jan 26 20:32:26 2008 +0000 @@ -53,10 +53,10 @@ } PurpleBlistNodeType; -#define PURPLE_BLIST_NODE_IS_CHAT(n) ((n)->type == PURPLE_BLIST_CHAT_NODE) -#define PURPLE_BLIST_NODE_IS_BUDDY(n) ((n)->type == PURPLE_BLIST_BUDDY_NODE) -#define PURPLE_BLIST_NODE_IS_CONTACT(n) ((n)->type == PURPLE_BLIST_CONTACT_NODE) -#define PURPLE_BLIST_NODE_IS_GROUP(n) ((n)->type == PURPLE_BLIST_GROUP_NODE) +#define PURPLE_BLIST_NODE_IS_CHAT(n) (purple_blist_node_get_type(n) == PURPLE_BLIST_CHAT_NODE) +#define PURPLE_BLIST_NODE_IS_BUDDY(n) (purple_blist_node_get_type(n) == PURPLE_BLIST_BUDDY_NODE) +#define PURPLE_BLIST_NODE_IS_CONTACT(n) (purple_blist_node_get_type(n) == PURPLE_BLIST_CONTACT_NODE) +#define PURPLE_BLIST_NODE_IS_GROUP(n) (purple_blist_node_get_type(n) == PURPLE_BLIST_GROUP_NODE) #define PURPLE_BUDDY_IS_ONLINE(b) \ ((b) != NULL && purple_account_is_connected((b)->account) && \ @@ -234,6 +234,7 @@ * @see purple_blist_node_get_parent * @see purple_blist_node_get_first_child * @see purple_blist_node_get_sibling_next + * @see purple_blist_node_get_sibling_prev */ PurpleBlistNode *purple_blist_node_next(PurpleBlistNode *node, gboolean offline); @@ -245,6 +246,7 @@ * @since 2.4.0 * @see purple_blist_node_get_first_child * @see purple_blist_node_get_sibling_next + * @see purple_blist_node_get_sibling_prev * @see purple_blist_node_next */ PurpleBlistNode *purple_blist_node_get_parent(PurpleBlistNode *node); @@ -257,6 +259,7 @@ * @since 2.4.0 * @see purple_blist_node_get_parent * @see purple_blist_node_get_sibling_next + * @see purple_blist_node_get_sibling_prev * @see purple_blist_node_next */ PurpleBlistNode *purple_blist_node_get_first_child(PurpleBlistNode *node); @@ -269,11 +272,25 @@ * @since 2.4.0 * @see purple_blist_node_get_parent * @see purple_blist_node_get_first_child + * @see purple_blist_node_get_sibling_prev * @see purple_blist_node_next */ PurpleBlistNode *purple_blist_node_get_sibling_next(PurpleBlistNode *node); /** + * Returns the previous sibling node of a given node. + * + * @param node A node. + * @return The sibling node. + * @since 2.4.0 + * @see purple_blist_node_get_parent + * @see purple_blist_node_get_first_child + * @see purple_blist_node_get_sibling_next + * @see purple_blist_node_next + */ +PurpleBlistNode *purple_blist_node_get_sibling_prev(PurpleBlistNode *node); + +/** * Shows the buddy list, creating a new one if necessary. */ void purple_blist_show(void);