comparison libpurple/protocols/irc/irc.c @ 32784:665388a0f573

Remove periodic WHO on IRC. I believe I have left enough functionality here that a misguided libpurple client can continue to trigger WHO from its own UI. References #11089, #14602 Fixes #14955
author Ethan Blanton <elb@pidgin.im>
date Thu, 03 May 2012 00:09:14 +0000
parents 7d08ac041588
children fa666e7f747e
comparison
equal deleted inserted replaced
32783:6da4f286898c 32784:665388a0f573
2 * @file irc.c 2 * @file irc.c
3 * 3 *
4 * purple 4 * purple
5 * 5 *
6 * Copyright (C) 2003, Robbert Haarman <purple@inglorion.net> 6 * Copyright (C) 2003, Robbert Haarman <purple@inglorion.net>
7 * Copyright (C) 2003, Ethan Blanton <eblanton@cs.purdue.edu> 7 * Copyright (C) 2003, 2012 Ethan Blanton <elb@pidgin.im>
8 * Copyright (C) 2000-2003, Rob Flynn <rob@tgflinux.com> 8 * Copyright (C) 2000-2003, Rob Flynn <rob@tgflinux.com>
9 * Copyright (C) 1998-1999, Mark Spencer <markster@marko.net> 9 * Copyright (C) 1998-1999, Mark Spencer <markster@marko.net>
10 * 10 *
11 * This program is free software; you can redistribute it and/or modify 11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by 12 * it under the terms of the GNU General Public License as published by
38 #include "irc.h" 38 #include "irc.h"
39 39
40 #define PING_TIMEOUT 60 40 #define PING_TIMEOUT 60
41 41
42 static void irc_ison_buddy_init(char *name, struct irc_buddy *ib, GList **list); 42 static void irc_ison_buddy_init(char *name, struct irc_buddy *ib, GList **list);
43
44 static void irc_who_channel(PurpleConversation *conv, struct irc_conn *irc);
45 43
46 static const char *irc_blist_icon(PurpleAccount *a, PurpleBuddy *b); 44 static const char *irc_blist_icon(PurpleAccount *a, PurpleBuddy *b);
47 static GList *irc_status_types(PurpleAccount *account); 45 static GList *irc_status_types(PurpleAccount *account);
48 static GList *irc_actions(PurplePlugin *plugin, gpointer context); 46 static GList *irc_actions(PurplePlugin *plugin, gpointer context);
49 /* static GList *irc_chat_info(PurpleConnection *gc); */ 47 /* static GList *irc_chat_info(PurpleConnection *gc); */
239 { 237 {
240 *list = g_list_append(*list, ib); 238 *list = g_list_append(*list, ib);
241 } 239 }
242 240
243 241
244 gboolean irc_who_channel_timeout(struct irc_conn *irc)
245 {
246 // WHO all of our channels.
247 g_list_foreach(purple_get_conversations(), (GFunc)irc_who_channel, (gpointer)irc);
248
249 return TRUE;
250 }
251
252 static void irc_who_channel(PurpleConversation *conv, struct irc_conn *irc)
253 {
254 if (purple_conversation_get_account(conv) == irc->account
255 && purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT
256 && !purple_conv_chat_has_left(PURPLE_CONV_CHAT(conv))) {
257 char *buf = irc_format(irc, "vc", "WHO", purple_conversation_get_name(conv));
258
259 purple_debug(PURPLE_DEBUG_INFO, "irc",
260 "Performing periodic who on %s\n",
261 purple_conversation_get_name(conv));
262 irc_send(irc, buf);
263 g_free(buf);
264 }
265 }
266
267 static void irc_ison_one(struct irc_conn *irc, struct irc_buddy *ib) 242 static void irc_ison_one(struct irc_conn *irc, struct irc_buddy *ib)
268 { 243 {
269 char *buf; 244 char *buf;
270 245
271 if (irc->buddies_outstanding != NULL) { 246 if (irc->buddies_outstanding != NULL) {
534 } else if (irc->fd >= 0) { 509 } else if (irc->fd >= 0) {
535 close(irc->fd); 510 close(irc->fd);
536 } 511 }
537 if (irc->timer) 512 if (irc->timer)
538 purple_timeout_remove(irc->timer); 513 purple_timeout_remove(irc->timer);
539 if (irc->who_channel_timer)
540 purple_timeout_remove(irc->who_channel_timer);
541 g_hash_table_destroy(irc->cmds); 514 g_hash_table_destroy(irc->cmds);
542 g_hash_table_destroy(irc->msgs); 515 g_hash_table_destroy(irc->msgs);
543 g_hash_table_destroy(irc->buddies); 516 g_hash_table_destroy(irc->buddies);
544 if (irc->motd) 517 if (irc->motd)
545 g_string_free(irc->motd, TRUE); 518 g_string_free(irc->motd, TRUE);