about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2014-04-13 21:56:35 +0100
committerJames Booth <boothj5@gmail.com>2014-04-13 21:56:51 +0100
commitc3418a290959a6b128c6224ccd01562850ae98c0 (patch)
tree33bc9b65c83cb96ce6f1466db263e00a04a2417d /src
parenta4a23fdf689608636e1d7fe049be081728f69e46 (diff)
downloadprofani-tty-c3418a290959a6b128c6224ccd01562850ae98c0.tar.gz
Added /log shared setting
Issue #170
Diffstat (limited to 'src')
-rw-r--r--src/command/command.c11
-rw-r--r--src/command/commands.c12
-rw-r--r--src/config/preferences.c4
-rw-r--r--src/config/preferences.h3
-rw-r--r--src/log.c22
-rw-r--r--src/log.h1
-rw-r--r--src/ui/console.c6
7 files changed, 51 insertions, 8 deletions
diff --git a/src/command/command.c b/src/command/command.c
index 89d3e376..240a4ad6 100644
--- a/src/command/command.c
+++ b/src/command/command.c
@@ -644,8 +644,9 @@ static struct cmd_t command_defs[] =
         { "/log [property] [value]",
           "-----------------------",
           "Property may be one of:",
-          "rotate  : 'on' or 'off', determines whether the log will be rotated, defaults to 'on'",
-          "maxsize : When log file size exceeds this value and rotate is enabled, it will be automatically be rotated, defaults to 1048580 (1MB)",
+          "rotate  : Rotate log, accepts 'on' or 'off', defaults to 'on'.",
+          "maxsize : With rotate enabled, specifies the max log size, defaults to 1048580 (1MB).",
+          "shared  : Share logs between all instances, accepts 'on' or 'off', defaults to 'on'.",
           NULL } } },
 
     { "/reconnect",
@@ -953,6 +954,7 @@ cmd_init(void)
     log_ac = autocomplete_new();
     autocomplete_add(log_ac, "maxsize");
     autocomplete_add(log_ac, "rotate");
+    autocomplete_add(log_ac, "shared");
 
     autoaway_ac = autocomplete_new();
     autocomplete_add(autoaway_ac, "mode");
@@ -1687,6 +1689,11 @@ _log_autocomplete(char *input, int *size)
     if (result != NULL) {
         return result;
     }
+    result = autocomplete_param_with_func(input, size, "/log shared",
+        prefs_autocomplete_boolean_choice);
+    if (result != NULL) {
+        return result;
+    }
     result = autocomplete_param_with_ac(input, size, "/log", log_ac);
     if (result != NULL) {
         return result;
diff --git a/src/command/commands.c b/src/command/commands.c
index 884c26a4..bebf9d3c 100644
--- a/src/command/commands.c
+++ b/src/command/commands.c
@@ -2304,6 +2304,18 @@ cmd_log(gchar **args, struct cmd_help_t help)
         }
     }
 
+    if (strcmp(subcmd, "shared") == 0) {
+        if (value == NULL) {
+            cons_show("Usage: %s", help.usage);
+            return TRUE;
+        } else {
+            gboolean result = _cmd_set_boolean_preference(value, help,
+                "Shared log", PREF_LOG_SHARED);
+            log_reinit();
+            return result;
+        }
+    }
+
     cons_show("Usage: %s", help.usage);
 
     /* TODO: make 'level' subcommand for debug level */
diff --git a/src/config/preferences.c b/src/config/preferences.c
index 7327cd8e..9cc91cb6 100644
--- a/src/config/preferences.c
+++ b/src/config/preferences.c
@@ -394,6 +394,7 @@ _get_group(preference_t pref)
         case PREF_GRLOG:
         case PREF_OTR_LOG:
         case PREF_LOG_ROTATE:
+        case PREF_LOG_SHARED:
             return PREF_GROUP_LOGGING;
         case PREF_AUTOAWAY_CHECK:
         case PREF_AUTOAWAY_MODE:
@@ -467,6 +468,8 @@ _get_key(preference_t pref)
             return "otr.warn";
         case PREF_LOG_ROTATE:
             return "rotate";
+        case PREF_LOG_SHARED:
+            return "shared";
         default:
             return NULL;
     }
