# HG changeset patch # User Nathan Walp # Date 1062781479 0 # Node ID ea289c6f23822d858044d3ab1b90a70e3644e6fa # Parent 47e49e3c00f44172beeee8f79ca482570a324867 [gaim-migrate @ 7287] fix a bug with removing buddies, and the start of support for aliasing contacts committer: Tailor Script diff -r 47e49e3c00f4 -r ea289c6f2382 src/blist.c --- a/src/blist.c Fri Sep 05 16:53:18 2003 +0000 +++ b/src/blist.c Fri Sep 05 17:04:39 2003 +0000 @@ -665,6 +665,21 @@ return c; } +void gaim_contact_set_alias(GaimContact* contact, const char *alias) +{ + g_return_if_fail(contact != NULL); + + if(contact->alias) + g_free(contact->alias); + + contact->alias = g_strdup(alias); +} + +const char *gaim_contact_get_alias(GaimContact* contact) +{ + return contact ? contact->alias : NULL; +} + GaimGroup *gaim_group_new(const char *name) { GaimGroup *g = gaim_find_group(name); @@ -894,10 +909,9 @@ node->next->prev = node->prev; if(cnode->child == node) { cnode->child = node->next; - if(!cnode->child) - gaim_blist_remove_contact((GaimContact*)cnode); } + hb.name = normalize(buddy->name); hb.account = buddy->account; hb.group = ((GaimBlistNode*)buddy)->parent->parent; @@ -911,6 +925,9 @@ g_free(buddy->name); g_free(buddy->alias); g_free(buddy); + + if(!cnode->child) + gaim_blist_remove_contact((GaimContact*)cnode); } void gaim_blist_remove_chat (GaimBlistChat *chat) @@ -1029,12 +1046,20 @@ const char * gaim_get_buddy_alias (GaimBuddy *buddy) { - const char *ret = gaim_get_buddy_alias_only(buddy); + GaimContact *contact; + const char *ret; + + if(!buddy) + return _("Unknown"); - if(!ret) - return buddy ? buddy->name : _("Unknown"); + contact = (GaimContact*)((GaimBlistNode*)buddy)->parent; - return ret; + if(contact && contact->alias) + return contact->alias; + + ret= gaim_get_buddy_alias_only(buddy); + + return ret ? ret : buddy->name; } const char *gaim_blist_chat_get_name(GaimBlistChat *chat) @@ -1758,12 +1783,25 @@ gaim_blist_get_last_sibling(gaimbuddylist->root)); } } else if(!strcmp(element_name, "contact")) { + char *alias = NULL; tag_stack = g_list_prepend(tag_stack, GINT_TO_POINTER(BLIST_TAG_CONTACT)); + for(i=0; attribute_names[i]; i++) { + if(!strcmp(attribute_names[i], "alias")) { + g_free(alias); + alias = g_strdup(attribute_values[i]); + } + } + blist_parser_contact = gaim_contact_new(); gaim_blist_add_contact(blist_parser_contact, blist_parser_group, gaim_blist_get_last_sibling(((GaimBlistNode*)blist_parser_group)->child)); + + if(alias) { + gaim_contact_set_alias(blist_parser_contact, alias); + g_free(alias); + } } else if(!strcmp(element_name, "chat")) { tag_stack = g_list_prepend(tag_stack, GINT_TO_POINTER(BLIST_TAG_CHAT)); for(i=0; attribute_names[i]; i++) { @@ -2210,7 +2248,14 @@ g_hash_table_foreach(group->settings, blist_print_group_settings, file); for(cnode = gnode->child; cnode; cnode = cnode->next) { if(GAIM_BLIST_NODE_IS_CONTACT(cnode)) { - fprintf(file, "\t\t\t\n"); + GaimContact *contact = (GaimContact*)cnode; + fprintf(file, "\t\t\talias) { + char *alias = g_markup_escape_text(contact->alias, -1); + fprintf(file, " alias=\"%s\"", alias); + g_free(alias); + } + fprintf(file, ">\n"); for(bnode = cnode->child; bnode; bnode = bnode->next) { if(GAIM_BLIST_NODE_IS_BUDDY(bnode)) { diff -r 47e49e3c00f4 -r ea289c6f2382 src/blist.h --- a/src/blist.h Fri Sep 05 16:53:18 2003 +0000 +++ b/src/blist.h Fri Sep 05 17:04:39 2003 +0000 @@ -105,10 +105,11 @@ * A contact. This contains everything Gaim will ever need to know about a contact. */ struct _GaimContact { - GaimBlistNode node; /**< The node that this contact inherits from. */ - int totalsize; /**< The number of buddies in this contact */ - int currentsize; /**< The number of buddies in this contact corresponding to online accounts */ - int online; /**< The number of buddies in this contact who are currently online */ + GaimBlistNode node; /**< The node that this contact inherits from. */ + char *alias; /**< The user-set alias of the contact */ + int totalsize; /**< The number of buddies in this contact */ + int currentsize; /**< The number of buddies in this contact corresponding to online accounts */ + int online; /**< The number of buddies in this contact who are currently online */ }; @@ -408,6 +409,22 @@ GaimBuddy *gaim_contact_get_priority_buddy(GaimContact *contact); /** + * Sets the alias for a contact. + * + * @param contact The contact + * @param alias The alias to set, or NULL to unset + */ +void gaim_contact_set_alias(GaimContact *contact, const char *alias); + +/** + * Gets the alias for a contact. + * + * @param contact The contact + * @return The alias, or NULL if it is not set. + */ +const char *gaim_contact_get_alias(GaimContact *contact); + +/** * Removes a buddy from the buddy list and frees the memory allocated to it. * * @param buddy The buddy to be removed