| 623 } |
623 } |
| 624 |
624 |
| 625 PurpleCmdId |
625 PurpleCmdId |
| 626 purple_perl_cmd_register(PurplePlugin *plugin, const gchar *command, |
626 purple_perl_cmd_register(PurplePlugin *plugin, const gchar *command, |
| 627 const gchar *args, PurpleCmdPriority priority, |
627 const gchar *args, PurpleCmdPriority priority, |
| 628 PurpleCmdFlag flag, const gchar *prpl_id, SV *callback, |
628 PurpleCmdFlag flag, const gchar *protocol_id, SV *callback, |
| 629 const gchar *helpstr, SV *data) |
629 const gchar *helpstr, SV *data) |
| 630 { |
630 { |
| 631 PurplePerlCmdHandler *handler; |
631 PurplePerlCmdHandler *handler; |
| 632 |
632 |
| 633 handler = g_new0(PurplePerlCmdHandler, 1); |
633 handler = g_new0(PurplePerlCmdHandler, 1); |
| 634 handler->plugin = plugin; |
634 handler->plugin = plugin; |
| 635 handler->cmd = g_strdup(command); |
635 handler->cmd = g_strdup(command); |
| 636 handler->prpl_id = g_strdup(prpl_id); |
636 handler->protocol_id = g_strdup(protocol_id); |
| 637 |
637 |
| 638 if (callback != NULL && callback != &PL_sv_undef) |
638 if (callback != NULL && callback != &PL_sv_undef) |
| 639 handler->callback = newSVsv(callback); |
639 handler->callback = newSVsv(callback); |
| 640 else |
640 else |
| 641 handler->callback = NULL; |
641 handler->callback = NULL; |
| 645 else |
645 else |
| 646 handler->data = NULL; |
646 handler->data = NULL; |
| 647 |
647 |
| 648 cmd_handlers = g_slist_append(cmd_handlers, handler); |
648 cmd_handlers = g_slist_append(cmd_handlers, handler); |
| 649 |
649 |
| 650 handler->id = purple_cmd_register(command, args, priority, flag, prpl_id, |
650 handler->id = purple_cmd_register(command, args, priority, flag, protocol_id, |
| 651 PURPLE_CMD_FUNC(perl_cmd_cb), helpstr, |
651 PURPLE_CMD_FUNC(perl_cmd_cb), helpstr, |
| 652 handler); |
652 handler); |
| 653 |
653 |
| 654 return handler->id; |
654 return handler->id; |
| 655 } |
655 } |
| 665 |
665 |
| 666 if (handler->data != NULL) |
666 if (handler->data != NULL) |
| 667 SvREFCNT_dec(handler->data); |
667 SvREFCNT_dec(handler->data); |
| 668 |
668 |
| 669 g_free(handler->cmd); |
669 g_free(handler->cmd); |
| 670 g_free(handler->prpl_id); |
670 g_free(handler->protocol_id); |
| 671 g_free(handler); |
671 g_free(handler); |
| 672 } |
672 } |
| 673 |
673 |
| 674 void |
674 void |
| 675 purple_perl_cmd_clear_for_plugin(PurplePlugin *plugin) |
675 purple_perl_cmd_clear_for_plugin(PurplePlugin *plugin) |