Mercurial > pidgin
diff src/protocols/irc/parse.c @ 9130:933a19e3a6b3
[gaim-migrate @ 9908]
This puts the core in charge of irc-style /commands, which is way cool. Tim did most of the work, I've just been keeping it in sync with CVS, and slowly adding more commands to jabber.
committer: Tailor Script <tailor@pidgin.im>
| author | Nathan Walp <nwalp@pidgin.im> |
|---|---|
| date | Sun, 30 May 2004 19:34:21 +0000 |
| parents | c60f82d78dea |
| children | 6430b09ccc71 |
line wrap: on
line diff
--- a/src/protocols/irc/parse.c Sun May 30 19:30:14 2004 +0000 +++ b/src/protocols/irc/parse.c Sun May 30 19:34:21 2004 +0000 @@ -26,6 +26,7 @@ #include "conversation.h" #include "notify.h" #include "debug.h" +#include "cmds.h" #include "irc.h" #include <stdio.h> @@ -135,6 +136,67 @@ { NULL, NULL, NULL } }; +static GaimCmdRet irc_parse_gaim_cmd(GaimConversation *conv, const gchar *cmd, + gchar **args, gchar **error) +{ + GaimConnection *gc; + struct irc_conn *irc; + struct _irc_user_cmd *cmdent; + + gc = gaim_conversation_get_gc(conv); + if (!gc) + return GAIM_CMD_RET_FAILED; + + irc = gc->proto_data; + + if ((cmdent = g_hash_table_lookup(irc->cmds, cmd)) == NULL) + return GAIM_CMD_RET_FAILED; + + (cmdent->cb)(irc, cmd, gaim_conversation_get_name(conv), (const char **)args); + + return GAIM_CMD_RET_OK; +} + +static void irc_register_command(struct _irc_user_cmd *c) +{ + GaimCmdFlag f; + char args[10]; + char *format; + int i; + + f = GAIM_CMD_FLAG_CHAT | GAIM_CMD_FLAG_IM | GAIM_CMD_FLAG_PRPL_ONLY + | GAIM_CMD_FLAG_ALLOW_WRONG_ARGS; + + format = c->format; + + for (i = 0; (i < (sizeof(args) - 1)) && *format; i++, format++) + switch (*format) { + case 'v': + case 'n': + case 'c': + case 't': + args[i] = 'w'; + break; + case ':': + case '*': + args[i] = 's'; + break; + } + + args[i] = '\0'; + + gaim_cmd_register(c->name, args, GAIM_CMD_P_PRPL, f, "prpl-irc", irc_parse_gaim_cmd, + _("No help is available at this time for this command.")); +} + +void irc_register_commands(void) +{ + struct _irc_user_cmd *c; + + for (c = _irc_cmds; c && c->name; c++) + irc_register_command(c); +} + static char *irc_send_convert(struct irc_conn *irc, const char *string) { char *utf8;
