summaryrefslogtreecommitdiff
path: root/src/plugins/logger/logger-config.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/logger/logger-config.c')
-rw-r--r--src/plugins/logger/logger-config.c323
1 files changed, 318 insertions, 5 deletions
diff --git a/src/plugins/logger/logger-config.c b/src/plugins/logger/logger-config.c
index 3569337c4..3183be4a5 100644
--- a/src/plugins/logger/logger-config.c
+++ b/src/plugins/logger/logger-config.c
@@ -28,6 +28,10 @@
struct t_config_file *logger_config_file = NULL;
+struct t_config_section *logger_config_section_level = NULL;
+struct t_config_section *logger_config_section_mask = NULL;
+
+int logger_config_loading = 0;
/* logger config, look section */
@@ -38,11 +42,272 @@ struct t_config_option *logger_config_look_backlog;
struct t_config_option *logger_config_file_auto_log;
struct t_config_option *logger_config_file_name_lower_case;
struct t_config_option *logger_config_file_path;
+struct t_config_option *logger_config_file_mask;
struct t_config_option *logger_config_file_info_lines;
struct t_config_option *logger_config_file_time_format;
/*
+ * logger_config_change_file_option_restart_log: called when a file option is
+ * changed and that logging must
+ * be restarted for all buffers
+ */
+
+void
+logger_config_change_file_option_restart_log (void *data,
+ struct t_config_option *option)
+{
+ /* make C compiler happy */
+ (void) data;
+ (void) option;
+
+ if (!logger_config_loading)
+ {
+ logger_stop_all ();
+ logger_start_buffer_all ();
+ }
+}
+
+/*
+ * logger_config_level_change: called when a level option is changed
+ */
+
+void
+logger_config_level_change (void *data,
+ struct t_config_option *option)
+{
+ /* make C compiler happy */
+ (void) data;
+ (void) option;
+
+ if (!logger_config_loading)
+ logger_start_buffer_all ();
+}
+
+/*
+ * logger_config_level_delete_option: delete option in "level" section
+ */
+
+int
+logger_config_level_delete_option (void *data,
+ struct t_config_file *config_file,
+ struct t_config_section *section,
+ struct t_config_option *option)
+{
+ /* make C compiler happy */
+ (void) data;
+ (void) config_file;
+ (void) section;
+
+ weechat_config_option_free (option);
+
+ logger_start_buffer_all ();
+
+ return WEECHAT_CONFIG_OPTION_UNSET_OK_REMOVED;
+}
+
+/*
+ * logger_config_level_create_option: create option in "level" section
+ */
+
+int
+logger_config_level_create_option (void *data,
+ struct t_config_file *config_file,
+ struct t_config_section *section,
+ const char *option_name,
+ const char *value)
+{
+ struct t_config_option *ptr_option;
+ int rc;
+
+ /* make C compiler happy */
+ (void) data;
+
+ rc = WEECHAT_CONFIG_OPTION_SET_ERROR;
+
+ if (option_name)
+ {
+ ptr_option = weechat_config_search_option (config_file, section,
+ option_name);
+ if (ptr_option)
+ {
+ if (value && value[0])
+ rc = weechat_config_option_set (ptr_option, value, 1);
+ else
+ {
+ weechat_config_option_free (ptr_option);
+ rc = WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE;
+ }
+ }
+ else
+ {
+ if (value && value[0])
+ {
+ ptr_option = weechat_config_new_option (
+ config_file, section,
+ option_name, "integer",
+ _("logging level for this buffer (0 = logging disabled, "
+ "1 = a few messages (most important) .. 9 = all messages)"),
+ NULL, 0, 9, "9", value, NULL, NULL,
+ &logger_config_level_change, NULL,
+ NULL, NULL);
+ rc = (ptr_option) ?
+ WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE : WEECHAT_CONFIG_OPTION_SET_ERROR;
+ }
+ else
+ rc = WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE;
+ }
+ }
+
+ if (!logger_config_loading)
+ logger_start_buffer_all ();
+
+ return rc;
+}
+
+/*
+ * logger_config_get_level: get a level option
+ */
+
+struct t_config_option *
+logger_config_get_level (const char *name)
+{
+ return weechat_config_search_option (logger_config_file,
+ logger_config_section_level,
+ name);
+}
+
+/*
+ * logger_config_set_level: set a level option
+ */
+
+int
+logger_config_set_level (const char *name, const char *value)
+{
+ return logger_config_level_create_option (NULL,
+ logger_config_file,
+ logger_config_section_level,
+ name,
+ value);
+}
+
+/*
+ * logger_config_mask_change: called when a mask option is changed
+ */
+
+void
+logger_config_mask_change (void *data,
+ struct t_config_option *option)
+{
+ /* make C compiler happy */
+ (void) data;
+ (void) option;
+
+ if (!logger_config_loading)
+ {
+ logger_stop_all ();
+ logger_start_buffer_all ();
+ }
+}
+
+/*
+ * logger_config_mask_delete_option: delete option in "mask" section
+ */
+
+int
+logger_config_mask_delete_option (void *data,
+ struct t_config_file *config_file,
+ struct t_config_section *section,
+ struct t_config_option *option)
+{
+ /* make C compiler happy */
+ (void) data;
+ (void) config_file;
+ (void) section;
+
+ weechat_config_option_free (option);
+
+ logger_stop_all ();
+ logger_start_buffer_all ();
+
+ return WEECHAT_CONFIG_OPTION_UNSET_OK_REMOVED;
+}
+
+/*
+ * logger_config_mask_create_option: create option in "mask" section
+ */
+
+int
+logger_config_mask_create_option (void *data,
+ struct t_config_file *config_file,
+ struct t_config_section *section,
+ const char *option_name,
+ const char *value)
+{
+ struct t_config_option *ptr_option;
+ int rc;
+
+ /* make C compiler happy */
+ (void) data;
+
+ rc = WEECHAT_CONFIG_OPTION_SET_ERROR;
+
+ if (option_name)
+ {
+ ptr_option = weechat_config_search_option (config_file, section,
+ option_name);
+ if (ptr_option)
+ {
+ if (value && value[0])
+ rc = weechat_config_option_set (ptr_option, value, 1);
+ else
+ {
+ weechat_config_option_free (ptr_option);
+ rc = WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE;
+ }
+ }
+ else
+ {
+ if (value && value[0])
+ {
+ ptr_option = weechat_config_new_option (
+ config_file, section,
+ option_name, "string",
+ _("file mask for log file; local buffer variables are "
+ "permitted"),
+ NULL, 0, 0, "", value, NULL, NULL,
+ &logger_config_mask_change, NULL,
+ NULL, NULL);
+ rc = (ptr_option) ?
+ WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE : WEECHAT_CONFIG_OPTION_SET_ERROR;
+ }
+ else
+ rc = WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE;
+ }
+ }
+
+ if (!logger_config_loading)
+ {
+ logger_stop_all ();
+ logger_start_buffer_all ();
+ }
+
+ return rc;
+}
+
+/*
+ * logger_config_get_mask: get a mask option
+ */
+
+struct t_config_option *
+logger_config_get_mask (const char *name)
+{
+ return weechat_config_search_option (logger_config_file,
+ logger_config_section_mask,
+ name);
+}
+
+/*
* logger_config_init: init logger configuration file
* return: 1 if ok, 0 if error
*/
@@ -61,7 +326,8 @@ logger_config_init ()
ptr_section = weechat_config_new_section (logger_config_file, "look",
0, 0,
NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL);
+ NULL, NULL, NULL, NULL,
+ NULL, NULL);
if (!ptr_section)
{
weechat_config_free (logger_config_file);
@@ -79,7 +345,8 @@ logger_config_init ()
ptr_section = weechat_config_new_section (logger_config_file, "file",
0, 0,
NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL);
+ NULL, NULL, NULL, NULL,
+ NULL, NULL);
if (!ptr_section)
{
weechat_config_free (logger_config_file);
@@ -96,13 +363,23 @@ logger_config_init ()
logger_config_file, ptr_section,
"name_lower_case", "boolean",
N_("use only lower case for log filenames"),
- NULL, 0, 0, "on", NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+ NULL, 0, 0, "on", NULL, NULL, NULL,
+ &logger_config_change_file_option_restart_log, NULL, NULL, NULL);
logger_config_file_path = weechat_config_new_option (
logger_config_file, ptr_section,
"path", "string",
N_("path for WeeChat log files ('%h' will be replaced by WeeChat "
"home, ~/.weechat by default)"),
- NULL, 0, 0, "%h/logs/", NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+ NULL, 0, 0, "%h/logs/", NULL, NULL, NULL,
+ &logger_config_change_file_option_restart_log, NULL, NULL, NULL);
+ logger_config_file_mask = weechat_config_new_option (
+ logger_config_file, ptr_section,
+ "mask", "string",
+ N_("default file name mask for log files (format is 'directory/to/file' "
+ "or 'file', without first '/' because 'path' option is used to "
+ "build complete path to file); local buffer variables are permitted"),
+ NULL, 0, 0, "$plugin.$name.weechatlog", NULL, NULL, NULL,
+ &logger_config_change_file_option_restart_log, NULL, NULL, NULL);
logger_config_file_info_lines = weechat_config_new_option (
logger_config_file, ptr_section,
"info_lines", "boolean",
@@ -116,6 +393,36 @@ logger_config_init ()
"specifiers)"),
NULL, 0, 0, "%Y-%m-%d %H:%M:%S", NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+ /* level */
+ ptr_section = weechat_config_new_section (logger_config_file, "level",
+ 1, 1,
+ NULL, NULL, NULL, NULL,
+ NULL, NULL,
+ &logger_config_level_create_option, NULL,
+ &logger_config_level_delete_option, NULL);
+ if (!ptr_section)
+ {
+ weechat_config_free (logger_config_file);
+ return 0;
+ }
+
+ logger_config_section_level = ptr_section;
+
+ /* mask */
+ ptr_section = weechat_config_new_section (logger_config_file, "mask",
+ 1, 1,
+ NULL, NULL, NULL, NULL,
+ NULL, NULL,
+ &logger_config_mask_create_option, NULL,
+ &logger_config_mask_delete_option, NULL);
+ if (!ptr_section)
+ {
+ weechat_config_free (logger_config_file);
+ return 0;
+ }
+
+ logger_config_section_mask = ptr_section;
+
return 1;
}
@@ -126,7 +433,13 @@ logger_config_init ()
int
logger_config_read ()
{
- return weechat_config_read (logger_config_file);
+ int rc;
+
+ logger_config_loading = 1;
+ rc = weechat_config_read (logger_config_file);
+ logger_config_loading = 0;
+
+ return rc;
}
/*