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);
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"))
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);
open_log = log == NULL;
close_log = log != NULL;
} else {
- printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, TXT_NOT_TOGGLE);
+ printformat(NULL, NULL, MSGLEVEL_CLIENTERROR, TXT_NOT_TOGGLE);
cmd_params_free(free_arg);
return;
}
const char *target)
{
LOG_REC *log;
- char *fname, *dir, *fixed_target;
+ char *fname, *dir, *fixed_target, *params;
log = logs_find_item(LOG_ITEM_TARGET, target, server_tag, NULL);
if (log != NULL && !log->failed) {
if (CHAT_PROTOCOL(server)->case_insensitive)
g_strdown(fixed_target);
- fname = parse_special_string(autolog_path, server, NULL,
- fixed_target, NULL, 0);
+ /* $0 = target, $1 = server tag */
+ params = g_strconcat(fixed_target, " ", server_tag, NULL);
g_free(fixed_target);
+ fname = parse_special_string(autolog_path, server, NULL,
+ params, NULL, 0);
+ g_free(params);
+
if (log_find(fname) == NULL) {
log = log_create_rec(fname, autolog_level);
if (!settings_get_bool("autolog_colors"))
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;
char **targets, **tmp;
LOG_REC *log;
- /* save to log created with /WINDOW LOG */
- ltoa(windownum, window->refnum);
- log = logs_find_item(LOG_ITEM_WINDOW_REFNUM,
- windownum, NULL, NULL);
- if (log != NULL) {
- log_write_rec(log, text, level);
+ if (window != NULL) {
+ /* save to log created with /WINDOW LOG */
+ ltoa(windownum, window->refnum);
+ log = logs_find_item(LOG_ITEM_WINDOW_REFNUM,
+ windownum, NULL, NULL);
+ if (log != NULL)
+ log_write_rec(log, text, level);
}
if (target == NULL)
return 1;
}
-static void sig_window_item_destroy(WINDOW_REC *window, WI_ITEM_REC *item)
+static void sig_window_item_remove(WINDOW_REC *window, WI_ITEM_REC *item)
{
LOG_REC *log;
- log = logs_find_item(LOG_ITEM_TARGET, item->name,
+ log = logs_find_item(LOG_ITEM_TARGET, item->visible_name,
item->server == NULL ? NULL :
item->server->tag, NULL);
if (log != NULL && log->temp)
static void sig_log_locked(LOG_REC *log)
{
- printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE,
+ printformat(NULL, NULL, MSGLEVEL_CLIENTERROR,
TXT_LOG_LOCKED, log->fname);
}
static void sig_log_create_failed(LOG_REC *log)
{
- printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE,
+ printformat(NULL, NULL, MSGLEVEL_CLIENTERROR,
TXT_LOG_CREATE_FAILED,
log->real_fname, g_strerror(errno));
}
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();
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)
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;
command_bind("window log", NULL, (SIGNAL_FUNC) cmd_window_log);
command_bind("window logfile", NULL, (SIGNAL_FUNC) cmd_window_logfile);
signal_add_first("print text", (SIGNAL_FUNC) sig_printtext);
- signal_add("window item destroy", (SIGNAL_FUNC) sig_window_item_destroy);
+ signal_add("window item remove", (SIGNAL_FUNC) sig_window_item_remove);
signal_add("window refnum changed", (SIGNAL_FUNC) sig_window_refnum_changed);
signal_add("server disconnected", (SIGNAL_FUNC) sig_server_disconnected);
signal_add("log locked", (SIGNAL_FUNC) sig_log_locked);
command_unbind("window log", (SIGNAL_FUNC) cmd_window_log);
command_unbind("window logfile", (SIGNAL_FUNC) cmd_window_logfile);
signal_remove("print text", (SIGNAL_FUNC) sig_printtext);
- signal_remove("window item destroy", (SIGNAL_FUNC) sig_window_item_destroy);
+ signal_remove("window item remove", (SIGNAL_FUNC) sig_window_item_remove);
signal_remove("window refnum changed", (SIGNAL_FUNC) sig_window_refnum_changed);
signal_remove("server disconnected", (SIGNAL_FUNC) sig_server_disconnected);
signal_remove("log locked", (SIGNAL_FUNC) sig_log_locked);