1
0
mirror of https://github.com/profanity-im/profanity.git synced 2024-12-04 14:46:46 -05:00

Basic chat log per user

This commit is contained in:
James Booth 2012-07-22 22:34:09 +01:00
parent 310a1ff42d
commit cb27c4ab37
3 changed files with 44 additions and 15 deletions

View File

@ -28,34 +28,55 @@
#include "chat_log.h" #include "chat_log.h"
#include "common.h" #include "common.h"
static FILE *chatlog; static GHashTable *logs;
static GTimeZone *tz; static GTimeZone *tz;
static void _close_file(gpointer key, gpointer value, gpointer user_data);
void chat_log_init(void) void chat_log_init(void)
{ {
tz = g_time_zone_new_local();
logs = g_hash_table_new(NULL, (GEqualFunc) g_strcmp0);
}
void chat_log_chat(const char * const login, char *other,
const char * const msg, chat_log_direction_t direction)
{
gpointer *logpp = g_hash_table_lookup(logs, other);
FILE *logp;
if (logpp == NULL) {
GString *log_file = g_string_new(getenv("HOME")); GString *log_file = g_string_new(getenv("HOME"));
g_string_append(log_file, "/.profanity/log"); g_string_append(log_file, "/.profanity/log");
create_dir(log_file->str); create_dir(log_file->str);
g_string_append(log_file, "/chat.log"); g_string_append_printf(log_file, "/%s.log", other);
chatlog = fopen(log_file->str, "a"); logp = fopen(log_file->str, "a");
g_string_free(log_file, TRUE); g_string_free(log_file, TRUE);
g_hash_table_insert(logs, other, &logp);
tz = g_time_zone_new_local(); } else {
logp = *logpp;
} }
void chat_log_chat(const char * const user, const char * const msg)
{
GDateTime *dt = g_date_time_new_now(tz); 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, "%d/%m/%Y %H:%M:%S");
fprintf(chatlog, "%s: %s: %s\n", date_fmt, user, msg); if (direction == IN) {
fflush(chatlog); fprintf(logp, "%s: %s: %s\n", date_fmt, other, msg);
} else {
fprintf(logp, "%s: %s: %s\n", date_fmt, login, msg);
}
fflush(logp);
g_date_time_unref(dt); g_date_time_unref(dt);
} }
void chat_log_close(void) void chat_log_close(void)
{ {
fclose(chatlog); g_hash_table_foreach(logs, (GHFunc) _close_file, NULL);
g_time_zone_unref(tz); g_time_zone_unref(tz);
} }
static void _close_file(gpointer key, gpointer value, gpointer user_data)
{
fclose(value);
}

View File

@ -25,8 +25,14 @@
#include <stdio.h> #include <stdio.h>
typedef enum {
IN,
OUT
} chat_log_direction_t;
void chat_log_init(void); void chat_log_init(void);
void chat_log_chat(const char * const user, const char * const msg); void chat_log_chat(const char * const login, char *other,
const char * const msg, chat_log_direction_t direction);
void chat_log_close(void); void chat_log_close(void);
#endif #endif

View File

@ -169,7 +169,7 @@ void jabber_send(const char * const msg, const char * const recipient)
const char *jid = xmpp_conn_get_jid(jabber_conn.conn); const char *jid = xmpp_conn_get_jid(jabber_conn.conn);
chat_log_chat(jid, msg); chat_log_chat(jid, (char *)recipient, msg, OUT);
} }
void jabber_roster_request(void) void jabber_roster_request(void)
@ -258,8 +258,10 @@ static int _jabber_message_handler(xmpp_conn_t * const conn,
char from_cpy[strlen(from) + 1]; char from_cpy[strlen(from) + 1];
strcpy(from_cpy, from); strcpy(from_cpy, from);
char *short_from = strtok(from_cpy, "/"); char *short_from = strtok(from_cpy, "/");
const char *jid = xmpp_conn_get_jid(jabber_conn.conn);
chat_log_chat(short_from, message);
chat_log_chat(jid, short_from, message, IN);
return 1; return 1;
} }