Set members only property when getting room features
This commit is contained in:
13
src/muc.c
13
src/muc.c
@@ -210,6 +210,19 @@ muc_set_requires_config(const char * const room, gboolean val)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
muc_set_features(const char * const room, GSList *features)
|
||||||
|
{
|
||||||
|
ChatRoom *chat_room = g_hash_table_lookup(rooms, room);
|
||||||
|
if (chat_room && features) {
|
||||||
|
if (g_slist_find_custom(features, "muc_membersonly", (GCompareFunc)g_strcmp0)) {
|
||||||
|
chat_room->member_type = MUC_MEMBER_TYPE_MEMBERS_ONLY;
|
||||||
|
} else {
|
||||||
|
chat_room->member_type = MUC_MEMBER_TYPE_PUBLIC;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Returns TRUE if the user is currently in the room
|
* Returns TRUE if the user is currently in the room
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -82,6 +82,8 @@ gboolean muc_autojoin(const char * const room);
|
|||||||
|
|
||||||
GList* muc_rooms(void);
|
GList* muc_rooms(void);
|
||||||
|
|
||||||
|
void muc_set_features(const char * const room, GSList *features);
|
||||||
|
|
||||||
char* muc_nick(const char * const room);
|
char* muc_nick(const char * const room);
|
||||||
char* muc_password(const char * const room);
|
char* muc_password(const char * const room);
|
||||||
|
|
||||||
|
|||||||
@@ -164,6 +164,7 @@ handle_disco_info(const char *from, GSList *identities, GSList *features)
|
|||||||
void
|
void
|
||||||
handle_room_disco_info(const char * const room, GSList *identities, GSList *features)
|
handle_room_disco_info(const char * const room, GSList *identities, GSList *features)
|
||||||
{
|
{
|
||||||
|
muc_set_features(room, features);
|
||||||
ui_show_room_disco_info(room, identities, features);
|
ui_show_room_disco_info(room, identities, features);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -699,6 +700,7 @@ handle_muc_self_online(const char * const room, const char * const nick, gboolea
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO send disco info request to room
|
// TODO send disco info request to room
|
||||||
|
iq_room_info_request(room);
|
||||||
|
|
||||||
muc_invites_remove(room);
|
muc_invites_remove(room);
|
||||||
muc_roster_set_complete(room);
|
muc_roster_set_complete(room);
|
||||||
|
|||||||
@@ -178,14 +178,14 @@ iq_disco_info_request(gchar *jid)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
iq_room_info_request(gchar *room)
|
iq_room_info_request(const char * const room)
|
||||||
{
|
{
|
||||||
xmpp_conn_t * const conn = connection_get_conn();
|
xmpp_conn_t * const conn = connection_get_conn();
|
||||||
xmpp_ctx_t * const ctx = connection_get_ctx();
|
xmpp_ctx_t * const ctx = connection_get_ctx();
|
||||||
char *id = create_unique_id("room_disco_info");
|
char *id = create_unique_id("room_disco_info");
|
||||||
xmpp_stanza_t *iq = stanza_create_disco_info_iq(ctx, id, room, NULL);
|
xmpp_stanza_t *iq = stanza_create_disco_info_iq(ctx, id, room, NULL);
|
||||||
|
|
||||||
xmpp_id_handler_add(conn, _disco_info_response_handler, id, room);
|
xmpp_id_handler_add(conn, _disco_info_response_handler, id, strdup(room));
|
||||||
|
|
||||||
free(id);
|
free(id);
|
||||||
|
|
||||||
@@ -1362,6 +1362,7 @@ _disco_info_response_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const sta
|
|||||||
char *error_message = stanza_get_error_message(stanza);
|
char *error_message = stanza_get_error_message(stanza);
|
||||||
if (room) {
|
if (room) {
|
||||||
handle_room_info_error(room, error_message);
|
handle_room_info_error(room, error_message);
|
||||||
|
free(room);
|
||||||
} else {
|
} else {
|
||||||
handle_disco_info_error(from, error_message);
|
handle_disco_info_error(from, error_message);
|
||||||
}
|
}
|
||||||
@@ -1422,6 +1423,10 @@ _disco_info_response_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const sta
|
|||||||
g_slist_free_full(features, free);
|
g_slist_free_full(features, free);
|
||||||
g_slist_free_full(identities, (GDestroyNotify)_identity_destroy);
|
g_slist_free_full(identities, (GDestroyNotify)_identity_destroy);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (room) {
|
||||||
|
free(room);
|
||||||
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -192,7 +192,7 @@ void iq_send_caps_request_for_jid(const char * const to, const char * const id,
|
|||||||
const char * const node, const char * const ver);
|
const char * const node, const char * const ver);
|
||||||
void iq_send_caps_request_legacy(const char * const to, const char * const id,
|
void iq_send_caps_request_legacy(const char * const to, const char * const id,
|
||||||
const char * const node, const char * const ver);
|
const char * const node, const char * const ver);
|
||||||
void iq_room_info_request(gchar *room);
|
void iq_room_info_request(const char * const room);
|
||||||
void iq_room_affiliation_list(const char * const room, char *affiliation);
|
void iq_room_affiliation_list(const char * const room, char *affiliation);
|
||||||
void iq_room_affiliation_set(const char * const room, const char * const jid, char *affiliation,
|
void iq_room_affiliation_set(const char * const room, const char * const jid, char *affiliation,
|
||||||
const char * const reason);
|
const char * const reason);
|
||||||
|
|||||||
@@ -151,7 +151,7 @@ void iq_send_caps_request_for_jid(const char * const to, const char * const id,
|
|||||||
const char * const node, const char * const ver) {}
|
const char * const node, const char * const ver) {}
|
||||||
void iq_send_caps_request_legacy(const char * const to, const char * const id,
|
void iq_send_caps_request_legacy(const char * const to, const char * const id,
|
||||||
const char * const node, const char * const ver) {}
|
const char * const node, const char * const ver) {}
|
||||||
void iq_room_info_request(gchar *room) {}
|
void iq_room_info_request(const char * const room) {}
|
||||||
void iq_room_affiliation_list(const char * const room, char *affiliation) {}
|
void iq_room_affiliation_list(const char * const room, char *affiliation) {}
|
||||||
void iq_room_affiliation_set(const char * const room, const char * const jid, char *affiliation,
|
void iq_room_affiliation_set(const char * const room, const char * const jid, char *affiliation,
|
||||||
const char * const reason) {}
|
const char * const reason) {}
|
||||||
|
|||||||
Reference in New Issue
Block a user