about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2012-10-14 19:28:32 +0100
committerJames Booth <boothj5@gmail.com>2012-10-14 19:28:32 +0100
commit43a7f5885081ef8baa0f2a2587513397b093921c (patch)
tree5a4f25765155a861bf27d9743a2c10af8fb0a217 /src
parent5d49993151eecd4be09c7c33ecb99ff7dd81d170 (diff)
parent6ef7b30cd7b3dd709623fe9195d55c360f9b17e8 (diff)
downloadprofani-tty-43a7f5885081ef8baa0f2a2587513397b093921c.tar.gz
Merge branch 'master' into type_out
Diffstat (limited to 'src')
-rw-r--r--src/chat_log.c25
-rw-r--r--src/chat_log.h4
-rw-r--r--src/command.c20
-rw-r--r--src/preferences.c13
-rw-r--r--src/preferences.h2
-rw-r--r--src/windows.c9
6 files changed, 60 insertions, 13 deletions
diff --git a/src/chat_log.c b/src/chat_log.c
index ea3df7ef..5d15d8e4 100644
--- a/src/chat_log.c
+++ b/src/chat_log.c
@@ -44,8 +44,8 @@ static gboolean _log_roll_needed(struct dated_chat_log *dated_log);
 static struct dated_chat_log *_create_log(char *other, const  char * const login);
 static void _free_chat_log(struct dated_chat_log *dated_log);
 static gboolean _key_equals(void *key1, void *key2);
-static char * _get_log_filename(char *other, const char * const login, 
-    GDateTime *dt);
+static char * _get_log_filename(const char * const other, const char * const login, 
+    GDateTime *dt, gboolean create);
 
 void
 chat_log_init(void)
@@ -94,7 +94,7 @@ chat_log_chat(const gchar * const login, gchar *other,
 }
 
 GSList *
-chat_log_get_previous(const gchar * const login, gchar *recipient, 
+chat_log_get_previous(const gchar * const login, const gchar * const recipient, 
     GSList *history)
 {
     GTimeZone *tz = g_time_zone_new_local();
@@ -110,7 +110,7 @@ chat_log_get_previous(const gchar * const login, gchar *recipient,
     
     // get data from all logs from the day the session was started to today
     while (g_date_time_get_day_of_year(log_date) <=  g_date_time_get_day_of_year(now)) {
-        char *filename = _get_log_filename(recipient, login, log_date);
+        char *filename = _get_log_filename(recipient, login, log_date, FALSE);
     
         FILE *logp = fopen(filename, "r");
         char *line = NULL;
@@ -162,7 +162,7 @@ static struct dated_chat_log *
 _create_log(char *other, const char * const login)
 {
     GDateTime *now = g_date_time_new_now_local();
-    char *filename = _get_log_filename(other, login, now);
+    char *filename = _get_log_filename(other, login, now, TRUE);
 
     struct dated_chat_log *new_log = malloc(sizeof(struct dated_chat_log));
     new_log->filename = strdup(filename);
@@ -213,20 +213,27 @@ gboolean _key_equals(void *key1, void *key2)
 }
 
 static char *
-_get_log_filename(char *other, const char * const login, GDateTime *dt)
+_get_log_filename(const char * const other, const char * const login, 
+    GDateTime *dt, gboolean create)
 {
     GString *log_file = g_string_new(getenv("HOME"));
     g_string_append(log_file, "/.profanity/log");
-    create_dir(log_file->str);
+    if (create) {
+        create_dir(log_file->str);
+    }
 
     gchar *login_dir = str_replace(login, "@", "_at_");
     g_string_append_printf(log_file, "/%s", login_dir);
-    create_dir(log_file->str);
+    if (create) {
+        create_dir(log_file->str);
+    }
     free(login_dir);
 
     gchar *other_file = str_replace(other, "@", "_at_");
     g_string_append_printf(log_file, "/%s", other_file);
-    create_dir(log_file->str);
+    if (create) {
+        create_dir(log_file->str);
+    }
     free(other_file);
 
     gchar *date = g_date_time_format(dt, "/%Y_%m_%d.log");
diff --git a/src/chat_log.h b/src/chat_log.h
index d8455a26..7071da55 100644
--- a/src/chat_log.h
+++ b/src/chat_log.h
@@ -34,7 +34,7 @@ void chat_log_init(void);
 void chat_log_chat(const gchar * const login, gchar *other, 
     const gchar * const msg, chat_log_direction_t direction);
 void chat_log_close(void);
-GSList * chat_log_get_previous(const gchar * const login, gchar *recipient, 
-    GSList *history);
+GSList * chat_log_get_previous(const gchar * const login, 
+    const gchar * const recipient, GSList *history);
 
 #endif
diff --git a/src/command.c b/src/command.c
index 806311cd..5c8e30fa 100644
--- a/src/command.c
+++ b/src/command.c
@@ -74,6 +74,7 @@ static gboolean _cmd_set_typing(const char * const inp, struct cmd_help_t help);
 static gboolean _cmd_set_flash(const char * const inp, struct cmd_help_t help);
 static gboolean _cmd_set_showsplash(const char * const inp, struct cmd_help_t help);
 static gboolean _cmd_set_chlog(const char * const inp, struct cmd_help_t help);
+static gboolean _cmd_set_history(const char * const inp, struct cmd_help_t help);
 static gboolean _cmd_set_remind(const char * const inp, struct cmd_help_t help);
 static gboolean _cmd_away(const char * const inp, struct cmd_help_t help);
 static gboolean _cmd_online(const char * const inp, struct cmd_help_t help);
@@ -275,6 +276,18 @@ static struct cmd_t setting_commands[] =
           "to myfriend@chatserv.com, the following chat log will be created:",
           "",
           "    ~/.profanity/log/someuser_at_chatserv.com/myfriend_at_chatserv.com",
+          NULL } } },
+
+    { "/history", 
+        _cmd_set_history,
+        { "/history on|off", "Enable/disable chat history.",
+        { "/history on|off",
+          "-------------",
+          "Switch chat history on or off, requires chlog to be enabled.",
+          "When history is enabled, previous messages are shown in chat windows.",
+          "The last day of messages are shown, or if you have had profanity open",
+          "for more than a day, messages will be shown from the day which",
+          "you started profanity.",
           NULL } } }
 };
 
@@ -769,6 +782,13 @@ _cmd_set_chlog(const char * const inp, struct cmd_help_t help)
 }
 
 static gboolean