@@ -481,6 +484,7 @@ _get_default_boolean(preference_t pref)
         case PREF_OTR_WARN:
         case PREF_AUTOAWAY_CHECK:
         case PREF_LOG_ROTATE:
+        case PREF_LOG_SHARED:
             return TRUE;
         default:
             return FALSE;
diff --git a/src/config/preferences.h b/src/config/preferences.h
index 266fccc5..310b9032 100644
--- a/src/config/preferences.h
+++ b/src/config/preferences.h
@@ -63,7 +63,8 @@ typedef enum {
     PREF_CONNECT_ACCOUNT,
     PREF_OTR_LOG,
     PREF_OTR_WARN,
-    PREF_LOG_ROTATE
+    PREF_LOG_ROTATE,
+    PREF_LOG_SHARED
 } preference_t;
 
 typedef struct prof_alias_t {
diff --git a/src/log.c b/src/log.c
index b0745392..cb346e6c 100644
--- a/src/log.c
+++ b/src/log.c
@@ -25,6 +25,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <unistd.h>
 
 #include "glib.h"
 
@@ -60,7 +61,7 @@ static char * _get_log_filename(const char * const other, const char * const log
 static char * _get_groupchat_log_filename(const char * const room,
     const char * const login, GDateTime *dt, gboolean create);
 static gchar * _get_chatlog_dir(void);
-static gchar * _get_log_file(void);
+static gchar * _get_main_log_file(void);
 static void _rotate_log_file(void);
 static char* _log_string_from_level(log_level_t level);
 
@@ -117,11 +118,18 @@ log_init(log_level_t filter)
 {
     level_filter = filter;
     tz = g_time_zone_new_local();
-    gchar *log_file = _get_log_file();
+    gchar *log_file = _get_main_log_file();
     logp = fopen(log_file, "a");
     free(log_file);
 }
 
+void
+log_reinit(void)
+{
+    log_close();
+    log_init(level_filter);
+}
+
 log_level_t
 log_get_filter(void)
 {
@@ -183,7 +191,7 @@ log_level_from_string(char *log_level)
 static void
 _rotate_log_file(void)
 {
-    gchar *log_file = _get_log_file();
+    gchar *log_file = _get_main_log_file();
     size_t len = strlen(log_file);
     char *log_file_new = malloc(len + 3);
 
@@ -518,11 +526,15 @@ _get_chatlog_dir(void)
 }
 
 static gchar *
-_get_log_file(void)
+_get_main_log_file(void)
 {
     gchar *xdg_data = xdg_get_data_home();
     GString *logfile = g_string_new(xdg_data);
-    g_string_append(logfile, "/profanity/logs/profanity.log");
+    g_string_append(logfile, "/profanity/logs/profanity");
+    if (!prefs_get_boolean(PREF_LOG_SHARED)) {
+        g_string_append_printf(logfile, "%d", getpid());
+    }
+    g_string_append(logfile, ".log");
     gchar *result = strdup(logfile->str);
     free(xdg_data);
     g_string_free(logfile, TRUE);
diff --git a/src/log.h b/src/log.h
index fcb1a9f2..86d96392 100644
--- a/src/log.h
+++ b/src/log.h
@@ -41,6 +41,7 @@ typedef enum {
 void log_init(log_level_t filter);
 log_level_t log_get_filter(void);
 void log_close(void);
+void log_reinit(void);
 void log_debug(const char * const msg, ...);
 void log_info(const char * const msg, ...);
 void log_warning(const char * const msg, ...);
diff --git a/src/ui/console.c b/src/ui/console.c
index aedb637d..ec9130cf 100644
--- a/src/ui/console.c
+++ b/src/ui/console.c
@@ -1223,10 +1223,16 @@ static void
 _cons_log_setting(void)
 {
     cons_show("Max log size (/log maxsize) : %d bytes", prefs_get_max_log_size());
+
     if (prefs_get_boolean(PREF_LOG_ROTATE))
         cons_show("Log rotation (/log rotate)  : ON");
     else
         cons_show("Log rotation (/log rotate)  : OFF");
+
+    if (prefs_get_boolean(PREF_LOG_SHARED))
+        cons_show("Shared log (/log shared)    : ON");
+    else
+        cons_show("Shared log (/log shared)    : OFF");
 }
 
 static void