comparison libpurple/protocols/jabber/chat.c @ 26956:eeee4309d3d8

Support custom smileys in MUCs (when all participants support BoB and a maximum of 10 participants are in the chat). Always announce support for BoB, since disable custom smileys will still turn off fetching them, and BoB can be used for other purposes further on.
author Marcus Lundblad <ml@update.uu.se>
date Wed, 13 May 2009 20:29:03 +0000
parents af2b87aa82ee
children a8537bbcfb79
comparison
equal deleted inserted replaced
26955:727d960a75a4 26956:eeee4309d3d8
1160 jabber_iq_send(iq); 1160 jabber_iq_send(iq);
1161 1161
1162 g_free(room_jid); 1162 g_free(room_jid);
1163 } 1163 }
1164 1164
1165 1165 typedef struct {
1166 1166 const gchar *cap;
1167 gboolean *all_support;
1168 JabberBuddy *jb;
1169 } JabberChatCapsData;
1170
1171 static void
1172 jabber_chat_all_participants_have_capability_foreach(gpointer key,
1173 gpointer value,
1174 gpointer user_data)
1175 {
1176 const gchar *cap = ((JabberChatCapsData *) user_data)->cap;
1177 gboolean *all_support = ((JabberChatCapsData *) user_data)->all_support;
1178 JabberBuddy *jb = ((JabberChatCapsData *) user_data)->jb;
1179 JabberChatMember *member = (JabberChatMember *) value;
1180 const gchar *resource = member->handle;
1181 JabberBuddyResource *jbr = jabber_buddy_find_resource(jb, resource);
1182
1183 if (jbr) {
1184 *all_support &= jabber_resource_has_capability(jbr, cap);
1185 } else {
1186 *all_support = FALSE;
1187 }
1188 }
1189
1190 gboolean
1191 jabber_chat_all_participants_have_capability(const JabberChat *chat,
1192 const gchar *cap)
1193 {
1194 gchar *chat_jid = NULL;
1195 JabberBuddy *jb = NULL;
1196 gboolean all_support = TRUE;
1197 JabberChatCapsData data;
1198
1199 chat_jid = g_strdup_printf("%s@%s", chat->room, chat->server);
1200 jb = jabber_buddy_find(chat->js, chat_jid, FALSE);
1201
1202 if (jb) {
1203 data.cap = cap;
1204 data.all_support = &all_support;
1205 data.jb = jb;
1206
1207 g_hash_table_foreach(chat->members,
1208 jabber_chat_all_participants_have_capability_foreach, &data);
1209 } else {
1210 all_support = FALSE;
1211 }
1212 g_free(chat_jid);
1213 return all_support;
1214 }
1215
1216 guint
1217 jabber_chat_get_num_participants(const JabberChat *chat)
1218 {
1219 return g_hash_table_size(chat->members);
1220 }