From da302d92c7685a56679c80b757e0adee8d092488 Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 14 Oct 2012 17:58:58 +0100 Subject: [PATCH 1/4] Fixed compiler warning --- src/chat_log.c | 7 ++++--- src/chat_log.h | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/chat_log.c b/src/chat_log.c index ea3df7ef..d9f81add 100644 --- a/src/chat_log.c +++ b/src/chat_log.c @@ -44,7 +44,7 @@ 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, +static char * _get_log_filename(const char * const other, const char * const login, GDateTime *dt); 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(); @@ -213,7 +213,8 @@ 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) { GString *log_file = g_string_new(getenv("HOME")); g_string_append(log_file, "/.profanity/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 From 26802ffed33a2504f1dee838b2fb4e181c05b0a9 Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 14 Oct 2012 18:12:42 +0100 Subject: [PATCH 2/4] Do not create directories when looking for logs --- src/chat_log.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/chat_log.c b/src/chat_log.c index d9f81add..5d15d8e4 100644 --- a/src/chat_log.c +++ b/src/chat_log.c @@ -45,7 +45,7 @@ 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(const char * const other, const char * const login, - GDateTime *dt); + GDateTime *dt, gboolean create); void chat_log_init(void) @@ -110,7 +110,7 @@ chat_log_get_previous(const gchar * const login, const gchar * const 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); @@ -214,20 +214,26 @@ gboolean _key_equals(void *key1, void *key2) static char * _get_log_filename(const char * const other, const char * const login, - GDateTime *dt) + 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"); From acb152d4f73c252f7bb627c0829d1e5bc163dd99 Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 14 Oct 2012 18:26:08 +0100 Subject: [PATCH 3/4] Added history option --- src/command.c | 20 ++++++++++++++++++++ src/preferences.c | 13 +++++++++++++ src/preferences.h | 2 ++ src/windows.c | 9 +++++++-- 4 files changed, 42 insertions(+), 2 deletions(-) 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 } } } }; @@ -768,6 +781,13 @@ _cmd_set_chlog(const char * const inp, struct cmd_help_t help) "Chat logging", prefs_set_chlog); } +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) { 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"); From 6ef7b30cd7b3dd709623fe9195d55c360f9b17e8 Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 14 Oct 2012 18:26:54 +0100 Subject: [PATCH 4/4] Updated man page --- docs/profanity.1 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/profanity.1 b/docs/profanity.1 index 56585980..9f53c36a 100644 --- a/docs/profanity.1 +++ b/docs/profanity.1 @@ -72,6 +72,8 @@ notify=true .br chlog=true .br +history=true +.br typing=true .br remind=15