diff --git a/src/plugins/api.c b/src/plugins/api.c index 31db05e3..032ae86a 100644 --- a/src/plugins/api.c +++ b/src/plugins/api.c @@ -240,7 +240,7 @@ api_get_current_nick(void) char* api_get_name_from_roster(const char* barejid) { - return roster_get_display_name(barejid); + return strdup(roster_get_display_name(barejid)); } char* diff --git a/src/plugins/python_api.c b/src/plugins/python_api.c index 091b3b4a..35a97d15 100644 --- a/src/plugins/python_api.c +++ b/src/plugins/python_api.c @@ -452,7 +452,7 @@ python_api_get_name_from_roster(PyObject* self, PyObject* args) char* barejid_str = python_str_or_unicode_to_string(barejid); allow_python_threads(); - char* name = roster_get_display_name(barejid_str); + char* name = strdup(roster_get_display_name(barejid_str)); free(barejid_str); disable_python_threads(); if (name) { diff --git a/src/ui/chatwin.c b/src/ui/chatwin.c index cf0b675f..4afa8c95 100644 --- a/src/ui/chatwin.c +++ b/src/ui/chatwin.c @@ -295,19 +295,7 @@ chatwin_recipient_gone(ProfChatWin* chatwin) { assert(chatwin != NULL); - const char* display_usr = NULL; - PContact contact = roster_get_contact(chatwin->barejid); - if (contact) { - if (p_contact_name(contact)) { - display_usr = p_contact_name(contact); - } else { - display_usr = chatwin->barejid; - } - } else { - display_usr = chatwin->barejid; - } - - win_println((ProfWin*)chatwin, THEME_GONE, "!", "<- %s has left the conversation.", display_usr); + win_println((ProfWin*)chatwin, THEME_GONE, "!", "<- %s has left the conversation.", roster_get_display_name(chatwin->barejid)); } void diff --git a/src/ui/console.c b/src/ui/console.c index dfbbfc14..c46faed5 100644 --- a/src/ui/console.c +++ b/src/ui/console.c @@ -267,20 +267,7 @@ cons_show_tlscert(const TLSCertificate* cert) void cons_show_typing(const char* const barejid) { - ProfWin* console = wins_get_console(); - const char* display_usr = NULL; - PContact contact = roster_get_contact(barejid); - if (contact) { - if (p_contact_name(contact)) { - display_usr = p_contact_name(contact); - } else { - display_usr = barejid; - } - } else { - display_usr = barejid; - } - - win_println(console, THEME_TYPING, "-", "!! %s is typing a messageā€¦", display_usr); + win_println(wins_get_console(), THEME_TYPING, "-", "!! %s is typing a messageā€¦", roster_get_display_name(barejid)); cons_alert(NULL); } @@ -925,17 +912,7 @@ cons_show_status(const char* const barejid) void cons_show_room_invite(const char* const invitor, const char* const room, const char* const reason) { - auto_char char* display_from = NULL; - PContact contact = roster_get_contact(invitor); - if (contact) { - if (p_contact_name(contact)) { - display_from = strdup(p_contact_name(contact)); - } else { - display_from = strdup(invitor); - } - } else { - display_from = strdup(invitor); - } + const char* display_from = roster_get_display_name(invitor); cons_show(""); cons_show("Chat room invite received:"); diff --git a/src/ui/core.c b/src/ui/core.c index 39535eaa..8c85070c 100644 --- a/src/ui/core.c +++ b/src/ui/core.c @@ -299,18 +299,7 @@ ui_contact_typing(const char* const barejid, const char* const resource) is_current = wins_is_current(window); } if (!is_current || (is_current && prefs_get_boolean(PREF_NOTIFY_TYPING_CURRENT))) { - PContact contact = roster_get_contact(barejid); - char const* display_usr = NULL; - if (contact) { - if (p_contact_name(contact)) { - display_usr = p_contact_name(contact); - } else { - display_usr = barejid; - } - } else { - display_usr = barejid; - } - notify_typing(display_usr); + notify_typing(roster_get_display_name(barejid)); } } } diff --git a/src/xmpp/contact.c b/src/xmpp/contact.c index 36ad3ce9..fd2889b9 100644 --- a/src/xmpp/contact.c +++ b/src/xmpp/contact.c @@ -192,6 +192,8 @@ p_contact_barejid_collate_key(const PContact contact) const char* p_contact_name(const PContact contact) { + if (!contact) + return NULL; return contact->name; } diff --git a/src/xmpp/roster_list.c b/src/xmpp/roster_list.c index b5a60db7..40b8210d 100644 --- a/src/xmpp/roster_list.c +++ b/src/xmpp/roster_list.c @@ -183,25 +183,12 @@ roster_get_contact(const char* const barejid) return contact; } -char* +const char* roster_get_display_name(const char* const barejid) { assert(roster != NULL); - GString* result = g_string_new(""); - - PContact contact = roster_get_contact(barejid); - if (contact) { - if (p_contact_name(contact)) { - g_string_append(result, p_contact_name(contact)); - } else { - g_string_append(result, barejid); - } - } else { - g_string_append(result, barejid); - } - - return g_string_free(result, FALSE); + return p_contact_name(roster_get_contact(barejid)) ?: barejid; } gchar* @@ -215,25 +202,12 @@ roster_get_msg_display_name(const char* const barejid, const char* const resourc return incoming_str; } - GString* result = g_string_new(""); - - PContact contact = roster_get_contact(barejid); - if (contact) { - if (p_contact_name(contact)) { - g_string_append(result, p_contact_name(contact)); - } else { - g_string_append(result, barejid); - } - } else { - g_string_append(result, barejid); - } + const char* contact_name = roster_get_display_name(barejid); if (resource && prefs_get_boolean(PREF_RESOURCE_MESSAGE)) { - g_string_append(result, "/"); - g_string_append(result, resource); + return g_strdup_printf("%s/%s", contact_name, resource); } - - return g_string_free(result, FALSE); + return g_strdup(contact_name); } gboolean diff --git a/src/xmpp/roster_list.h b/src/xmpp/roster_list.h index c31fe201..be29bd69 100644 --- a/src/xmpp/roster_list.h +++ b/src/xmpp/roster_list.h @@ -70,7 +70,7 @@ GList* roster_get_groups(void); char* roster_group_autocomplete(const char* const search_str, gboolean previous, void* context); char* roster_barejid_autocomplete(const char* const search_str, gboolean previous, void* context); GSList* roster_get_contacts_by_presence(const char* const presence); -char* roster_get_display_name(const char* const barejid); +const char* roster_get_display_name(const char* const barejid); gchar* roster_get_msg_display_name(const char* const barejid, const char* const resource); gint roster_compare_name(PContact a, PContact b); gint roster_compare_presence(PContact a, PContact b);