aboutsummaryrefslogtreecommitdiffstats
path: root/libempathy/empathy-log-source-empathy.c
diff options
context:
space:
mode:
Diffstat (limited to 'libempathy/empathy-log-source-empathy.c')
-rw-r--r--libempathy/empathy-log-source-empathy.c171
1 files changed, 104 insertions, 67 deletions
diff --git a/libempathy/empathy-log-source-empathy.c b/libempathy/empathy-log-source-empathy.c
index d6804683c..25270ae74 100644
--- a/libempathy/empathy-log-source-empathy.c
+++ b/libempathy/empathy-log-source-empathy.c
@@ -19,6 +19,7 @@
* Boston, MA 02111-1307, USA.
*
* Authors: Xavier Claessens <xclaesse@gmail.com>
+ * Jonny Lamb <jonny.lamb@collabora.co.uk>
*/
#include <config.h>
@@ -28,8 +29,9 @@
#include <stdlib.h>
#include <glib/gstdio.h>
-#include "empathy-log-manager.h"
+#include "empathy-log-source.h"
#include "empathy-log-source-empathy.h"
+#include "empathy-log-manager.h"
#include "empathy-contact.h"
#include "empathy-time.h"
#include "empathy-utils.h"
@@ -51,35 +53,71 @@
#define LOG_FOOTER \
"</log>\n"
-static gchar *
-log_source_empathy_get_basedir (void)
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyLogSourceEmpathy)
+typedef struct
+{
+ gchar *basedir;
+} EmpathyLogSourceEmpathyPriv;
+
+static void log_source_iface_init (gpointer g_iface,gpointer iface_data);
+
+G_DEFINE_TYPE_WITH_CODE (EmpathyLogSourceEmpathy, empathy_log_source_empathy,
+ G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (EMPATHY_TYPE_LOG_SOURCE,
+ log_source_iface_init));
+
+static void
+log_source_empathy_finalize (GObject *object)
+{
+ EmpathyLogSourceEmpathy *self = EMPATHY_LOG_SOURCE_EMPATHY (object);
+ EmpathyLogSourceEmpathyPriv *priv = GET_PRIV (self);
+
+ g_free (priv->basedir);
+}
+
+static void
+empathy_log_source_empathy_class_init (EmpathyLogSourceEmpathyClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = log_source_empathy_finalize;
+
+ g_type_class_add_private (object_class, sizeof (EmpathyLogSourceEmpathyPriv));
+}
+
+static void
+empathy_log_source_empathy_init (EmpathyLogSourceEmpathy *self)
{
- return g_build_path (G_DIR_SEPARATOR_S, g_get_home_dir (),
+ EmpathyLogSourceEmpathyPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
+ EMPATHY_TYPE_LOG_SOURCE_EMPATHY, EmpathyLogSourceEmpathyPriv);
+
+ self->priv = priv;
+
+ priv->basedir = g_build_path (G_DIR_SEPARATOR_S, g_get_home_dir (),
".gnome2", PACKAGE_NAME, "logs", NULL);
}
static gchar *
-log_source_empathy_get_dir (EmpathyLogManager *manager,
+log_source_empathy_get_dir (EmpathyLogSource *self,
McAccount *account,
const gchar *chat_id,
gboolean chatroom)
{
const gchar *account_id;
- gchar *basedir, *log_dir;
+ gchar *basedir;
+ EmpathyLogSourceEmpathyPriv *priv;
- account_id = mc_account_get_unique_name (account);
+ priv = GET_PRIV (self);
- log_dir = log_source_empathy_get_basedir ();
+ account_id = mc_account_get_unique_name (account);
if (chatroom)
- basedir = g_build_path (G_DIR_SEPARATOR_S, log_dir, account_id,
+ basedir = g_build_path (G_DIR_SEPARATOR_S, priv->basedir, account_id,
LOG_DIR_CHATROOMS, chat_id, NULL);
else
- basedir = g_build_path (G_DIR_SEPARATOR_S, log_dir,
+ basedir = g_build_path (G_DIR_SEPARATOR_S, priv->basedir,
account_id, chat_id, NULL);
- g_free (log_dir);
-
return basedir;
}
@@ -111,7 +149,7 @@ log_source_empathy_get_timestamp_from_message (EmpathyMessage *message)
}
static gchar *
-log_source_empathy_get_filename (EmpathyLogManager *manager,
+log_source_empathy_get_filename (EmpathyLogSource *self,
McAccount *account,
const gchar *chat_id,
gboolean chatroom)
@@ -120,7 +158,7 @@ log_source_empathy_get_filename (EmpathyLogManager *manager,
gchar *timestamp;
gchar *filename;
- basedir = log_source_empathy_get_dir (manager, account, chat_id, chatroom);
+ basedir = log_source_empathy_get_dir (self, account, chat_id, chatroom);
timestamp = log_source_empathy_get_timestamp_filename ();
filename = g_build_filename (basedir, timestamp, NULL);
@@ -131,7 +169,7 @@ log_source_empathy_get_filename (EmpathyLogManager *manager,
}
static void
-log_source_empathy_add_message (EmpathyLogManager *manager,
+log_source_empathy_add_message (EmpathyLogSource *self,
const gchar *chat_id,
gboolean chatroom,
EmpathyMessage *message)
@@ -151,7 +189,7 @@ log_source_empathy_add_message (EmpathyLogManager *manager,
gchar *contact_id;
TpChannelTextMessageType msg_type;
- g_return_if_fail (EMPATHY_IS_LOG_MANAGER (manager));
+ g_return_if_fail (EMPATHY_IS_LOG_SOURCE (self));
g_return_if_fail (chat_id != NULL);
g_return_if_fail (EMPATHY_IS_MESSAGE (message));
@@ -163,7 +201,7 @@ log_source_empathy_add_message (EmpathyLogManager *manager,
if (G_STR_EMPTY (body_str))
return;
- filename = log_source_empathy_get_filename (manager, account, chat_id, chatroom);
+ filename = log_source_empathy_get_filename (self, account, chat_id, chatroom);
basedir = g_path_get_dirname (filename);
if (!g_file_test (basedir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR))
{
@@ -219,7 +257,7 @@ log_source_empathy_add_message (EmpathyLogManager *manager,
}
static gboolean
-log_source_empathy_exists (EmpathyLogManager *manager,
+log_source_empathy_exists (EmpathyLogSource *self,
McAccount *account,
const gchar *chat_id,
gboolean chatroom)
@@ -227,7 +265,7 @@ log_source_empathy_exists (EmpathyLogManager *manager,
gchar *dir;
gboolean exists;
- dir = log_source_empathy_get_dir (manager, account, chat_id, chatroom);
+ dir = log_source_empathy_get_dir (self, account, chat_id, chatroom);
exists = g_file_test (dir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR);
g_free (dir);
@@ -235,7 +273,7 @@ log_source_empathy_exists (EmpathyLogManager *manager,
}
static GList *
-log_source_empathy_get_dates (EmpathyLogManager *manager,
+log_source_empathy_get_dates (EmpathyLogSource *self,
McAccount *account,
const gchar *chat_id,
gboolean chatroom)
@@ -247,11 +285,11 @@ log_source_empathy_get_dates (EmpathyLogManager *manager,
const gchar *filename;
const gchar *p;
- g_return_val_if_fail (EMPATHY_IS_LOG_MANAGER (manager), NULL);
+ g_return_val_if_fail (EMPATHY_IS_LOG_SOURCE (self), NULL);
g_return_val_if_fail (MC_IS_ACCOUNT (account), NULL);
g_return_val_if_fail (chat_id != NULL, NULL);
- directory = log_source_empathy_get_dir (manager, account, chat_id, chatroom);
+ directory = log_source_empathy_get_dir (self, account, chat_id, chatroom);
dir = g_dir_open (directory, 0, NULL);
if (!dir)
{
@@ -288,7 +326,7 @@ log_source_empathy_get_dates (EmpathyLogManager *manager,
}
static gchar *
-log_source_empathy_get_filename_for_date (EmpathyLogManager *manager,
+log_source_empathy_get_filename_for_date (EmpathyLogSource *self,
McAccount *account,
const gchar *chat_id,
gboolean chatroom,
@@ -298,7 +336,7 @@ log_source_empathy_get_filename_for_date (EmpathyLogManager *manager,
gchar *timestamp;
gchar *filename;
- basedir = log_source_empathy_get_dir (manager, account, chat_id, chatroom);
+ basedir = log_source_empathy_get_dir (self, account, chat_id, chatroom);
timestamp = g_strconcat (date, LOG_FILENAME_SUFFIX, NULL);
filename = g_build_filename (basedir, timestamp, NULL);
@@ -309,7 +347,7 @@ log_source_empathy_get_filename_for_date (EmpathyLogManager *manager,
}
static EmpathyLogSearchHit *
-log_source_empathy_search_hit_new (EmpathyLogManager *manager,
+log_source_empathy_search_hit_new (EmpathyLogSource *self,
const gchar *filename)
{
EmpathyLogSearchHit *hit;
@@ -345,7 +383,7 @@ log_source_empathy_search_hit_new (EmpathyLogManager *manager,
}
static GList *
-log_source_empathy_get_messages_for_file (EmpathyLogManager *manager,
+log_source_empathy_get_messages_for_file (EmpathyLogSource *self,
const gchar *filename)
{
GList *messages = NULL;
@@ -356,7 +394,7 @@ log_source_empathy_get_messages_for_file (EmpathyLogManager *manager,
EmpathyLogSearchHit *hit;
McAccount *account;
- g_return_val_if_fail (EMPATHY_IS_LOG_MANAGER (manager), NULL);
+ g_return_val_if_fail (EMPATHY_IS_LOG_SOURCE (self), NULL);
g_return_val_if_fail (filename != NULL, NULL);
DEBUG ("Attempting to parse filename:'%s'...", filename);
@@ -368,7 +406,7 @@ log_source_empathy_get_messages_for_file (EmpathyLogManager *manager,
}
/* Get the account from the filename */
- hit = log_source_empathy_search_hit_new (manager, filename);
+ hit = log_source_empathy_search_hit_new (self, filename);
account = g_object_ref (hit->account);
empathy_log_manager_search_hit_free (hit);
@@ -459,22 +497,22 @@ log_source_empathy_get_messages_for_file (EmpathyLogManager *manager,
}
static GList *
-log_source_empathy_get_all_files (EmpathyLogManager *manager,
+log_source_empathy_get_all_files (EmpathyLogSource *self,
const gchar *dir)
{
GDir *gdir;
GList *files = NULL;
const gchar *name;
- gchar *basedir;
+ const gchar *basedir;
+ EmpathyLogSourceEmpathyPriv *priv;
- basedir = dir ? g_strdup (dir) : log_source_empathy_get_basedir ();
+ priv = GET_PRIV (self);
+
+ basedir = dir ? dir : priv->basedir;
gdir = g_dir_open (basedir, 0, NULL);
if (!gdir)
- {
- g_free (basedir);
- return NULL;
- }
+ return NULL;
while ((name = g_dir_read_name (gdir)) != NULL)
{
@@ -490,32 +528,32 @@ log_source_empathy_get_all_files (EmpathyLogManager *manager,
if (g_file_test (filename, G_FILE_TEST_IS_DIR))
{
/* Recursively get all log files */
- files = g_list_concat (files, log_source_empathy_get_all_files (manager, filename));
+ files = g_list_concat (files,
+ log_source_empathy_get_all_files (self, filename));
}
g_free (filename);
}
g_dir_close (gdir);
- g_free (basedir);
return files;
}
static GList *
-log_source_empathy_search_new (EmpathyLogManager *manager,
+log_source_empathy_search_new (EmpathyLogSource *self,
const gchar *text)
{
GList *files, *l;
GList *hits = NULL;
gchar *text_casefold;
- g_return_val_if_fail (EMPATHY_IS_LOG_MANAGER (manager), NULL);
+ g_return_val_if_fail (EMPATHY_IS_LOG_SOURCE (self), NULL);
g_return_val_if_fail (!G_STR_EMPTY (text), NULL);
text_casefold = g_utf8_casefold (text, -1);
- files = log_source_empathy_get_all_files (manager, NULL);
+ files = log_source_empathy_get_all_files (self, NULL);
DEBUG ("Found %d log files in total", g_list_length (files));
for (l = files; l; l = l->next)
@@ -542,7 +580,7 @@ log_source_empathy_search_new (EmpathyLogManager *manager,
{
EmpathyLogSearchHit *hit;
- hit = log_source_empathy_search_hit_new (manager, filename);
+ hit = log_source_empathy_search_hit_new (self, filename);
if (hit)
{
@@ -563,7 +601,7 @@ log_source_empathy_search_new (EmpathyLogManager *manager,
}
static GList *
-log_source_empathy_get_chats_for_dir (EmpathyLogManager *manager,
+log_source_empathy_get_chats_for_dir (EmpathyLogSource *self,
const gchar *dir,
gboolean is_chatroom)
{
@@ -583,7 +621,8 @@ log_source_empathy_get_chats_for_dir (EmpathyLogManager *manager,
filename = g_build_filename (dir, name, NULL);
if (strcmp (name, LOG_DIR_CHATROOMS) == 0)
{
- hits = g_list_concat (hits, log_source_empathy_get_chats_for_dir (manager, dir, TRUE));
+ hits = g_list_concat (hits, log_source_empathy_get_chats_for_dir (
+ self, dir, TRUE));
g_free (filename);
continue;
}
@@ -602,7 +641,7 @@ log_source_empathy_get_chats_for_dir (EmpathyLogManager *manager,
static GList *
-log_source_empathy_get_messages_for_date (EmpathyLogManager *manager,
+log_source_empathy_get_messages_for_date (EmpathyLogSource *self,
McAccount *account,
const gchar *chat_id,
gboolean chatroom,
@@ -611,50 +650,48 @@ log_source_empathy_get_messages_for_date (EmpathyLogManager *manager,
gchar *filename;
GList *messages;
- g_return_val_if_fail (EMPATHY_IS_LOG_MANAGER (manager), NULL);
+ g_return_val_if_fail (EMPATHY_IS_LOG_SOURCE (self), NULL);
g_return_val_if_fail (MC_IS_ACCOUNT (account), NULL);
g_return_val_if_fail (chat_id != NULL, NULL);
- filename = log_source_empathy_get_filename_for_date (manager, account,
+ filename = log_source_empathy_get_filename_for_date (self, account,
chat_id, chatroom, date);
- messages = log_source_empathy_get_messages_for_file (manager, filename);
+ messages = log_source_empathy_get_messages_for_file (self, filename);
g_free (filename);
return messages;
}
static GList *
-log_source_empathy_get_chats (EmpathyLogManager *manager,
+log_source_empathy_get_chats (EmpathyLogSource *self,
McAccount *account)
{
- gchar *basedir;
gchar *dir;
GList *hits;
+ EmpathyLogSourceEmpathyPriv *priv;
- basedir = log_source_empathy_get_basedir ();
- dir = g_build_filename (basedir, mc_account_get_unique_name (account),
- NULL);
- g_free (basedir);
+ priv = GET_PRIV (self);
+
+ dir = g_build_filename (priv->basedir,
+ mc_account_get_unique_name (account), NULL);
- hits = log_source_empathy_get_chats_for_dir (manager, dir, FALSE);
+ hits = log_source_empathy_get_chats_for_dir (self, dir, FALSE);
g_free (dir);
return hits;
}
-EmpathyLogSource *
-empathy_log_source_empathy_get_source (void)
+static void
+log_source_iface_init (gpointer g_iface,
+ gpointer iface_data)
{
- EmpathyLogSource *source;
- source = g_slice_new0 (EmpathyLogSource);
-
- source->exists = log_source_empathy_exists;
- source->add_message = log_source_empathy_add_message;
- source->get_dates = log_source_empathy_get_dates;
- source->get_messages_for_date = log_source_empathy_get_messages_for_date;
- source->get_chats = log_source_empathy_get_chats;
- source->search_new = log_source_empathy_search_new;
-
- return source;
+ EmpathyLogSourceInterface *iface = (EmpathyLogSourceInterface *) g_iface;
+
+ iface->exists = log_source_empathy_exists;
+ iface->add_message = log_source_empathy_add_message;
+ iface->get_dates = log_source_empathy_get_dates;
+ iface->get_messages_for_date = log_source_empathy_get_messages_for_date;
+ iface->get_chats = log_source_empathy_get_chats;
+ iface->search_new = log_source_empathy_search_new;
}