# HG changeset patch # User Richard Laager # Date 1177537777 0 # Node ID 50380e48fb65639e1acbfbaa1059351300a5575e # Parent c41facb80e4ad17479af95c498cca64a9b9f9c37# Parent 0fb719b5dc0eb815b36886b3069fd116dbea5ac1 merge of '1d4d484c73a0770b9f9616808d7d00a3de9d21f4' and 'fd514a58d0b2b74e43c9f7ae8de77e510d6a7af7' diff -r c41facb80e4a -r 50380e48fb65 ChangeLog --- a/ChangeLog Wed Apr 25 14:01:28 2007 +0000 +++ b/ChangeLog Wed Apr 25 21:49:37 2007 +0000 @@ -172,6 +172,7 @@ * Added /nickserv, /memoserv, /chanserv and /operserv commands (Joao Luís Marques Pinto) * Added CTCP VERSION via /version (Andrej Krivulčík) + * Added /whowas command (achris) Jabber Features: * Support for SRV lookups diff -r c41facb80e4a -r 50380e48fb65 libpurple/protocols/irc/cmds.c --- a/libpurple/protocols/irc/cmds.c Wed Apr 25 14:01:28 2007 +0000 +++ b/libpurple/protocols/irc/cmds.c Wed Apr 25 21:49:37 2007 +0000 @@ -559,6 +559,22 @@ return 0; } +int irc_cmd_whowas(struct irc_conn *irc, const char *cmd, const char *target, const char **args) +{ + char *buf; + + if (!args || !args[0]) + return 0; + + buf = irc_format(irc, "vn", "WHOWAS", args[0]); + + irc->whois.nick = g_strdup(args[0]); + irc_send(irc, buf); + g_free(buf); + + return 0; +} + static void irc_do_mode(struct irc_conn *irc, const char *target, const char *sign, char **ops) { char *buf, mode[5]; diff -r c41facb80e4a -r 50380e48fb65 libpurple/protocols/irc/irc.h --- a/libpurple/protocols/irc/irc.h Wed Apr 25 14:01:28 2007 +0000 +++ b/libpurple/protocols/irc/irc.h Wed Apr 25 21:49:37 2007 +0000 @@ -179,6 +179,7 @@ int irc_cmd_topic(struct irc_conn *irc, const char *cmd, const char *target, const char **args); int irc_cmd_wallops(struct irc_conn *irc, const char *cmd, const char *target, const char **args); int irc_cmd_whois(struct irc_conn *irc, const char *cmd, const char *target, const char **args); +int irc_cmd_whowas(struct irc_conn *irc, const char *cmd, const char *target, const char **args); PurpleXfer *irc_dccsend_new_xfer(PurpleConnection *gc, const char *who); void irc_dccsend_send_file(PurpleConnection *gc, const char *who, const char *file); diff -r c41facb80e4a -r 50380e48fb65 libpurple/protocols/irc/msgs.c --- a/libpurple/protocols/irc/msgs.c Wed Apr 25 14:01:28 2007 +0000 +++ b/libpurple/protocols/irc/msgs.c Wed Apr 25 21:49:37 2007 +0000 @@ -236,18 +236,20 @@ void irc_msg_whois(struct irc_conn *irc, const char *name, const char *from, char **args) { if (!irc->whois.nick) { - purple_debug(PURPLE_DEBUG_WARNING, "irc", "Unexpected WHOIS reply for %s\n", args[1]); + purple_debug(PURPLE_DEBUG_WARNING, "irc", "Unexpected %s reply for %s\n", !strcmp(name, "314") ? "WHOWAS" : "WHOIS" + , args[1]); return; } if (purple_utf8_strcasecmp(irc->whois.nick, args[1])) { - purple_debug(PURPLE_DEBUG_WARNING, "irc", "Got WHOIS reply for %s while waiting for %s\n", args[1], irc->whois.nick); + purple_debug(PURPLE_DEBUG_WARNING, "irc", "Got %s reply for %s while waiting for %s\n", !strcmp(name, "314") ? "WHOWAS" : "WHOIS" + , args[1], irc->whois.nick); return; } if (!strcmp(name, "301")) { irc->whois.away = g_strdup(args[2]); - } else if (!strcmp(name, "311")) { + } else if (!strcmp(name, "311") || !strcmp(name, "314")) { irc->whois.userhost = g_strdup_printf("%s@%s", args[2], args[3]); irc->whois.name = g_strdup(args[5]); } else if (!strcmp(name, "312")) { @@ -273,11 +275,13 @@ PurpleNotifyUserInfo *user_info; if (!irc->whois.nick) { - purple_debug(PURPLE_DEBUG_WARNING, "irc", "Unexpected End of WHOIS for %s\n", args[1]); + purple_debug(PURPLE_DEBUG_WARNING, "irc", "Unexpected End of %s for %s\n", !strcmp(name, "369") ? "WHOWAS" : "WHOIS" + , args[1]); return; } if (purple_utf8_strcasecmp(irc->whois.nick, args[1])) { - purple_debug(PURPLE_DEBUG_WARNING, "irc", "Received end of WHOIS for %s, expecting %s\n", args[1], irc->whois.nick); + purple_debug(PURPLE_DEBUG_WARNING, "irc", "Received end of %s for %s, expecting %s\n", !strcmp(name, "369") ? "WHOWAS" : "WHOIS" + , args[1], irc->whois.nick); return; } diff -r c41facb80e4a -r 50380e48fb65 libpurple/protocols/irc/parse.c --- a/libpurple/protocols/irc/parse.c Wed Apr 25 14:01:28 2007 +0000 +++ b/libpurple/protocols/irc/parse.c Wed Apr 25 21:49:37 2007 +0000 @@ -64,6 +64,8 @@ { "318", "nt:", irc_msg_endwhois }, /* End of WHOIS */ { "319", "nn:", irc_msg_whois }, /* Whois channels */ { "320", "nn:", irc_msg_whois }, /* Whois (fn ident) */ + { "314", "nnvvv:", irc_msg_whois }, /* Whowas user */ + { "369", "nt:", irc_msg_endwhois }, /* End of WHOWAS */ { "321", "*", irc_msg_list }, /* Start of list */ { "322", "ncv:", irc_msg_list }, /* List. */ { "323", ":", irc_msg_list }, /* End of list. */ @@ -78,6 +80,7 @@ { "376", "n:", irc_msg_motd }, /* End of MOTD */ { "391", "nv:", irc_msg_time }, /* Time reply */ { "401", "nt:", irc_msg_nonick }, /* No such nick/chan */ + { "406", "nt:", irc_msg_nonick }, /* No such nick for WHOWAS */ { "403", "nc:", irc_msg_nochan }, /* No such channel */ { "404", "nt:", irc_msg_nosend }, /* Cannot send to chan */ { "421", "nv:", irc_msg_unknown }, /* Unknown command */ @@ -148,6 +151,7 @@ { "voice", ":", irc_cmd_op, N_("voice <nick1> [nick2] ...: Grant channel voice status to someone. You must be a channel operator to do this.") }, { "wallops", ":", irc_cmd_wallops, N_("wallops <message>: If you don't know what this is, you probably can't use it.") }, { "whois", "tt", irc_cmd_whois, N_("whois [server] <nick>: Get information on a user.") }, + { "whowas", "t", irc_cmd_whowas, N_("whowas <nick>: Get information on a user that has logged off.") }, { NULL, NULL, NULL, NULL } }; diff -r c41facb80e4a -r 50380e48fb65 pidgin/gtkstatusbox.c --- a/pidgin/gtkstatusbox.c Wed Apr 25 14:01:28 2007 +0000 +++ b/pidgin/gtkstatusbox.c Wed Apr 25 21:49:37 2007 +0000 @@ -899,7 +899,6 @@ { GList *list, *cur; GdkPixbuf *pixbuf; - PidginStatusBoxItemType type = PIDGIN_STATUS_BOX_TYPE_POPULAR; list = purple_savedstatuses_get_popular(6); if (list == NULL) @@ -914,6 +913,7 @@ const gchar *message; gchar *stripped = NULL; PurpleStatusPrimitive prim; + PidginStatusBoxItemType type = PIDGIN_STATUS_BOX_TYPE_POPULAR; /* Get an appropriate status icon */ prim = purple_savedstatus_get_type(saved);