diff --git a/src/profanity.c b/src/profanity.c index edec2fb3..84af8ab1 100644 --- a/src/profanity.c +++ b/src/profanity.c @@ -199,6 +199,13 @@ prof_handle_subscription(const char *from, jabber_subscr_t type) } } +void +prof_handle_roster_add(const char * const barejid, const char * const name) +{ + ui_roster_add(barejid, name); + ui_current_page_off(); +} + void prof_handle_login_account_success(char *account_name) { diff --git a/src/profanity.h b/src/profanity.h index 0f4699a7..7f96b04e 100644 --- a/src/profanity.h +++ b/src/profanity.h @@ -80,5 +80,6 @@ void prof_handle_disco_info(const char *from, GSList *identities, GSList *features); void prof_handle_duck_help(const char * const result); void prof_handle_duck_result(const char * const result); +void prof_handle_roster_add(const char * const barejid, const char * const name); #endif diff --git a/src/ui/core.c b/src/ui/core.c index 9f86332e..8cb8831b 100644 --- a/src/ui/core.c +++ b/src/ui/core.c @@ -439,6 +439,16 @@ ui_incoming_msg(const char * const from, const char * const message, FREE_SET_NULL(display_from); } +void +ui_roster_add(const char * const barejid, const char * const name) +{ + if (name != NULL) { + cons_show("Roster item added: %s (%s)", barejid, name); + } else { + cons_show("Roster item added: %s", barejid); + } +} + void ui_contact_online(const char * const barejid, const char * const resource, const char * const show, const char * const status, GDateTime *last_activity) diff --git a/src/ui/ui.h b/src/ui/ui.h index be57a0be..8f5610fc 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -112,6 +112,7 @@ void ui_room_member_nick_change(const char * const room, void ui_room_nick_change(const char * const room, const char * const nick); void ui_room_member_presence(const char * const room, const char * const nick, const char * const show, const char * const status); +void ui_roster_add(const char * const barejid, const char * const name); // contact status functions void ui_status_room(const char * const contact); diff --git a/src/xmpp/roster.c b/src/xmpp/roster.c index 18000cd4..b5e94f42 100644 --- a/src/xmpp/roster.c +++ b/src/xmpp/roster.c @@ -27,6 +27,7 @@ #include #include "log.h" +#include "profanity.h" #include "tools/autocomplete.h" #include "xmpp/connection.h" #include "xmpp/roster.h" @@ -157,7 +158,7 @@ roster_remove(const char * const barejid) gboolean roster_add(const char * const barejid, const char * const name, GSList *groups, - const char * const subscription, gboolean pending_out) + const char * const subscription, gboolean pending_out, gboolean from_initial) { gboolean added = FALSE; PContact contact = g_hash_table_lookup(contacts, barejid); @@ -176,6 +177,10 @@ roster_add(const char * const barejid, const char * const name, GSList *groups, autocomplete_add(barejid_ac, strdup(barejid)); _add_name_and_barejid(name, barejid); + if (!from_initial) { + prof_handle_roster_add(barejid, name); + } + added = TRUE; } @@ -189,7 +194,7 @@ roster_update(const char * const barejid, const char * const name, PContact contact = g_hash_table_lookup(contacts, barejid); if (contact == NULL) { - roster_add(barejid, name, groups, subscription, pending_out); + roster_add(barejid, name, groups, subscription, pending_out, FALSE); } else { p_contact_set_subscription(contact, subscription); p_contact_set_pending_out(contact, pending_out); @@ -444,7 +449,7 @@ _roster_handle_result(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, GSList *groups = _get_groups_from_item(item); - gboolean added = roster_add(barejid, name, groups, sub, pending_out); + gboolean added = roster_add(barejid, name, groups, sub, pending_out, TRUE); if (!added) { log_warning("Attempt to add contact twice: %s", barejid); diff --git a/src/xmpp/xmpp.h b/src/xmpp/xmpp.h index 5469519b..345fa8f1 100644 --- a/src/xmpp/xmpp.h +++ b/src/xmpp/xmpp.h @@ -140,7 +140,8 @@ char * roster_find_contact(char *search_str); char * roster_find_jid(char *search_str); char * roster_find_resource(char *search_str); gboolean roster_add(const char * const barejid, const char * const name, - GSList *groups, const char * const subscription, gboolean pending_out); + GSList *groups, const char * const subscription, gboolean pending_out, + gboolean from_initial); void roster_change_name(const char * const barejid, const char * const new_name); char * roster_barejid_from_name(const char * const name); void roster_add_new(const char * const barejid, const char * const name);