Added SILC Thread Queue API
[runtime.git] / apps / irssi / src / fe-common / core / fe-log.c
index 215d4a52f8b32cd4f44ecd975be236e2d318210f..5b2a7780c59065f34d58f6a3597b2bb6cb02c0a1 100644 (file)
@@ -48,6 +48,8 @@ static THEME_REC *log_theme;
 static int skip_next_printtext;
 static const char *log_theme_name;
 
+static int log_dir_create_mode;
+
 static char *log_colorizer_strip(const char *str)
 {
         return strip_codes(str);
@@ -107,6 +109,8 @@ static void cmd_log_open(const char *data)
                targetarg = g_hash_table_lookup(optlist, "targets");
                if (targetarg != NULL && *targetarg != '\0')
                        log_add_targets(log, targetarg, servertag);
+               else if (servertag != NULL)
+                       log_add_targets(log, "*", servertag);
        }
 
        if (g_hash_table_lookup(optlist, "autoopen"))
@@ -187,17 +191,20 @@ static char *log_items_get_list(LOG_REC *log)
        GSList *tmp;
        GString *str;
        char *ret;
+       LOG_ITEM_REC *rec = NULL;
 
        g_return_val_if_fail(log != NULL, NULL);
        g_return_val_if_fail(log->items != NULL, NULL);
 
        str = g_string_new(NULL);
        for (tmp = log->items; tmp != NULL; tmp = tmp->next) {
-               LOG_ITEM_REC *rec = tmp->data;
+               rec = tmp->data;
 
                 g_string_sprintfa(str, "%s, ", rec->name);
        }
        g_string_truncate(str, str->len-2);
+       if(rec->servertag != NULL)
+               g_string_sprintfa(str, " (%s)", rec->servertag);
 
        ret = str->str;
        g_string_free(str, FALSE);
@@ -438,7 +445,7 @@ static void autolog_open(SERVER_REC *server, const char *server_tag,
                log_item_add(log, LOG_ITEM_TARGET, target, server_tag);
 
                dir = g_dirname(log->real_fname);
-               mkpath(dir, LOG_DIR_CREATE_MODE);
+               mkpath(dir, log_dir_create_mode);
                g_free(dir);
 
                log->temp = TRUE;
@@ -665,10 +672,11 @@ static void sig_theme_destroyed(THEME_REC *theme)
 static void read_settings(void)
 {
        int old_autolog = autolog_level;
+        int log_file_create_mode;
 
        autolog_path = settings_get_str("autolog_path");
        autolog_level = !settings_get_bool("autolog") ? 0 :
-               level2bits(settings_get_str("autolog_level"));
+               settings_get_level("autolog_level");
 
        if (old_autolog && !autolog_level)
                autologs_close_all();
@@ -684,6 +692,12 @@ static void read_settings(void)
 
        log_theme = log_theme_name == NULL ? NULL :
                theme_load(log_theme_name);
+
+       log_file_create_mode = octal2dec(settings_get_int("log_create_mode"));
+        log_dir_create_mode = log_file_create_mode;
+        if (log_file_create_mode & 0400) log_dir_create_mode |= 0100;
+        if (log_file_create_mode & 0040) log_dir_create_mode |= 0010;
+        if (log_file_create_mode & 0004) log_dir_create_mode |= 0001;
 }
 
 void fe_log_init(void)
@@ -695,7 +709,7 @@ void fe_log_init(void)
         settings_add_bool("log", "autolog", FALSE);
        settings_add_bool("log", "autolog_colors", FALSE);
         settings_add_str("log", "autolog_path", "~/irclogs/$tag/$0.log");
-       settings_add_str("log", "autolog_level", "all -crap -clientcrap -ctcps");
+       settings_add_level("log", "autolog_level", "all -crap -clientcrap -ctcps");
         settings_add_str("log", "log_theme", "");
 
        autolog_level = 0;