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,20 +83,6 @@ 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) { @@ -154,6 +90,58 @@ chat_log_close(void) 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_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); + + return result; +} + static void _close_file(gpointer key, gpointer value, gpointer user_data) {