diff --git a/src/plugins/plugins-interface.c b/src/plugins/plugins-interface.c index b65cdb540..6b9f4908c 100644 --- a/src/plugins/plugins-interface.c +++ b/src/plugins/plugins-interface.c @@ -279,14 +279,14 @@ void weechat_plugin_exec_command (t_weechat_plugin *plugin, char *server, char *channel, char *command) { - t_gui_buffer *ptr_buffer; + t_irc_server *ptr_server; if (!plugin || !command) return; - ptr_buffer = plugin_find_buffer (server, channel); - if (ptr_buffer) - user_command (SERVER(ptr_buffer), ptr_buffer, command); + ptr_server = plugin_find_server (server, channel); + if (ptr_server && (ptr_server->buffer)) + user_command (ptr_server, ptr_server->buffer, command); } /* diff --git a/src/plugins/plugins.c b/src/plugins/plugins.c index 06b96b4fb..09d676bc4 100644 --- a/src/plugins/plugins.c +++ b/src/plugins/plugins.c @@ -48,7 +48,7 @@ t_weechat_plugin *last_weechat_plugin = NULL; /* - * plugin_find_buffer: find a buffer for text display or command execution + * plugin_find_buffer: find a buffer for text display */ t_gui_buffer * @@ -104,6 +104,45 @@ plugin_find_buffer (char *server, char *channel) return (ptr_buffer->dcc) ? gui_buffers : ptr_buffer; } +/* + * plugin_find_server: find a server for command execution + */ + +t_irc_server * +plugin_find_server (char *server, char *channel) +{ + t_irc_server *ptr_server; + t_irc_channel *ptr_channel; + + ptr_server = NULL; + ptr_channel = NULL; + + /* nothing given => return current server */ + if ((!server || !server[0]) && (!channel || !channel[0])) + return SERVER(gui_current_window->buffer); + else + { + if (server && server[0]) + return server_search (server); + else + { + ptr_server = SERVER(gui_current_window->buffer); + if (!ptr_server) + ptr_server = SERVER(gui_buffers); + } + + if (channel && channel[0]) + { + if (ptr_server) + return (channel_search (ptr_server, channel)) ? + ptr_server : NULL; + } + } + + return NULL; +} + + /* * plugin_exec_on_files: find files in a directory and execute a * function on each file diff --git a/src/plugins/plugins.h b/src/plugins/plugins.h index 0adba8914..1a01baa40 100644 --- a/src/plugins/plugins.h +++ b/src/plugins/plugins.h @@ -22,6 +22,7 @@ #define __WEECHAT_PLUGINS_H 1 #include "weechat-plugin.h" +#include "../irc/irc.h" #include "../gui/gui.h" typedef int (t_weechat_init_func) (t_weechat_plugin *); @@ -31,6 +32,7 @@ extern t_weechat_plugin *weechat_plugins; extern t_weechat_plugin *last_weechat_plugin; extern t_gui_buffer *plugin_find_buffer (char *, char *); +extern t_irc_server *plugin_find_server (char *, char *); extern void plugin_exec_on_files (t_weechat_plugin *, char *, int (*)(t_weechat_plugin *, char *)); extern t_weechat_plugin *plugin_search (char *); diff --git a/weechat/src/plugins/plugins-interface.c b/weechat/src/plugins/plugins-interface.c index b65cdb540..6b9f4908c 100644 --- a/weechat/src/plugins/plugins-interface.c +++ b/weechat/src/plugins/plugins-interface.c @@ -279,14 +279,14 @@ void weechat_plugin_exec_command (t_weechat_plugin *plugin, char *server, char *channel, char *command) { - t_gui_buffer *ptr_buffer; + t_irc_server *ptr_server; if (!plugin || !command) return; - ptr_buffer = plugin_find_buffer (server, channel); - if (ptr_buffer) - user_command (SERVER(ptr_buffer), ptr_buffer, command); + ptr_server = plugin_find_server (server, channel); + if (ptr_server && (ptr_server->buffer)) + user_command (ptr_server, ptr_server->buffer, command); } /* diff --git a/weechat/src/plugins/plugins.c b/weechat/src/plugins/plugins.c index 06b96b4fb..09d676bc4 100644 --- a/weechat/src/plugins/plugins.c +++ b/weechat/src/plugins/plugins.c @@ -48,7 +48,7 @@ t_weechat_plugin *last_weechat_plugin = NULL; /* - * plugin_find_buffer: find a buffer for text display or command execution + * plugin_find_buffer: find a buffer for text display */ t_gui_buffer * @@ -104,6 +104,45 @@ plugin_find_buffer (char *server, char *channel) return (ptr_buffer->dcc) ? gui_buffers : ptr_buffer; } +/* + * plugin_find_server: find a server for command execution + */ + +t_irc_server * +plugin_find_server (char *server, char *channel) +{ + t_irc_server *ptr_server; + t_irc_channel *ptr_channel; + + ptr_server = NULL; + ptr_channel = NULL; + + /* nothing given => return current server */ + if ((!server || !server[0]) && (!channel || !channel[0])) + return SERVER(gui_current_window->buffer); + else + { + if (server && server[0]) + return server_search (server); + else + { + ptr_server = SERVER(gui_current_window->buffer); + if (!ptr_server) + ptr_server = SERVER(gui_buffers); + } + + if (channel && channel[0]) + { + if (ptr_server) + return (channel_search (ptr_server, channel)) ? + ptr_server : NULL; + } + } + + return NULL; +} + + /* * plugin_exec_on_files: find files in a directory and execute a * function on each file diff --git a/weechat/src/plugins/plugins.h b/weechat/src/plugins/plugins.h index 0adba8914..1a01baa40 100644 --- a/weechat/src/plugins/plugins.h +++ b/weechat/src/plugins/plugins.h @@ -22,6 +22,7 @@ #define __WEECHAT_PLUGINS_H 1 #include "weechat-plugin.h" +#include "../irc/irc.h" #include "../gui/gui.h" typedef int (t_weechat_init_func) (t_weechat_plugin *); @@ -31,6 +32,7 @@ extern t_weechat_plugin *weechat_plugins; extern t_weechat_plugin *last_weechat_plugin; extern t_gui_buffer *plugin_find_buffer (char *, char *); +extern t_irc_server *plugin_find_server (char *, char *); extern void plugin_exec_on_files (t_weechat_plugin *, char *, int (*)(t_weechat_plugin *, char *)); extern t_weechat_plugin *plugin_search (char *);