diff options
Diffstat (limited to 'src/plugins/plugins.c')
-rw-r--r-- | src/plugins/plugins.c | 83 |
1 files changed, 43 insertions, 40 deletions
diff --git a/src/plugins/plugins.c b/src/plugins/plugins.c index 72a3bbadf..74e9d4725 100644 --- a/src/plugins/plugins.c +++ b/src/plugins/plugins.c @@ -62,52 +62,46 @@ plugin_find_buffer (char *server, char *channel) ptr_channel = NULL; ptr_buffer = NULL; - if (server && server[0]) - { - ptr_server = server_search (server); - if (!ptr_server) - return NULL; - } + /* nothing given => print on current buffer */ + if ((!server || !server[0]) && (!channel || !channel[0])) + ptr_buffer = gui_current_window->buffer; else { - ptr_server = SERVER(gui_current_window->buffer); - if (!ptr_server) - ptr_server = SERVER(gui_buffers); - } - - if (channel && channel[0]) - { - if (ptr_server) + if (server && server[0]) { - ptr_channel = channel_search (ptr_server, channel); - if (ptr_channel) - ptr_buffer = ptr_channel->buffer; + ptr_server = server_search (server); + if (!ptr_server) + return NULL; } - } - else - { - if (!channel) + else + { + ptr_server = SERVER(gui_current_window->buffer); + if (!ptr_server) + ptr_server = SERVER(gui_buffers); + } + + if (channel && channel[0]) { if (ptr_server) - ptr_buffer = ptr_server->buffer; - else { - ptr_buffer = gui_current_window->buffer; - if (ptr_buffer->dcc) - ptr_buffer = gui_buffers; + ptr_channel = channel_search (ptr_server, channel); + if (ptr_channel) + ptr_buffer = ptr_channel->buffer; } } else { if (ptr_server) ptr_buffer = ptr_server->buffer; + else + ptr_buffer = gui_current_window->buffer; } } if (!ptr_buffer) return NULL; - return (ptr_buffer->dcc) ? NULL : ptr_buffer; + return (ptr_buffer->dcc) ? gui_buffers : ptr_buffer; } /* @@ -315,7 +309,8 @@ plugin_cmd_handler_add (t_weechat_plugin *plugin, char *command, /* * plugin_msg_handler_exec: execute a message handler - * return: number of handlers executed (0 means no handler found) + * return: code for informing WeeChat whether message + * should be ignored or not */ int @@ -323,9 +318,10 @@ plugin_msg_handler_exec (char *server, char *irc_command, char *irc_message) { t_weechat_plugin *ptr_plugin; t_plugin_handler *ptr_handler; - int count; + int return_code, final_return_code; + + final_return_code = PLUGIN_RC_OK; - count = 0; for (ptr_plugin = weechat_plugins; ptr_plugin; ptr_plugin = ptr_plugin->next_plugin) { @@ -338,20 +334,27 @@ plugin_msg_handler_exec (char *server, char *irc_command, char *irc_message) if (ptr_handler->running == 0) { ptr_handler->running = 1; - if ((int) (ptr_handler->handler) (ptr_plugin, - server, - irc_command, - irc_message, - ptr_handler->handler_args, - ptr_handler->handler_pointer)) - count++; + return_code = ((int) (ptr_handler->handler) (ptr_plugin, + server, + irc_command, + irc_message, + ptr_handler->handler_args, + ptr_handler->handler_pointer)); ptr_handler->running = 0; + + if (return_code >= 0) + { + if (return_code & PLUGIN_RC_OK_IGNORE_WEECHAT) + final_return_code = PLUGIN_RC_OK_IGNORE_WEECHAT; + if (return_code & PLUGIN_RC_OK_IGNORE_PLUGINS) + return final_return_code; + } } } } } - return count; + return final_return_code; } /* @@ -385,7 +388,7 @@ plugin_cmd_handler_exec (char *server, char *command, char *arguments) ptr_handler->handler_args, ptr_handler->handler_pointer); ptr_handler->running = 0; - return (return_code) ? 1 : 0; + return (return_code == PLUGIN_RC_KO) ? 0 : 1; } } } @@ -658,7 +661,7 @@ plugin_load (char *filename) new_plugin->name, new_plugin->version); /* init plugin */ - if (!((t_weechat_init_func *)init_func) (new_plugin)) + if (((t_weechat_init_func *)init_func) (new_plugin) < 0) { irc_display_prefix (NULL, PREFIX_ERROR); gui_printf (NULL, |