diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/profanity.c | 7 | ||||
-rw-r--r-- | src/profanity.h | 1 | ||||
-rw-r--r-- | src/roster_list.c | 70 | ||||
-rw-r--r-- | src/roster_list.h | 2 | ||||
-rw-r--r-- | src/server_events.c | 7 | ||||
-rw-r--r-- | src/server_events.h | 1 | ||||
-rw-r--r-- | src/xmpp/roster.c | 12 |
7 files changed, 49 insertions, 51 deletions
diff --git a/src/profanity.c b/src/profanity.c index 9178d056..dae91aea 100644 --- a/src/profanity.c +++ b/src/profanity.c @@ -118,13 +118,6 @@ prof_run(const int disable_tls, char *log_level, char *account_name) } 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_idle(void) { jabber_conn_status_t status = jabber_get_connection_status(); diff --git a/src/profanity.h b/src/profanity.h index 5e826fc4..c55e6c47 100644 --- a/src/profanity.h +++ b/src/profanity.h @@ -30,6 +30,5 @@ void prof_run(const int disable_tls, char *log_level, char *account_name); void prof_handle_idle(void); void prof_handle_activity(void); -void prof_handle_roster_add(const char * const barejid, const char * const name); #endif diff --git a/src/roster_list.c b/src/roster_list.c index 7945101a..1341320f 100644 --- a/src/roster_list.c +++ b/src/roster_list.c @@ -30,7 +30,6 @@ #include "contact.h" #include "jid.h" #include "tools/autocomplete.h" -#include "profanity.h" // nicknames static Autocomplete name_ac; @@ -201,60 +200,51 @@ roster_update(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); + assert(contact != NULL); - if (contact == NULL) { - roster_add(barejid, name, groups, subscription, pending_out, FALSE); - } else { - p_contact_set_subscription(contact, subscription); - p_contact_set_pending_out(contact, pending_out); + p_contact_set_subscription(contact, subscription); + p_contact_set_pending_out(contact, pending_out); - const char * const new_name = name; - const char * current_name = NULL; - if (p_contact_name(contact) != NULL) { - current_name = strdup(p_contact_name(contact)); - } + const char * const new_name = name; + const char * current_name = NULL; + if (p_contact_name(contact) != NULL) { + current_name = strdup(p_contact_name(contact)); + } - p_contact_set_name(contact, new_name); - p_contact_set_groups(contact, groups); - _replace_name(current_name, new_name, barejid); + p_contact_set_name(contact, new_name); + p_contact_set_groups(contact, groups); + _replace_name(current_name, new_name, barejid); - // add groups - while (groups != NULL) { - autocomplete_add(groups_ac, groups->data); - groups = g_slist_next(groups); - } + // add groups + while (groups != NULL) { + autocomplete_add(groups_ac, groups->data); + groups = g_slist_next(groups); } } gboolean roster_add(const char * const barejid, const char * const name, GSList *groups, - const char * const subscription, gboolean pending_out, gboolean from_initial) + const char * const subscription, gboolean pending_out) { - gboolean added = FALSE; PContact contact = g_hash_table_lookup(contacts, barejid); + if (contact != NULL) { + return FALSE; + } - if (contact == NULL) { - 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); - - if (!from_initial) { - prof_handle_roster_add(barejid, name); - } + contact = p_contact_new(barejid, name, groups, subscription, NULL, + pending_out); - added = TRUE; + // add groups + while (groups != NULL) { + autocomplete_add(groups_ac, groups->data); + groups = g_slist_next(groups); } - return added; + g_hash_table_insert(contacts, strdup(barejid), contact); + autocomplete_add(barejid_ac, barejid); + _add_name_and_barejid(name, barejid); + + return TRUE; } char * diff --git a/src/roster_list.h b/src/roster_list.h index a7198e5c..58490609 100644 --- a/src/roster_list.h +++ b/src/roster_list.h @@ -42,7 +42,7 @@ 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); gboolean roster_add(const char * const barejid, const char * const name, GSList *groups, - const char * const subscription, gboolean pending_out, gboolean from_initial); + const char * const subscription, gboolean pending_out); char * roster_barejid_from_name(const char * const name); GSList * roster_get_contacts(void); gboolean roster_has_pending_subscriptions(void); diff --git a/src/server_events.c b/src/server_events.c index cbf2de3c..ac940c86 100644 --- a/src/server_events.c +++ b/src/server_events.c @@ -366,3 +366,10 @@ handle_roster_remove(const char * const barejid) ui_roster_remove(barejid); ui_current_page_off(); } + +void +handle_roster_add(const char * const barejid, const char * const name) +{ + ui_roster_add(barejid, name); + ui_current_page_off(); +} diff --git a/src/server_events.h b/src/server_events.h index b79e9c7b..ce3c3b49 100644 --- a/src/server_events.h +++ b/src/server_events.h @@ -71,5 +71,6 @@ void handle_group_add(const char * const contact, void handle_group_remove(const char * const contact, const char * const group); void handle_roster_remove(const char * const barejid); +void handle_roster_add(const char * const barejid, const char * const name); #endif diff --git a/src/xmpp/roster.c b/src/xmpp/roster.c index 3da8c7d3..a70436e7 100644 --- a/src/xmpp/roster.c +++ b/src/xmpp/roster.c @@ -255,7 +255,15 @@ _roster_handle_push(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, GSList *groups = _get_groups_from_item(item); // update the local roster - roster_update(barejid, name, groups, sub, pending_out); + PContact contact = roster_get_contact(barejid); + if (contact == NULL) { + gboolean added = roster_add(barejid, name, groups, sub, pending_out); + if (added) { + handle_roster_add(barejid, name); + } + } else { + roster_update(barejid, name, groups, sub, pending_out); + } } return 1; @@ -289,7 +297,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, TRUE); + gboolean added = roster_add(barejid, name, groups, sub, pending_out); if (!added) { log_warning("Attempt to add contact twice: %s", barejid); |