]> git.0d.be Git - empathy.git/blobdiff - libempathy/empathy-log-manager.c
Fix type punned pointers warnings
[empathy.git] / libempathy / empathy-log-manager.c
index 096761841457a30366b4aec77d97aff67f65544f..2dccbc9fdd6ad578166b159f85dfe3a7a4128944 100644 (file)
@@ -1,7 +1,7 @@
 /* -*- 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);
@@ -87,19 +82,15 @@ static void                 log_manager_search_hit_free            (EmpathyLogSe
 
 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
@@ -112,19 +103,41 @@ log_manager_finalize (GObject *object)
        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
@@ -146,7 +159,7 @@ empathy_log_manager_add_message (EmpathyLogManager *manager,
        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);
@@ -155,23 +168,22 @@ empathy_log_manager_add_message (EmpathyLogManager *manager,
        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+");
@@ -255,12 +267,12 @@ empathy_log_manager_get_dates (EmpathyLogManager *manager,
        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)) {
@@ -283,7 +295,7 @@ empathy_log_manager_get_dates (EmpathyLogManager *manager,
        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;
 }
@@ -303,10 +315,10 @@ empathy_log_manager_get_messages_for_file (EmpathyLogManager *manager,
        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;
        }
 
@@ -338,7 +350,6 @@ empathy_log_manager_get_messages_for_file (EmpathyLogManager *manager,
        for (node = log_node->children; node; node = node->next) {
                EmpathyMessage     *message;
                EmpathyContact     *sender;
-               EmpathyAvatar      *avatar = NULL;
                gchar              *time;
                time_t              t;
                gchar              *sender_id;
@@ -348,7 +359,7 @@ empathy_log_manager_get_messages_for_file (EmpathyLogManager *manager,
                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;
@@ -362,9 +373,6 @@ empathy_log_manager_get_messages_for_file (EmpathyLogManager *manager,
                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;
                }
@@ -376,15 +384,15 @@ empathy_log_manager_get_messages_for_file (EmpathyLogManager *manager,
 
                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);
 
@@ -397,7 +405,7 @@ empathy_log_manager_get_messages_for_file (EmpathyLogManager *manager,
                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);
@@ -481,13 +489,12 @@ empathy_log_manager_search_new (EmpathyLogManager *manager,
        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;
@@ -516,9 +523,8 @@ empathy_log_manager_search_new (EmpathyLogManager *manager,
 
                        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);
                        }
                }