diff options
Diffstat (limited to 'src/plugins/irc/irc-bar-item.c')
-rw-r--r-- | src/plugins/irc/irc-bar-item.c | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/src/plugins/irc/irc-bar-item.c b/src/plugins/irc/irc-bar-item.c new file mode 100644 index 000000000..9f8258736 --- /dev/null +++ b/src/plugins/irc/irc-bar-item.c @@ -0,0 +1,164 @@ +/* + * Copyright (c) 2003-2008 by FlashCode <flashcode@flashtux.org> + * See README for License detail, AUTHORS for developers list. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +/* irc-bar-item.c: bar items for IRC plugin */ + + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> + +#include "../weechat-plugin.h" +#include "irc.h" +#include "irc-buffer.h" +#include "irc-config.h" +#include "irc-server.h" +#include "irc-channel.h" + + +/* + * irc_bar_item_buffer_name: bar item with buffer name + */ + +char * +irc_bar_item_buffer_name (void *data, struct t_gui_bar_item *item, + struct t_gui_window *window, + int max_width, int max_height) +{ + char buf[256], buf_name[256], *name; + int number; + struct t_gui_buffer *buffer; + struct t_irc_server *server; + struct t_irc_channel *channel; + + /* make C compiler happy */ + (void) data; + (void) item; + (void) max_width; + (void) max_height; + + if (!window) + window = weechat_current_window; + + buf_name[0] = '\0'; + + buffer = weechat_window_get_pointer (window, "buffer"); + + if (buffer) + { + number = weechat_buffer_get_integer (buffer, "number"); + + irc_buffer_get_server_channel (buffer, &server, &channel); + if (server || channel) + { + if (server && !channel) + { + snprintf (buf_name, sizeof (buf_name), "%s%s[%s%s%s]", + _("server"), + IRC_COLOR_BAR_DELIM, + IRC_COLOR_STATUS_NAME, + server->name, + IRC_COLOR_BAR_DELIM); + } + else + { + if (channel) + { + snprintf (buf_name, sizeof (buf_name), + "%s%s%s/%s%s%s(%s%s%s)", + IRC_COLOR_STATUS_NAME, + server->name, + IRC_COLOR_BAR_DELIM, + IRC_COLOR_STATUS_NAME, + channel->name, + IRC_COLOR_BAR_DELIM, + IRC_COLOR_STATUS_NAME, + channel->modes, + IRC_COLOR_BAR_DELIM); + } + } + } + else + { + name = weechat_buffer_get_string (buffer, "name"); + if (name) + snprintf (buf_name, sizeof (buf_name), "%s", name); + } + + snprintf (buf, sizeof (buf), "%s%d%s:%s%s", + IRC_COLOR_STATUS_NUMBER, + number, + IRC_COLOR_BAR_DELIM, + IRC_COLOR_STATUS_NAME, + buf_name); + return strdup (buf); + } + + return NULL; +} + +/* + * irc_bar_item_lag: bar item with lag value + */ + +char * +irc_bar_item_lag (void *data, struct t_gui_bar_item *item, + struct t_gui_window *window, + int max_width, int max_height) +{ + char buf[32]; + struct t_gui_buffer *buffer; + struct t_irc_server *server; + + /* make C compiler happy */ + (void) data; + (void) item; + (void) window; + (void) max_width; + (void) max_height; + + buffer = weechat_window_get_pointer (window, "buffer"); + + if (buffer) + { + irc_buffer_get_server_channel (buffer, &server, NULL); + + if (server + && (server->lag >= weechat_config_integer (irc_config_network_lag_min_show) * 1000)) + { + snprintf (buf, sizeof (buf), + "%s: %.1f", + _("Lag"), + ((float)(server->lag)) / 1000); + return strdup (buf); + } + } + + return NULL; +} + +/* + * irc_bar_item_init: initialize IRC bar items + */ + +void +irc_bar_item_init () +{ + weechat_bar_item_new ("buffer_name", &irc_bar_item_buffer_name, NULL); + weechat_bar_item_new ("lag", &irc_bar_item_lag, NULL); +} |