Wed, 13 May 2009 20:29:03 +0000
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.
#include "module.h" #include "../perl-handlers.h" MODULE = Purple::Cmd PACKAGE = Purple::Cmd PREFIX = purple_cmd_ PROTOTYPES: ENABLE BOOT: { HV *status_stash = gv_stashpv("Purple::Cmd::Status", 1); HV *ret_stash = gv_stashpv("Purple::Cmd::Return", 1); HV *p_stash = gv_stashpv("Purple::Cmd::Priority", 1); HV *flag_stash = gv_stashpv("Purple::Cmd::Flag", 1); static const constiv *civ, status_const_iv[] = { #define const_iv(name) {#name, (IV)PURPLE_CMD_STATUS_##name} const_iv(OK), const_iv(FAILED), const_iv(NOT_FOUND), const_iv(WRONG_ARGS), const_iv(WRONG_PRPL), const_iv(WRONG_TYPE), }; static const constiv ret_const_iv[] = { #undef const_iv #define const_iv(name) {#name, (IV)PURPLE_CMD_RET_##name} const_iv(OK), const_iv(FAILED), const_iv(CONTINUE), }; static const constiv p_const_iv[] = { #undef const_iv #define const_iv(name) {#name, (IV)PURPLE_CMD_P_##name} const_iv(VERY_LOW), const_iv(LOW), const_iv(DEFAULT), const_iv(PRPL), const_iv(PLUGIN), const_iv(ALIAS), const_iv(HIGH), const_iv(VERY_HIGH), }; static const constiv flag_const_iv[] = { #undef const_iv #define const_iv(name) {#name, (IV)PURPLE_CMD_FLAG_##name} const_iv(IM), const_iv(CHAT), const_iv(PRPL_ONLY), const_iv(ALLOW_WRONG_ARGS), }; for (civ = status_const_iv + sizeof(status_const_iv) / sizeof(status_const_iv[0]); civ-- > status_const_iv;) newCONSTSUB(status_stash, (char *)civ->name, newSViv(civ->iv)); for (civ = ret_const_iv + sizeof(ret_const_iv) / sizeof(ret_const_iv[0]); civ-- > ret_const_iv;) newCONSTSUB(ret_stash, (char *)civ->name, newSViv(civ->iv)); for (civ = p_const_iv + sizeof(p_const_iv) / sizeof(p_const_iv[0]); civ-- > p_const_iv;) newCONSTSUB(p_stash, (char *)civ->name, newSViv(civ->iv)); for (civ = flag_const_iv + sizeof(flag_const_iv) / sizeof(flag_const_iv[0]); civ-- > flag_const_iv;) newCONSTSUB(flag_stash, (char *)civ->name, newSViv(civ->iv)); } void purple_cmd_help(conv, command) Purple::Conversation conv const gchar *command PREINIT: GList *l, *ll; PPCODE: for (l = ll = purple_cmd_help(conv, command); l != NULL; l = l->next) { XPUSHs(sv_2mortal(newSVpv(l->data, 0))); } g_list_free(ll); void purple_cmd_list(conv) Purple::Conversation conv PREINIT: GList *l, *ll; PPCODE: for (l = ll = purple_cmd_list(conv); l != NULL; l = l->next) { XPUSHs(sv_2mortal(newSVpv(l->data, 0))); } g_list_free(ll); Purple::Cmd::Id purple_cmd_register(plugin, command, args, priority, flag, prpl_id, func, helpstr, data = 0) Purple::Plugin plugin const gchar *command const gchar *args Purple::Cmd::Priority priority Purple::Cmd::Flag flag const gchar *prpl_id SV *func const gchar *helpstr SV *data CODE: RETVAL = purple_perl_cmd_register(plugin, command, args, priority, flag, prpl_id, func, helpstr, data); OUTPUT: RETVAL void purple_cmd_unregister(id) Purple::Cmd::Id id CODE: purple_perl_cmd_unregister(id);