From 2294d908f6927ca98e7e6ee68020f870d1556d59 Mon Sep 17 00:00:00 2001 From: James Booth Date: Mon, 8 Oct 2012 22:34:45 +0100 Subject: Added comments to new window open --- src/windows.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/windows.c b/src/windows.c index 0c249b9a..787d04f6 100644 --- a/src/windows.c +++ b/src/windows.c @@ -367,6 +367,7 @@ win_show_outgoing_msg(const char * const from, const char * const to, int win_index = _find_prof_win_index(to); WINDOW *win = NULL; + // create new window if (win_index == NUM_WINS) { win_index = _new_prof_win(to); win = _wins[win_index].win; @@ -376,6 +377,8 @@ win_show_outgoing_msg(const char * const from, const char * const to, const char const *status = p_contact_status(contact); _show_status_string(win, to, show, status, "--", "offline"); } + + // use existing window } else { win = _wins[win_index].win; } -- cgit 1.4.1-2-gfad0 From 48936c0a95627e6813f2cb9266ed9240ee4f5ea6 Mon Sep 17 00:00:00 2001 From: James Booth Date: Mon, 8 Oct 2012 22:52:54 +0100 Subject: Added datestamped logs --- src/chat_log.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/chat_log.c b/src/chat_log.c index 5ddfcec9..60062f38 100644 --- a/src/chat_log.c +++ b/src/chat_log.c @@ -51,7 +51,6 @@ chat_log_chat(const gchar * const login, gchar *other, if (logpp == NULL) { GString *log_file = g_string_new(getenv("HOME")); - g_string_append(log_file, "/.profanity/log"); create_dir(log_file->str); @@ -59,13 +58,20 @@ chat_log_chat(const gchar * const login, gchar *other, g_string_append_printf(log_file, "/%s", login_dir); create_dir(log_file->str); free(login_dir); - + gchar *other_file = str_replace(other, "@", "_at_"); - g_string_append_printf(log_file, "/%s.log", other_file); + g_string_append_printf(log_file, "/%s", other_file); + + GDateTime *dt = g_date_time_new_now_local(); + gchar *date = g_date_time_format(dt, "_%d_%m_%Y.log"); + g_string_append_printf(log_file, date); + logp = fopen(log_file->str, "a"); + free(other_file); - + g_date_time_unref(dt); g_string_free(log_file, TRUE); + g_hash_table_insert(logs, other, logp); } else { logp = (FILE *) logpp; -- cgit 1.4.1-2-gfad0 From ded57916e9c9456187bed33ab61d16c5db688bc7 Mon Sep 17 00:00:00 2001 From: James Booth Date: Mon, 8 Oct 2012 23:00:39 +0100 Subject: Removed time date from dated logs Use 'me' instead of login --- src/chat_log.c | 6 +++--- src/windows.c | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/chat_log.c b/src/chat_log.c index 60062f38..78689048 100644 --- a/src/chat_log.c +++ b/src/chat_log.c @@ -78,12 +78,12 @@ chat_log_chat(const gchar * const login, gchar *other, } GDateTime *dt = g_date_time_new_now(tz); - gchar *date_fmt = g_date_time_format(dt, "%d/%m/%Y %H:%M:%S"); + gchar *date_fmt = g_date_time_format(dt, "%H:%M:%S"); if (direction == IN) { - fprintf(logp, "%s: %s: %s\n", date_fmt, other, msg); + fprintf(logp, "%s - %s: %s\n", date_fmt, other, msg); } else { - fprintf(logp, "%s: %s: %s\n", date_fmt, login, msg); + fprintf(logp, "%s - me: %s\n", date_fmt, msg); } fflush(logp); diff --git a/src/windows.c b/src/windows.c index 787d04f6..b36bea28 100644 --- a/src/windows.c +++ b/src/windows.c @@ -853,7 +853,7 @@ static void _win_show_time(WINDOW *win) { GDateTime *time = g_date_time_new_now_local(); - gchar *date_fmt = g_date_time_format(time, "%H:%M"); + gchar *date_fmt = g_date_time_format(time, "%H:%M:%S"); wprintw(win, "%s - ", date_fmt); g_date_time_unref(time); g_free(date_fmt); -- cgit 1.4.1-2-gfad0 From f8160fc0949b04ae12a8b4c5c0aadd4cd031310f Mon Sep 17 00:00:00 2001 From: James Booth Date: Mon, 8 Oct 2012 23:36:50 +0100 Subject: Roll log if day changes whilst running --- src/chat_log.c | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 62 insertions(+), 5 deletions(-) diff --git a/src/chat_log.c b/src/chat_log.c index 78689048..7db3c13f 100644 --- a/src/chat_log.c +++ b/src/chat_log.c @@ -32,7 +32,13 @@ static GHashTable *logs; static GTimeZone *tz; +struct dated_chat_log { + gpointer logpp; + GDateTime *date; +}; + static void _close_file(gpointer key, gpointer value, gpointer user_data); +static gboolean _log_roll_needed(struct dated_chat_log *dated_log); void chat_log_init(void) @@ -46,10 +52,11 @@ void chat_log_chat(const gchar * const login, gchar *other, const gchar * const msg, chat_log_direction_t direction) { - gpointer logpp = g_hash_table_lookup(logs, other); + struct dated_chat_log *dated_log = g_hash_table_lookup(logs, other); FILE *logp; - if (logpp == NULL) { + // no log for user + if (dated_log == NULL) { GString *log_file = g_string_new(getenv("HOME")); g_string_append(log_file, "/.profanity/log"); create_dir(log_file->str); @@ -69,12 +76,48 @@ chat_log_chat(const gchar * const login, gchar *other, logp = fopen(log_file->str, "a"); free(other_file); - g_date_time_unref(dt); g_string_free(log_file, TRUE); + + struct dated_chat_log *new_log = malloc(sizeof(struct dated_chat_log)); + new_log->logpp = logp; + new_log->date = dt; + + g_hash_table_insert(logs, other, new_log); + + // log exists but needs rolling + } else if (_log_roll_needed(dated_log)) { + fclose(dated_log->logpp); + + GString *log_file = g_string_new(getenv("HOME")); + g_string_append(log_file, "/.profanity/log"); + 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); + free(login_dir); + + gchar *other_file = str_replace(other, "@", "_at_"); + g_string_append_printf(log_file, "/%s", other_file); + + GDateTime *dt = g_date_time_new_now_local(); + gchar *date = g_date_time_format(dt, "_%d_%m_%Y.log"); + g_string_append_printf(log_file, date); + + logp = fopen(log_file->str, "a"); - g_hash_table_insert(logs, other, logp); + free(other_file); + g_string_free(log_file, TRUE); + + struct dated_chat_log *new_log = malloc(sizeof(struct dated_chat_log)); + new_log->logpp = logp; + new_log->date = dt; + + g_hash_table_replace(logs, other, new_log); + + // log exists for user } else { - logp = (FILE *) logpp; + logp = (FILE *) dated_log->logpp; } GDateTime *dt = g_date_time_new_now(tz); @@ -90,6 +133,20 @@ chat_log_chat(const gchar * const login, gchar *other, g_date_time_unref(dt); } +static gboolean +_log_roll_needed(struct dated_chat_log *dated_log) +{ + gboolean result = FALSE; + GDateTime *now = g_date_time_new_now_local(); + if (g_date_time_get_day_of_year(dated_log->date) != + g_date_time_get_day_of_year(now)) { + result = TRUE; + } + g_date_time_unref(now); + + return result; +} + void chat_log_close(void) { -- cgit 1.4.1-2-gfad0 From 3c5a50a6640d42a4591cf079033c562d8b62316a Mon Sep 17 00:00:00 2001 From: James Booth Date: Tue, 9 Oct 2012 00:10:06 +0100 Subject: Refactored creating new logs --- src/chat_log.c | 120 ++++++++++++++++++++++++++------------------------------- 1 file changed, 54 insertions(+), 66 deletions(-) diff --git a/src/chat_log.c b/src/chat_log.c index 7db3c13f..cc1356f4 100644 --- a/src/chat_log.c +++ b/src/chat_log.c @@ -39,6 +39,7 @@ struct dated_chat_log { static void _close_file(gpointer key, gpointer value, gpointer user_data); static gboolean _log_roll_needed(struct dated_chat_log *dated_log); +static struct dated_chat_log *_create_log(char *other, const char * const login); void chat_log_init(void) @@ -57,69 +58,18 @@ chat_log_chat(const gchar * const login, gchar *other, // no log for user if (dated_log == NULL) { - GString *log_file = g_string_new(getenv("HOME")); - g_string_append(log_file, "/.profanity/log"); - 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); - free(login_dir); - - gchar *other_file = str_replace(other, "@", "_at_"); - g_string_append_printf(log_file, "/%s", other_file); - - GDateTime *dt = g_date_time_new_now_local(); - gchar *date = g_date_time_format(dt, "_%d_%m_%Y.log"); - g_string_append_printf(log_file, date); - - logp = fopen(log_file->str, "a"); - - free(other_file); - g_string_free(log_file, TRUE); - - struct dated_chat_log *new_log = malloc(sizeof(struct dated_chat_log)); - new_log->logpp = logp; - new_log->date = dt; - - g_hash_table_insert(logs, other, new_log); + dated_log = _create_log(other, login); + g_hash_table_insert(logs, other, dated_log); // log exists but needs rolling } else if (_log_roll_needed(dated_log)) { fclose(dated_log->logpp); - - GString *log_file = g_string_new(getenv("HOME")); - g_string_append(log_file, "/.profanity/log"); - 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); - free(login_dir); - - gchar *other_file = str_replace(other, "@", "_at_"); - g_string_append_printf(log_file, "/%s", other_file); - - GDateTime *dt = g_date_time_new_now_local(); - gchar *date = g_date_time_format(dt, "_%d_%m_%Y.log"); - g_string_append_printf(log_file, date); - - logp = fopen(log_file->str, "a"); - - free(other_file); - g_string_free(log_file, TRUE); - - struct dated_chat_log *new_log = malloc(sizeof(struct dated_chat_log)); - new_log->logpp = logp; - new_log->date = dt; - - g_hash_table_replace(logs, other, new_log); - - // log exists for user - } else { - logp = (FILE *) dated_log->logpp; + dated_log = _create_log(other, login); + g_hash_table_replace(logs, other, dated_log); } + logp = (FILE *) dated_log->logpp; + GDateTime *dt = g_date_time_new_now(tz); gchar *date_fmt = g_date_time_format(dt, "%H:%M:%S"); @@ -133,13 +83,58 @@ chat_log_chat(const gchar * const login, gchar *other, g_date_time_unref(dt); } +void +chat_log_close(void) +{ + g_hash_table_foreach(logs, (GHFunc) _close_file, NULL); + g_time_zone_unref(tz); +} + +static struct dated_chat_log * +_create_log(char *other, const char * const login) +{ + GString *log_file = g_string_new(getenv("HOME")); + g_string_append(log_file, "/.profanity/log"); + 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); + free(login_dir); + + gchar *other_file = str_replace(other, "@", "_at_"); + g_string_append_printf(log_file, "/%s", other_file); + + GDateTime *dt = g_date_time_new_now_local(); + //gchar *date = g_date_time_format(dt, "_%d_%m_%Y.log"); + gchar *date = g_date_time_format(dt, "_%d_%m_%Y_%H_%M.log"); + g_string_append_printf(log_file, date); + + gpointer logp = fopen(log_file->str, "a"); + + free(other_file); + g_string_free(log_file, TRUE); + + struct dated_chat_log *new_log = malloc(sizeof(struct dated_chat_log)); + new_log->logpp = logp; + new_log->date = dt; + + return new_log; +} + + static gboolean _log_roll_needed(struct dated_chat_log *dated_log) { gboolean result = FALSE; GDateTime *now = g_date_time_new_now_local(); - if (g_date_time_get_day_of_year(dated_log->date) != - g_date_time_get_day_of_year(now)) { + + + + if (g_date_time_get_minute(dated_log->date) != + g_date_time_get_minute(now)) { +// if (g_date_time_get_day_of_year(dated_log->date) != +// g_date_time_get_day_of_year(now)) { result = TRUE; } g_date_time_unref(now); @@ -147,13 +142,6 @@ _log_roll_needed(struct dated_chat_log *dated_log) return result; } -void -chat_log_close(void) -{ - g_hash_table_foreach(logs, (GHFunc) _close_file, NULL); - g_time_zone_unref(tz); -} - static void _close_file(gpointer key, gpointer value, gpointer user_data) { -- cgit 1.4.1-2-gfad0 From 18c6bb9219507b726416c59048a1b866ca048ca3 Mon Sep 17 00:00:00 2001 From: James Booth Date: Tue, 9 Oct 2012 00:46:58 +0100 Subject: Recipient logs now in own subdirectories Filename is based on date, in a sortable order --- src/chat_log.c | 76 +++++++++++++++++++++++++++++----------------------------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/src/chat_log.c b/src/chat_log.c index cc1356f4..3a139d31 100644 --- a/src/chat_log.c +++ b/src/chat_log.c @@ -22,6 +22,7 @@ #include #include +#include #include "glib.h" @@ -30,64 +31,60 @@ #include "log.h" static GHashTable *logs; -static GTimeZone *tz; struct dated_chat_log { - gpointer logpp; + FILE *logp; GDateTime *date; }; -static void _close_file(gpointer key, gpointer value, gpointer user_data); 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); void chat_log_init(void) { log_info("Initialising chat logs"); - tz = g_time_zone_new_local(); - logs = g_hash_table_new(NULL, (GEqualFunc) g_strcmp0); + logs = g_hash_table_new_full(NULL, (GEqualFunc) g_strcmp0, g_free, + (GDestroyNotify)_free_chat_log); } void chat_log_chat(const gchar * const login, gchar *other, const gchar * const msg, chat_log_direction_t direction) { - struct dated_chat_log *dated_log = g_hash_table_lookup(logs, other); - FILE *logp; + gchar *other_copy = strdup(other); + struct dated_chat_log *dated_log = g_hash_table_lookup(logs, other_copy); // no log for user if (dated_log == NULL) { - dated_log = _create_log(other, login); - g_hash_table_insert(logs, other, dated_log); + dated_log = _create_log(other_copy, login); + g_hash_table_insert(logs, other_copy, dated_log); // log exists but needs rolling } else if (_log_roll_needed(dated_log)) { - fclose(dated_log->logpp); - dated_log = _create_log(other, login); - g_hash_table_replace(logs, other, dated_log); + dated_log = _create_log(other_copy, login); + g_hash_table_replace(logs, other_copy, dated_log); } - logp = (FILE *) dated_log->logpp; - - GDateTime *dt = g_date_time_new_now(tz); + GDateTime *dt = g_date_time_new_now_local(); gchar *date_fmt = g_date_time_format(dt, "%H:%M:%S"); if (direction == IN) { - fprintf(logp, "%s - %s: %s\n", date_fmt, other, msg); + fprintf(dated_log->logp, "%s - %s: %s\n", date_fmt, other_copy, msg); } else { - fprintf(logp, "%s - me: %s\n", date_fmt, msg); + fprintf(dated_log->logp, "%s - me: %s\n", date_fmt, msg); } - fflush(logp); - + fflush(dated_log->logp); + + g_free(date_fmt); g_date_time_unref(dt); } void chat_log_close(void) { - g_hash_table_foreach(logs, (GHFunc) _close_file, NULL); - g_time_zone_unref(tz); + g_hash_table_remove_all(logs); } static struct dated_chat_log * @@ -104,21 +101,19 @@ _create_log(char *other, const char * const login) gchar *other_file = str_replace(other, "@", "_at_"); g_string_append_printf(log_file, "/%s", other_file); + create_dir(log_file->str); + free(other_file); GDateTime *dt = g_date_time_new_now_local(); - //gchar *date = g_date_time_format(dt, "_%d_%m_%Y.log"); - gchar *date = g_date_time_format(dt, "_%d_%m_%Y_%H_%M.log"); + gchar *date = g_date_time_format(dt, "/%Y_%m_%d.log"); g_string_append_printf(log_file, date); - gpointer logp = fopen(log_file->str, "a"); - - free(other_file); - g_string_free(log_file, TRUE); - struct dated_chat_log *new_log = malloc(sizeof(struct dated_chat_log)); - new_log->logpp = logp; + new_log->logp = fopen(log_file->str, "a"); new_log->date = dt; + g_string_free(log_file, TRUE); + return new_log; } @@ -128,13 +123,8 @@ _log_roll_needed(struct dated_chat_log *dated_log) { gboolean result = FALSE; GDateTime *now = g_date_time_new_now_local(); - - - - if (g_date_time_get_minute(dated_log->date) != - g_date_time_get_minute(now)) { -// if (g_date_time_get_day_of_year(dated_log->date) != -// g_date_time_get_day_of_year(now)) { + if (g_date_time_get_day_of_year(dated_log->date) != + g_date_time_get_day_of_year(now)) { result = TRUE; } g_date_time_unref(now); @@ -143,7 +133,17 @@ _log_roll_needed(struct dated_chat_log *dated_log) } static void -_close_file(gpointer key, gpointer value, gpointer user_data) +_free_chat_log(struct dated_chat_log *dated_log) { - fclose(value); + if (dated_log != NULL) { + if (dated_log->logp != NULL) { + fclose(dated_log->logp); + dated_log->logp = NULL; + } + if (dated_log->date != NULL) { + g_date_time_unref(dated_log->date); + dated_log->date = NULL; + } + } + dated_log = NULL; } -- cgit 1.4.1-2-gfad0