/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
* Copyright (C) 2003-2007 Imendio AB
- * Copyright (C) 2007 Collabora Ltd.
+ * Copyright (C) 2007-2008 Collabora Ltd.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
#include "empathy-log-manager.h"
#include "empathy-contact.h"
#include "empathy-time.h"
-#include "empathy-debug.h"
#include "empathy-utils.h"
-#define GET_PRIV(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
- EMPATHY_TYPE_LOG_MANAGER, EmpathyLogManagerPriv))
-
-#define DEBUG_DOMAIN "LogManager"
+#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
+#include "empathy-debug.h"
#define LOG_DIR_CREATE_MODE (S_IRUSR | S_IWUSR | S_IXUSR)
#define LOG_FILE_CREATE_MODE (S_IRUSR | S_IWUSR)
#define LOG_FOOTER \
"</log>\n"
-struct _EmpathyLogManagerPriv {
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyLogManager)
+typedef struct {
gchar *basedir;
-};
+} EmpathyLogManagerPriv;
-static void empathy_log_manager_class_init (EmpathyLogManagerClass *klass);
-static void empathy_log_manager_init (EmpathyLogManager *manager);
-static void log_manager_finalize (GObject *object);
static const gchar * log_manager_get_basedir (EmpathyLogManager *manager);
static GList * log_manager_get_all_files (EmpathyLogManager *manager,
const gchar *dir);
G_DEFINE_TYPE (EmpathyLogManager, empathy_log_manager, G_TYPE_OBJECT);
-static void
-empathy_log_manager_class_init (EmpathyLogManagerClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->finalize = log_manager_finalize;
-
- g_type_class_add_private (object_class, sizeof (EmpathyLogManagerPriv));
-}
+static EmpathyLogManager * manager_singleton = NULL;
static void
empathy_log_manager_init (EmpathyLogManager *manager)
{
+ EmpathyLogManagerPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (manager,
+ EMPATHY_TYPE_LOG_MANAGER, EmpathyLogManagerPriv);
+
+ manager->priv = priv;
}
static void
g_free (priv->basedir);
}
-EmpathyLogManager *
-empathy_log_manager_new (void)
+static GObject *
+log_manager_constructor (GType type,
+ guint n_props,
+ GObjectConstructParam *props)
{
- static EmpathyLogManager *manager = NULL;
+ GObject *retval;
- if (!manager) {
- manager = g_object_new (EMPATHY_TYPE_LOG_MANAGER, NULL);
- g_object_add_weak_pointer (G_OBJECT (manager), (gpointer) &manager);
+ if (manager_singleton) {
+ retval = g_object_ref (manager_singleton);
} else {
- g_object_ref (manager);
+ retval = G_OBJECT_CLASS (empathy_log_manager_parent_class)->constructor
+ (type, n_props, props);
+
+ manager_singleton = EMPATHY_LOG_MANAGER (retval);
+ g_object_add_weak_pointer (retval, (gpointer) &manager_singleton);
}
- return manager;
+ return retval;
+}
+
+static void
+empathy_log_manager_class_init (EmpathyLogManagerClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = log_manager_finalize;
+ object_class->constructor = log_manager_constructor;
+
+ g_type_class_add_private (object_class, sizeof (EmpathyLogManagerPriv));
+}
+
+EmpathyLogManager *
+empathy_log_manager_dup_singleton (void)
+{
+ return g_object_new (EMPATHY_TYPE_LOG_MANAGER, NULL);
}
void
gchar *timestamp;
gchar *contact_name;
gchar *contact_id;
- EmpathyMessageType msg_type;
+ TpChannelTextMessageType msg_type;
g_return_if_fail (EMPATHY_IS_LOG_MANAGER (manager));
g_return_if_fail (chat_id != NULL);
sender = empathy_message_get_sender (message);
account = empathy_contact_get_account (sender);
body_str = empathy_message_get_body (message);
- msg_type = empathy_message_get_type (message);
+ msg_type = empathy_message_get_tptype (message);
- if (G_STR_EMPTY (body_str)) {
+ if (EMP_STR_EMPTY (body_str)) {
return;
}
filename = log_manager_get_filename (manager, account, chat_id, chatroom);
basedir = g_path_get_dirname (filename);
if (!g_file_test (basedir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)) {
- empathy_debug (DEBUG_DOMAIN, "Creating directory:'%s'", basedir);
+ DEBUG ("Creating directory:'%s'", basedir);
g_mkdir_with_parents (basedir, LOG_DIR_CREATE_MODE);
}
g_free (basedir);
- empathy_debug (DEBUG_DOMAIN, "Adding message: '%s' to file: '%s'",
- body_str, filename);
+ DEBUG ("Adding message: '%s' to file: '%s'", body_str, filename);
if (!g_file_test (filename, G_FILE_TEST_EXISTS)) {
file = g_fopen (filename, "w+");
directory = log_manager_get_dir (manager, account, chat_id, chatroom);
dir = g_dir_open (directory, 0, NULL);
if (!dir) {
- empathy_debug (DEBUG_DOMAIN, "Could not open directory:'%s'", directory);
+ DEBUG ("Could not open directory:'%s'", directory);
g_free (directory);
return NULL;
}
- empathy_debug (DEBUG_DOMAIN, "Collating a list of dates in:'%s'", directory);
+ DEBUG ("Collating a list of dates in:'%s'", directory);
while ((filename = g_dir_read_name (dir)) != NULL) {
if (!g_str_has_suffix (filename, LOG_FILENAME_SUFFIX)) {
g_free (directory);
g_dir_close (dir);
- empathy_debug (DEBUG_DOMAIN, "Parsed %d dates", g_list_length (dates));
+ DEBUG ("Parsed %d dates", g_list_length (dates));
return dates;
}
g_return_val_if_fail (EMPATHY_IS_LOG_MANAGER (manager), NULL);
g_return_val_if_fail (filename != NULL, NULL);
- empathy_debug (DEBUG_DOMAIN, "Attempting to parse filename:'%s'...", filename);
+ DEBUG ("Attempting to parse filename:'%s'...", filename);
if (!g_file_test (filename, G_FILE_TEST_EXISTS)) {
- empathy_debug (DEBUG_DOMAIN, "Filename:'%s' does not exist", filename);
+ DEBUG ("Filename:'%s' does not exist", filename);
return NULL;
}
for (node = log_node->children; node; node = node->next) {
EmpathyMessage *message;
EmpathyContact *sender;
- EmpathyAvatar *avatar = NULL;
gchar *time;
time_t t;
gchar *sender_id;
gchar *is_user_str;
gboolean is_user = FALSE;
gchar *msg_type_str;
- EmpathyMessageType msg_type = EMPATHY_MESSAGE_TYPE_NORMAL;
+ TpChannelTextMessageType msg_type = TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL;
if (strcmp (node->name, "message") != 0) {
continue;
is_user_str = xmlGetProp (node, "isuser");
msg_type_str = xmlGetProp (node, "type");
- if (!G_STR_EMPTY (sender_avatar_token)) {
- avatar = empathy_avatar_new_from_cache (sender_avatar_token);
- }
if (is_user_str) {
is_user = strcmp (is_user_str, "true") == 0;
}
sender = empathy_contact_new_full (account, sender_id, sender_name);
empathy_contact_set_is_user (sender, is_user);
- if (avatar) {
- empathy_contact_set_avatar (sender, avatar);
- empathy_avatar_unref (avatar);
+ if (!EMP_STR_EMPTY (sender_avatar_token)) {
+ empathy_contact_load_avatar_cache (sender,
+ sender_avatar_token);
}
message = empathy_message_new (body);
empathy_message_set_sender (message, sender);
empathy_message_set_timestamp (message, t);
- empathy_message_set_type (message, msg_type);
+ empathy_message_set_tptype (message, msg_type);
messages = g_list_append (messages, message);
xmlFree (msg_type_str);
}
- empathy_debug (DEBUG_DOMAIN, "Parsed %d messages", g_list_length (messages));
+ DEBUG ("Parsed %d messages", g_list_length (messages));
xmlFreeDoc (doc);
xmlFreeParserCtxt (ctxt);
gchar *text_casefold;
g_return_val_if_fail (EMPATHY_IS_LOG_MANAGER (manager), NULL);
- g_return_val_if_fail (!G_STR_EMPTY (text), NULL);
+ g_return_val_if_fail (!EMP_STR_EMPTY (text), NULL);
text_casefold = g_utf8_casefold (text, -1);
files = log_manager_get_all_files (manager, NULL);
- empathy_debug (DEBUG_DOMAIN, "Found %d log files in total",
- g_list_length (files));
+ DEBUG ("Found %d log files in total", g_list_length (files));
for (l = files; l; l = l->next) {
gchar *filename;
if (hit) {
hits = g_list_prepend (hits, hit);
- empathy_debug (DEBUG_DOMAIN,
- "Found text:'%s' in file:'%s' on date:'%s'...",
- text, hit->filename, hit->date);
+ DEBUG ("Found text:'%s' in file:'%s' on date:'%s'",
+ text, hit->filename, hit->date);
}
}