static void nicklist_rename_list(SERVER_REC *server, void *new_nick_id, const char *old_nick, const char *new_nick, GSList *nicks) { CHANNEL_REC *channel; NICK_REC *nickrec; GSList *tmp; for (tmp = nicks; tmp != NULL; tmp = tmp->next->next) { channel = tmp->data; nickrec = tmp->next->data; /* remove old nick from hash table */ nick_hash_remove(channel, nickrec); if (new_nick_id != NULL) nickrec->unique_id = new_nick_id; g_free(nickrec->nick); nickrec->nick = g_strdup(new_nick); /* add new nick to hash table */ nick_hash_add(channel, nickrec); signal_emit("nicklist changed", 3, channel, nickrec, old_nick); } g_slist_free(nicks); }
/* Remove nick from list */ void nicklist_remove(CHANNEL_REC *channel, NICK_REC *nick) { g_return_if_fail(IS_CHANNEL(channel)); g_return_if_fail(nick != NULL); nick_hash_remove(channel, nick); nicklist_destroy(channel, nick); }
void xmpp_nicklist_rename(MUC_REC *channel, XMPP_NICK_REC *nick, const char *oldnick, const char *newnick) { g_return_if_fail(IS_MUC(channel)); g_return_if_fail(IS_XMPP_NICK(nick)); g_return_if_fail(oldnick != NULL); g_return_if_fail(newnick != NULL); /* remove old nick from hash table */ nick_hash_remove(CHANNEL(channel), NICK(nick)); g_free(nick->nick); nick->nick = g_strdup(newnick); /* add new nick to hash table */ nick_hash_add(CHANNEL(channel), NICK(nick)); signal_emit("nicklist changed", 3, channel, nick, oldnick); if (strcmp(oldnick, channel->nick) == 0) { nicklist_set_own(CHANNEL(channel), NICK(nick)); g_free(channel->nick); channel->nick = g_strdup(newnick); } }