示例#1
0
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);
    }
}
示例#2
0
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;
}
示例#3
0
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;
}