Mercurial > pidgin.yaz
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 } |