+_cmd_set_history(const char * const inp, struct cmd_help_t help)
+{
+    return _cmd_set_boolean_preference(inp, help, "/history", 
+        "Chat history", prefs_set_history);
+}
+
+static gboolean
 _cmd_set_remind(const char * const inp, struct cmd_help_t help)
 {
     if ((strncmp(inp, "/remind ", 8) != 0) || (strlen(inp) < 9)) {
diff --git a/src/preferences.c b/src/preferences.c
index 13aa1793..847b1817 100644
--- a/src/preferences.c
+++ b/src/preferences.c
@@ -269,6 +269,19 @@ prefs_set_chlog(gboolean value)
     _save_prefs();
 }
 
+gboolean
+prefs_get_history(void)
+{
+    return g_key_file_get_boolean(prefs, "ui", "history", NULL);
+}
+
+void
+prefs_set_history(gboolean value)
+{
+    g_key_file_set_boolean(prefs, "ui", "history", value);
+    _save_prefs();
+}
+
 gint
 prefs_get_remind(void)
 {
diff --git a/src/preferences.h b/src/preferences.h
index e94701e4..8b4f5e68 100644
--- a/src/preferences.h
+++ b/src/preferences.h
@@ -50,6 +50,8 @@ gboolean prefs_get_flash(void);
 void prefs_set_flash(gboolean value);
 gboolean prefs_get_chlog(void);
 void prefs_set_chlog(gboolean value);
+gboolean prefs_get_history(void);
+void prefs_set_history(gboolean value);
 gboolean prefs_get_showsplash(void);
 void prefs_set_showsplash(gboolean value);
 gint prefs_get_remind(void);
diff --git a/src/windows.c b/src/windows.c
index 141cf93c..74e51a0f 100644
--- a/src/windows.c
+++ b/src/windows.c
@@ -283,7 +283,7 @@ win_show_incomming_msg(const char * const from, const char * const message)
             flash();
 
         _wins[win_index].unread++;
-        if (prefs_get_chlog()) {
+        if (prefs_get_chlog() && prefs_get_history()) {
             if (!_wins[win_index].history_shown) {
                 GSList *history = NULL;
                 history = chat_log_get_previous(jabber_get_jid(), short_from, history);
@@ -389,7 +389,7 @@ win_show_outgoing_msg(const char * const from, const char * const to,
             win_index = _new_prof_win(to);
             win = _wins[win_index].win;
             
-            if (prefs_get_chlog()) {
+            if (prefs_get_chlog() && prefs_get_history()) {
                 if (!_wins[win_index].history_shown) {
                     GSList *history = NULL;
                     history = chat_log_get_previous(jabber_get_jid(), to, history);
@@ -531,6 +531,11 @@ cons_prefs(void)
     else
         cons_show("Chat logging            : OFF");    
 
+    if (prefs_get_history())
+        cons_show("Chat history            : ON");
+    else
+        cons_show("Chat history            : OFF");    
+
     gint remind_period = prefs_get_remind();
     if (remind_period == 0) {
         cons_show("Message reminder period : OFF");