diff --git a/src/command/commands.c b/src/command/commands.c index 1bc53ed6..a301efd4 100644 --- a/src/command/commands.c +++ b/src/command/commands.c @@ -1110,7 +1110,10 @@ cmd_roster(gchar **args, struct cmd_help_t help) return TRUE; } - roster_change_name(jid, name); + const char *barejid = p_contact_barejid(contact); + roster_change_name(contact, name); + GSList *groups = p_contact_groups(contact); + roster_send_name_change(barejid, name, groups); if (name == NULL) { cons_show("Nickname for %s removed.", jid); diff --git a/src/roster_list.c b/src/roster_list.c index fa00437b..c4329a3b 100644 --- a/src/roster_list.c +++ b/src/roster_list.c @@ -30,8 +30,8 @@ #include "contact.h" #include "jid.h" #include "tools/autocomplete.h" -#include "xmpp/xmpp.h" #include "profanity.h" +#include "xmpp/xmpp.h" // nicknames static Autocomplete name_ac; @@ -157,21 +157,19 @@ roster_free(void) } void -roster_change_name(const char * const barejid, const char * const new_name) +roster_change_name(PContact contact, const char * const new_name) { - PContact contact = g_hash_table_lookup(contacts, barejid); - const char * current_name = NULL; + assert(contact != NULL); + + const char *current_name = NULL; + const char *barejid = p_contact_barejid(contact); + if (p_contact_name(contact) != NULL) { current_name = strdup(p_contact_name(contact)); } - if (contact != NULL) { - p_contact_set_name(contact, new_name); - _replace_name(current_name, new_name, barejid); - - GSList *groups = p_contact_groups(contact); - roster_send_name_change(barejid, new_name, groups); - } + p_contact_set_name(contact, new_name); + _replace_name(current_name, new_name, barejid); } void diff --git a/src/roster_list.h b/src/roster_list.h index 9382081b..85a4cffc 100644 --- a/src/roster_list.h +++ b/src/roster_list.h @@ -37,7 +37,7 @@ gboolean roster_contact_offline(const char * const barejid, void roster_reset_search_attempts(void); void roster_init(void); void roster_free(void); -void roster_change_name(const char * const barejid, const char * const new_name); +void roster_change_name(PContact contact, const char * const new_name); void roster_remove(const char * const name, const char * const barejid); void roster_update(const char * const barejid, const char * const name, GSList *groups, const char * const subscription, gboolean pending_out);