Mercurial > pidgin.yaz
diff src/protocols/irc/irc.c @ 2619:536198196dc6
[gaim-migrate @ 2632]
i hate you mid. i have that IM Me song stuck in my head.
committer: Tailor Script <tailor@pidgin.im>
author | Eric Warmenhoven <eric@warmenhoven.org> |
---|---|
date | Fri, 26 Oct 2001 10:11:33 +0000 |
parents | 251ecc5cd9b3 |
children | a1b708ee93af |
line wrap: on
line diff
--- a/src/protocols/irc/irc.c Fri Oct 26 09:17:13 2001 +0000 +++ b/src/protocols/irc/irc.c Fri Oct 26 10:11:33 2001 +0000 @@ -59,6 +59,9 @@ char *chanmodes; char *nickmodes; gboolean six_modes; + + gboolean in_whois; + GString *whois_str; }; static char *irc_name() @@ -563,11 +566,41 @@ handle_005(gc, word, word_eol); break; case 301: - irc_got_im(gc, word[4], word_eol[5], IM_FLAG_AWAY, time(NULL)); + if (id->in_whois) { + id->whois_str = g_string_append(id->whois_str, "<BR><BR>"); + id->whois_str = g_string_append(id->whois_str, word_eol[4]); + } else + irc_got_im(gc, word[4], word_eol[5], IM_FLAG_AWAY, time(NULL)); break; case 303: handle_list(gc, &word_eol[4][1]); break; + case 311: + case 312: + case 313: + case 317: + case 319: + if (!id->in_whois) { + id->in_whois = TRUE; + id->whois_str = g_string_new(""); + } else { + id->whois_str = g_string_append(id->whois_str, "<BR><BR>"); + id->in_whois = TRUE; + } + id->whois_str = g_string_append(id->whois_str, word_eol[4]); + break; + case 318: + id->whois_str = g_string_append(id->whois_str, "<BR><BR>"); + id->whois_str = g_string_append(id->whois_str, word_eol[4]); + { + GString *str = decode_html(id->whois_str->str); + g_show_info_text(str->str); + g_string_free(str, TRUE); + } + g_string_free(id->whois_str, TRUE); + id->whois_str = NULL; + id->in_whois = FALSE; + break; case 324: handle_mode(gc, word, word_eol, TRUE); break; @@ -580,6 +613,18 @@ case 376: irc_request_buddy_update(gc); break; + case 401: + case 402: + case 431: + if (!id->in_whois) { + id->in_whois = TRUE; + id->whois_str = g_string_new(""); + } else { + id->whois_str = g_string_append(id->whois_str, "<BR><BR>"); + id->in_whois = TRUE; + } + id->whois_str = g_string_append(id->whois_str, word_eol[4]); + break; } } @@ -951,6 +996,8 @@ g_free(idata->nickmodes); g_string_free(idata->str, TRUE); + if (idata->whois_str) + g_string_free(idata->whois_str, TRUE); if (idata->timer) g_source_remove(idata->timer); @@ -1166,8 +1213,6 @@ else g_snprintf(buf, sizeof(buf), "KICK %s %s\r\n", who, word[2]); irc_write(id->fd, buf, strlen(buf)); - } else if (!g_strcasecmp(pdibuf, "BAN")) { - } else if (!g_strcasecmp(pdibuf, "KICKBAN")) { } else if (!g_strcasecmp(pdibuf, "JOIN")) { if (!*word[2]) return -EINVAL; @@ -1193,6 +1238,9 @@ g_snprintf(buf, sizeof(buf), _("You have left %s"), chan); do_error_dialog(buf, _("IRC Part")); } + } else if (!g_strcasecmp(pdibuf, "WHOIS")) { + g_snprintf(buf, sizeof(buf), "WHOIS %s\r\n", word_eol[2]); + irc_write(id->fd, buf, strlen(buf)); } else if (!g_strcasecmp(pdibuf, "HELP")) { struct conversation *c = NULL; if (is_channel(gc, who)) { @@ -1203,7 +1251,7 @@ if (!c) return -EINVAL; write_to_conv(c, "<B>Currently supported commands:<BR>" - "JOIN PART TOPIC<BR>" + "JOIN PART TOPIC WHOIS<BR>" "OP DEOP VOICE DEVOICE KICK<BR>" "NICK ME MSG QUOTE SAY</B>", WFLAG_NOLOG, NULL, time(NULL)); @@ -1335,6 +1383,29 @@ return irc_icon_xpm; } +static void irc_get_info(struct gaim_connection *gc, char *who) +{ + struct irc_data *idata = gc->proto_data; + char buf[IRC_BUF_LEN]; + + g_snprintf(buf, sizeof(buf), "WHOIS %s\r\n", who); + irc_write(idata->fd, buf, strlen(buf)); +} + +static GList *irc_buddy_menu(struct gaim_connection *gc, char *who) +{ + GList *m = NULL; + struct proto_buddy_menu *pbm; + + pbm = g_new0(struct proto_buddy_menu, 1); + pbm->label = _("Get Info"); + pbm->callback = irc_get_info; + pbm->gc = gc; + m = g_list_append(m, pbm); + + return m; +} + static struct prpl *my_protocol = NULL; void irc_init(struct prpl *ret) @@ -1355,6 +1426,8 @@ ret->chat_send = irc_chat_send; ret->away_states = irc_away_states; ret->set_away = irc_set_away; + ret->get_info = irc_get_info; + ret->buddy_menu = irc_buddy_menu; my_protocol = ret; }