summaryrefslogtreecommitdiff
path: root/src/plugins/logger/logger-command.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/logger/logger-command.c')
-rw-r--r--src/plugins/logger/logger-command.c206
1 files changed, 206 insertions, 0 deletions
diff --git a/src/plugins/logger/logger-command.c b/src/plugins/logger/logger-command.c
new file mode 100644
index 000000000..eb54b27cb
--- /dev/null
+++ b/src/plugins/logger/logger-command.c
@@ -0,0 +1,206 @@
+/*
+ * logger-command.c - logger commands
+ *
+ * Copyright (C) 2003-2018 Sébastien Helleu <flashcode@flashtux.org>
+ *
+ * This file is part of WeeChat, the extensible chat client.
+ *
+ * WeeChat 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.
+ *
+ * WeeChat 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 WeeChat. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "../weechat-plugin.h"
+#include "logger.h"
+#include "logger-buffer.h"
+#include "logger-config.h"
+
+
+/*
+ * Displays logging status for buffers.
+ */
+
+void
+logger_list ()
+{
+ struct t_infolist *ptr_infolist;
+ struct t_logger_buffer *ptr_logger_buffer;
+ struct t_gui_buffer *ptr_buffer;
+ char status[128];
+
+ weechat_printf (NULL, "");
+ weechat_printf (NULL, _("Logging on buffers:"));
+
+ ptr_infolist = weechat_infolist_get ("buffer", NULL, NULL);
+ if (ptr_infolist)
+ {
+ while (weechat_infolist_next (ptr_infolist))
+ {
+ ptr_buffer = weechat_infolist_pointer (ptr_infolist, "pointer");
+ if (ptr_buffer)
+ {
+ ptr_logger_buffer = logger_buffer_search_buffer (ptr_buffer);
+ if (ptr_logger_buffer)
+ {
+ snprintf (status, sizeof (status),
+ _("logging (level: %d)"),
+ ptr_logger_buffer->log_level);
+ }
+ else
+ {
+ snprintf (status, sizeof (status), "%s", _("not logging"));
+ }
+ weechat_printf (NULL,
+ " %s[%s%d%s]%s (%s) %s%s%s: %s%s%s%s",
+ weechat_color ("chat_delimiters"),
+ weechat_color ("chat"),
+ weechat_infolist_integer (ptr_infolist, "number"),
+ weechat_color ("chat_delimiters"),
+ weechat_color ("chat"),
+ weechat_infolist_string (ptr_infolist, "plugin_name"),
+ weechat_color ("chat_buffer"),
+ weechat_infolist_string (ptr_infolist, "name"),
+ weechat_color ("chat"),
+ status,
+ (ptr_logger_buffer) ? " (" : "",
+ (ptr_logger_buffer) ?
+ ((ptr_logger_buffer->log_filename) ?
+ ptr_logger_buffer->log_filename : _("log not started")) : "",
+ (ptr_logger_buffer) ? ")" : "");
+ }
+ }
+ weechat_infolist_free (ptr_infolist);
+ }
+}
+
+/*
+ * Enables/disables logging on a buffer.
+ */
+
+void
+logger_set_buffer (struct t_gui_buffer *buffer, const char *value)
+{
+ char *name;
+ struct t_config_option *ptr_option;
+
+ name = logger_build_option_name (buffer);
+ if (!name)
+ return;
+
+ if (logger_config_set_level (name, value) != WEECHAT_CONFIG_OPTION_SET_ERROR)
+ {
+ ptr_option = logger_config_get_level (name);
+ if (ptr_option)
+ {
+ weechat_printf (NULL, _("%s: \"%s\" => level %d"),
+ LOGGER_PLUGIN_NAME, name,
+ weechat_config_integer (ptr_option));
+ }
+ }
+
+ free (name);
+}
+
+/*
+ * Callback for command "/logger".
+ */
+
+int
+logger_command_cb (const void *pointer, void *data,
+ struct t_gui_buffer *buffer,
+ int argc, char **argv, char **argv_eol)
+{
+ /* make C compiler happy */
+ (void) pointer;
+ (void) data;
+ (void) argv_eol;
+
+ if ((argc == 1)
+ || ((argc == 2) && (weechat_strcasecmp (argv[1], "list") == 0)))
+ {
+ logger_list ();
+ return WEECHAT_RC_OK;
+ }
+
+ if (weechat_strcasecmp (argv[1], "set") == 0)
+ {
+ if (argc > 2)
+ logger_set_buffer (buffer, argv[2]);
+ return WEECHAT_RC_OK;
+ }
+
+ if (weechat_strcasecmp (argv[1], "flush") == 0)
+ {
+ logger_flush ();
+ return WEECHAT_RC_OK;
+ }
+
+ if (weechat_strcasecmp (argv[1], "disable") == 0)
+ {
+ logger_set_buffer (buffer, "0");
+ return WEECHAT_RC_OK;
+ }
+
+ WEECHAT_COMMAND_ERROR;
+}
+
+/*
+ * Hooks logger commands.
+ */
+
+void
+logger_command_init ()
+{
+ weechat_hook_command (
+ "logger",
+ N_("logger plugin configuration"),
+ N_("list"
+ " || set <level>"
+ " || flush"
+ " || disable"),
+ N_(" list: show logging status for opened buffers\n"
+ " set: set logging level on current buffer\n"
+ " level: level for messages to be logged (0 = logging disabled, "
+ "1 = a few messages (most important) .. 9 = all messages)\n"
+ " flush: write all log files now\n"
+ "disable: disable logging on current buffer (set level to 0)\n"
+ "\n"
+ "Options \"logger.level.*\" and \"logger.mask.*\" can be used to set "
+ "level or mask for a buffer, or buffers beginning with name.\n"
+ "\n"
+ "Log levels used by IRC plugin:\n"
+ " 1: user message, notice, private\n"
+ " 2: nick change\n"
+ " 3: server message\n"
+ " 4: join/part/quit\n"
+ " 9: all other messages\n"
+ "\n"
+ "Examples:\n"
+ " set level to 5 for current buffer:\n"
+ " /logger set 5\n"
+ " disable logging for current buffer:\n"
+ " /logger disable\n"
+ " set level to 3 for all IRC buffers:\n"
+ " /set logger.level.irc 3\n"
+ " disable logging for main WeeChat buffer:\n"
+ " /set logger.level.core.weechat 0\n"
+ " use a directory per IRC server and a file per channel inside:\n"
+ " /set logger.mask.irc \"$server/$channel.weechatlog\""),
+ "list"
+ " || set 1|2|3|4|5|6|7|8|9"
+ " || flush"
+ " || disable",
+ &logger_command_cb, NULL, NULL);
+}