static void _replace_name(const char *const current_name, const char *const new_name, const char *const barejid) { // current handle exists already if (current_name) { autocomplete_remove(name_ac, current_name); g_hash_table_remove(name_to_barejid, current_name); _add_name_and_barejid(new_name, barejid); // no current handle } else if (new_name) { autocomplete_remove(name_ac, barejid); g_hash_table_remove(name_to_barejid, barejid); _add_name_and_barejid(new_name, barejid); } }
gboolean roster_add(const char *const barejid, const char *const name, GSList *groups, const char *const subscription, gboolean pending_out) { assert(roster != NULL); PContact contact = roster_get_contact(barejid); if (contact) { return FALSE; } contact = p_contact_new(barejid, name, groups, subscription, NULL, pending_out); // add groups GSList *curr_new_group = groups; while (curr_new_group) { char *new_group = curr_new_group->data; if (g_hash_table_contains(roster->group_count, new_group)) { int count = GPOINTER_TO_INT(g_hash_table_lookup(roster->group_count, new_group)); g_hash_table_insert(roster->group_count, strdup(new_group), GINT_TO_POINTER(count + 1)); } else { g_hash_table_insert(roster->group_count, strdup(new_group), GINT_TO_POINTER(1)); autocomplete_add(roster->groups_ac, new_group); } curr_new_group = g_slist_next(curr_new_group); } g_hash_table_insert(roster->contacts, strdup(barejid), contact); autocomplete_add(roster->barejid_ac, barejid); _add_name_and_barejid(name, barejid); return TRUE; }
gboolean roster_add(const char * const barejid, const char * const name, GSList *groups, const char * const subscription, gboolean pending_out) { PContact contact = g_hash_table_lookup(contacts, barejid); if (contact != NULL) { return FALSE; } contact = p_contact_new(barejid, name, groups, subscription, NULL, pending_out); // add groups while (groups != NULL) { autocomplete_add(groups_ac, groups->data); groups = g_slist_next(groups); } g_hash_table_insert(contacts, strdup(barejid), contact); autocomplete_add(barejid_ac, barejid); _add_name_and_barejid(name, barejid); return TRUE; }