wip - Store roles and affiliations with occupants

This commit is contained in:
James Booth
2014-09-30 19:46:35 +01:00
parent b7088363e6
commit 0365e88b7b
6 changed files with 41 additions and 24 deletions

View File

@@ -766,20 +766,32 @@ _muc_user_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza,
}
char *show_str = stanza_get_show(stanza, "online");
char *role = NULL;
char *affiliation = NULL;
xmpp_stanza_t *x = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_MUC_USER);
if (x) {
xmpp_stanza_t *item = xmpp_stanza_get_child_by_name(x, STANZA_NAME_ITEM);
if (item) {
role = xmpp_stanza_get_attribute(item, "role");
affiliation = xmpp_stanza_get_attribute(item, "affiliation");
}
}
if (!muc_roster_complete(from_room)) {
muc_roster_add(from_room, from_nick, show_str, status_str);
muc_roster_add(from_room, from_nick, role, affiliation, show_str, status_str);
} else {
char *old_nick = muc_roster_nick_change_complete(from_room, from_nick);
if (old_nick != NULL) {
muc_roster_add(from_room, from_nick, show_str, status_str);
muc_roster_add(from_room, from_nick, role, affiliation, show_str, status_str);
handle_room_member_nick_change(from_room, old_nick, from_nick);
free(old_nick);
} else {
if (!muc_roster_contains_nick(from_room, from_nick)) {
handle_room_member_online(from_room, from_nick, show_str, status_str);
handle_room_member_online(from_room, from_nick, role, affiliation, show_str, status_str);
} else {
handle_room_member_presence(from_room, from_nick, show_str, status_str);
handle_room_member_presence(from_room, from_nick, role, affiliation, show_str, status_str);
}
}
}