]> jfr.im git - irc/irssi/irssi.git/commitdiff
add a log_server_time setting
authorAilin Nemui <redacted>
Fri, 13 Aug 2021 19:11:22 +0000 (21:11 +0200)
committerAilin Nemui <redacted>
Sun, 15 Aug 2021 13:57:34 +0000 (15:57 +0200)
src/core/log.c
src/core/log.h
src/fe-common/core/fe-log.c
src/perl/common/Log.xs

index cb6f1edd2c8a0168afafd15ca64b54f9cd3c01d4..5bc953a1e6d8355586eaf146d0fd40c11d46540d 100644 (file)
@@ -204,11 +204,10 @@ static void log_rotate_check(LOG_REC *log)
        g_free(new_fname);
 }
 
-void log_write_rec(LOG_REC *log, const char *str, int level)
+void log_write_rec(LOG_REC *log, const char *str, int level, time_t now)
 {
         char *colorstr;
        struct tm *tm;
-       time_t now;
        int hour, day;
 
        g_return_if_fail(log != NULL);
@@ -217,7 +216,8 @@ void log_write_rec(LOG_REC *log, const char *str, int level)
        if (log->handle == -1)
                return;
 
-       now = time(NULL);
+       if (now == (time_t) -1)
+               now = time(NULL);
        tm = localtime(&now);
        hour = tm->tm_hour;
        day = tm->tm_mday;
@@ -282,8 +282,8 @@ LOG_ITEM_REC *log_item_find(LOG_REC *log, int type, const char *item,
        return NULL;
 }
 
-void log_file_write(const char *server_tag, const char *item, int level,
-                   const char *str, int no_fallbacks)
+void log_file_write(const char *server_tag, const char *item, int level, time_t t, const char *str,
+                    int no_fallbacks)
 {
        GSList *tmp, *fallbacks;
        char *tmpstr;
@@ -309,7 +309,7 @@ void log_file_write(const char *server_tag, const char *item, int level,
                        fallbacks = g_slist_append(fallbacks, rec);
                else if (log_item_find(rec, LOG_ITEM_TARGET, item,
                                       server_tag) != NULL)
-                       log_write_rec(rec, str, level);
+                       log_write_rec(rec, str, level, t);
        }
 
        if (!found && !no_fallbacks && fallbacks != NULL) {
@@ -319,7 +319,7 @@ void log_file_write(const char *server_tag, const char *item, int level,
                        g_strdup(str);
 
                for (tmp = fallbacks; tmp != NULL; tmp = tmp->next)
-                        log_write_rec(tmp->data, tmpstr, level);
+                       log_write_rec(tmp->data, tmpstr, level, t);
 
                g_free(tmpstr);
        }
index 1c529670985da23c192415d0d847525b0203f58c..19bca4f31a4ba27a2c87ea28f3b4518e1b3aeabd 100644 (file)
@@ -51,9 +51,9 @@ void log_item_destroy(LOG_REC *log, LOG_ITEM_REC *item);
 LOG_ITEM_REC *log_item_find(LOG_REC *log, int type, const char *item,
                            const char *servertag);
 
-void log_file_write(const char *server_tag, const char *item, int level,
-                   const char *str, int no_fallbacks);
-void log_write_rec(LOG_REC *log, const char *str, int level);
+void log_file_write(const char *server_tag, const char *item, int level, time_t t, const char *str,
+                    int no_fallbacks);
+void log_write_rec(LOG_REC *log, const char *str, int level, time_t now);
 
 int log_start_logging(LOG_REC *log);
 void log_stop_logging(LOG_REC *log);
index b5222059b0c7ed40757c7c86618acd8f68ca83c8..984b3548a81c7a2380d5557c24e3ac7a7f5bef48 100644 (file)
@@ -48,6 +48,7 @@
 #define AUTOLOG_INACTIVITY_CLOSE (60*5)
 
 static int autolog_level;
+static int log_server_time;
 static int autoremove_tag;
 static char *autolog_path;
 
@@ -502,8 +503,8 @@ static void autolog_open_check(TEXT_DEST_REC *dest)
                autolog_open(server, server_tag, g_strcmp0(target, "*") ? target : deftarget);
 }
 
-static void log_single_line(WINDOW_REC *window, const char *server_tag,
-                           const char *target, int level, const char *text)
+static void log_single_line(WINDOW_REC *window, const char *server_tag, const char *target,
+                            int level, time_t t, const char *text)
 {
        char windownum[MAX_INT_STRLEN];
        LOG_REC *log;
@@ -514,15 +515,16 @@ static void log_single_line(WINDOW_REC *window, const char *server_tag,
                log = logs_find_item(LOG_ITEM_WINDOW_REFNUM,
                                     windownum, NULL, NULL);
                if (log != NULL)
-                       log_write_rec(log, text, level);
+                       log_write_rec(log, text, level, t);
        }
 
-       log_file_write(server_tag, target, level, text, FALSE);
+       log_file_write(server_tag, target, level, t, text, FALSE);
 }
 
 static void log_line(TEXT_DEST_REC *dest, const char *text)
 {
        char **lines, **tmp;
+       time_t t = (time_t) -1;
 
        if (dest->level == MSGLEVEL_NEVER)
                return;
@@ -536,9 +538,18 @@ static void log_line(TEXT_DEST_REC *dest, const char *text)
        /* text may contain one or more lines, log wants to eat them one
           line at a time */
        lines = g_strsplit(text, "\n", -1);
+       if (log_server_time && dest->meta != NULL) {
+               char *val;
+               if ((val = g_hash_table_lookup(dest->meta, "time")) != NULL) {
+                       GDateTime *time;
+                       if ((time = g_date_time_new_from_iso8601(val, NULL)) != NULL) {
+                               t = g_date_time_to_unix(time);
+                               g_date_time_unref(time);
+                       }
+               }
+       }
        for (tmp = lines; *tmp != NULL; tmp++)
-               log_single_line(dest->window, dest->server_tag,
-                               dest->target, dest->level, *tmp);
+               log_single_line(dest->window, dest->server_tag, dest->target, dest->level, t, *tmp);
        g_strfreev(lines);
 }
 
@@ -720,6 +731,13 @@ static void read_settings(void)
                g_strfreev(autolog_ignore_targets);
 
        autolog_ignore_targets = g_strsplit(settings_get_str("autolog_ignore_targets"), " ", -1);
+
+       log_server_time = settings_get_choice("log_server_time");
+       if (log_server_time == 2) {
+               SETTINGS_REC *rec = settings_get_record("show_server_time");
+               if (rec != NULL)
+                       log_server_time = settings_get_bool("show_server_time");
+       }
 }
 
 void fe_log_init(void)
@@ -731,7 +749,8 @@ void fe_log_init(void)
         settings_add_bool("log", "autolog", FALSE);
        settings_add_bool("log", "autolog_colors", FALSE);
        settings_add_bool("log", "autolog_only_saved_channels", FALSE);
-        settings_add_str("log", "autolog_path", "~/irclogs/$tag/$0.log");
+       settings_add_choice("log", "log_server_time", 2, "off;on;auto");
+       settings_add_str("log", "autolog_path", "~/irclogs/$tag/$0.log");
        settings_add_level("log", "autolog_level", "all -crap -clientcrap -ctcps");
         settings_add_str("log", "log_theme", "");
        settings_add_str("log", "autolog_ignore_targets", "");
index cdcdbd90a611cc47058fc316cec64f846001115e..532095fb2167ef2ae730d2f95ef6bdf370d03211 100644 (file)
@@ -54,10 +54,11 @@ log_close(log)
        Irssi::Log log
 
 void
-log_write_rec(log, str, level)
+log_write_rec(log, str, level, now = -1)
        Irssi::Log log
        char *str
        int level
+       time_t now
 
 void
 log_start_logging(log)