diff options
-rw-r--r-- | libempathy/empathy-log-manager.c | 454 | ||||
-rw-r--r-- | libempathy/empathy-log-manager.h | 106 | ||||
-rw-r--r-- | libempathy/empathy-log-manager.xsl | 148 | ||||
-rw-r--r-- | libempathy/empathy-log-store-empathy.c | 822 | ||||
-rw-r--r-- | libempathy/empathy-log-store-empathy.h | 71 | ||||
-rw-r--r-- | libempathy/empathy-log-store.c | 172 | ||||
-rw-r--r-- | libempathy/empathy-log-store.h | 104 |
7 files changed, 0 insertions, 1877 deletions
diff --git a/libempathy/empathy-log-manager.c b/libempathy/empathy-log-manager.c deleted file mode 100644 index 8478762d3..000000000 --- a/libempathy/empathy-log-manager.c +++ /dev/null @@ -1,454 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Copyright (C) 2003-2007 Imendio AB - * Copyright (C) 2007-2010 Collabora Ltd. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * - * Authors: Xavier Claessens <xclaesse@gmail.com> - */ - -#include <config.h> - -#include <string.h> -#include <stdio.h> -#include <stdlib.h> -#include <glib/gstdio.h> - -#include <telepathy-glib/util.h> -#include <telepathy-glib/interfaces.h> - -#include "empathy-log-manager.h" -#include "empathy-log-store-empathy.h" -#include "empathy-log-store.h" -#include "empathy-tp-chat.h" -#include "empathy-utils.h" - -#define DEBUG_FLAG EMPATHY_DEBUG_OTHER -#include "empathy-debug.h" - -#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyLogManager) -typedef struct -{ - GList *stores; -} EmpathyLogManagerPriv; - -G_DEFINE_TYPE (EmpathyLogManager, empathy_log_manager, G_TYPE_OBJECT); - -static EmpathyLogManager * manager_singleton = NULL; - -static void -log_manager_finalize (GObject *object) -{ - EmpathyLogManagerPriv *priv; - - priv = GET_PRIV (object); - - g_list_foreach (priv->stores, (GFunc) g_object_unref, NULL); - g_list_free (priv->stores); -} - -static GObject * -log_manager_constructor (GType type, - guint n_props, - GObjectConstructParam *props) -{ - GObject *retval; - EmpathyLogManagerPriv *priv; - - if (manager_singleton) - { - retval = g_object_ref (manager_singleton); - } - else - { - 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); - - priv = GET_PRIV (manager_singleton); - - priv->stores = g_list_append (priv->stores, - g_object_new (EMPATHY_TYPE_LOG_STORE_EMPATHY, NULL)); - } - - return retval; -} - -static void -empathy_log_manager_class_init (EmpathyLogManagerClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - object_class->constructor = log_manager_constructor; - object_class->finalize = log_manager_finalize; - - g_type_class_add_private (object_class, sizeof (EmpathyLogManagerPriv)); -} - -static void -empathy_log_manager_init (EmpathyLogManager *manager) -{ - EmpathyLogManagerPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (manager, - EMPATHY_TYPE_LOG_MANAGER, EmpathyLogManagerPriv); - - manager->priv = priv; -} - -EmpathyLogManager * -empathy_log_manager_dup_singleton (void) -{ - return g_object_new (EMPATHY_TYPE_LOG_MANAGER, NULL); -} - -gboolean -empathy_log_manager_add_message (EmpathyLogManager *manager, - const gchar *chat_id, - gboolean chatroom, - EmpathyMessage *message, - GError **error) -{ - EmpathyLogManagerPriv *priv; - GList *l; - gboolean out = FALSE; - gboolean found = FALSE; - - /* TODO: When multiple log stores appear with add_message implementations - * make this customisable. */ - const gchar *add_store = "Empathy"; - - g_return_val_if_fail (EMPATHY_IS_LOG_MANAGER (manager), FALSE); - g_return_val_if_fail (chat_id != NULL, FALSE); - g_return_val_if_fail (EMPATHY_IS_MESSAGE (message), FALSE); - - priv = GET_PRIV (manager); - - for (l = priv->stores; l; l = g_list_next (l)) - { - if (!tp_strdiff (empathy_log_store_get_name ( - EMPATHY_LOG_STORE (l->data)), add_store)) - { - out = empathy_log_store_add_message (EMPATHY_LOG_STORE (l->data), - chat_id, chatroom, message, error); - found = TRUE; - break; - } - } - - if (!found) - DEBUG ("Failed to find chosen log store to write to."); - - return out; -} - -gboolean -empathy_log_manager_exists (EmpathyLogManager *manager, - TpAccount *account, - const gchar *chat_id, - gboolean chatroom) -{ - GList *l; - EmpathyLogManagerPriv *priv; - - g_return_val_if_fail (EMPATHY_IS_LOG_MANAGER (manager), FALSE); - g_return_val_if_fail (chat_id != NULL, FALSE); - - priv = GET_PRIV (manager); - - for (l = priv->stores; l; l = g_list_next (l)) - { - if (empathy_log_store_exists (EMPATHY_LOG_STORE (l->data), - account, chat_id, chatroom)) - return TRUE; - } - - return FALSE; -} - -GList * -empathy_log_manager_get_dates (EmpathyLogManager *manager, - TpAccount *account, - const gchar *chat_id, - gboolean chatroom) -{ - GList *l, *out = NULL; - EmpathyLogManagerPriv *priv; - - g_return_val_if_fail (EMPATHY_IS_LOG_MANAGER (manager), NULL); - g_return_val_if_fail (chat_id != NULL, NULL); - - priv = GET_PRIV (manager); - - for (l = priv->stores; l; l = g_list_next (l)) - { - EmpathyLogStore *store = EMPATHY_LOG_STORE (l->data); - GList *new; - - /* Insert dates of each store in the out list. Keep the out list sorted - * and avoid to insert dups. */ - new = empathy_log_store_get_dates (store, account, chat_id, chatroom); - while (new) - { - if (g_list_find_custom (out, new->data, (GCompareFunc) strcmp)) - g_free (new->data); - else - out = g_list_insert_sorted (out, new->data, (GCompareFunc) strcmp); - - new = g_list_delete_link (new, new); - } - } - - return out; -} - -GList * -empathy_log_manager_get_messages_for_date (EmpathyLogManager *manager, - TpAccount *account, - const gchar *chat_id, - gboolean chatroom, - const gchar *date) -{ - GList *l, *out = NULL; - EmpathyLogManagerPriv *priv; - - g_return_val_if_fail (EMPATHY_IS_LOG_MANAGER (manager), NULL); - g_return_val_if_fail (chat_id != NULL, NULL); - - priv = GET_PRIV (manager); - - for (l = priv->stores; l; l = g_list_next (l)) - { - EmpathyLogStore *store = EMPATHY_LOG_STORE (l->data); - - out = g_list_concat (out, empathy_log_store_get_messages_for_date ( - store, account, chat_id, chatroom, date)); - } - - return out; -} - -static gint -log_manager_message_date_cmp (gconstpointer a, - gconstpointer b) -{ - EmpathyMessage *one = (EmpathyMessage *) a; - EmpathyMessage *two = (EmpathyMessage *) b; - time_t one_time, two_time; - - one_time = empathy_message_get_timestamp (one); - two_time = empathy_message_get_timestamp (two); - - /* Return -1 of message1 is older than message2 */ - return one_time < two_time ? -1 : one_time - two_time; -} - -GList * -empathy_log_manager_get_filtered_messages (EmpathyLogManager *manager, - TpAccount *account, - const gchar *chat_id, - gboolean chatroom, - guint num_messages, - EmpathyLogMessageFilter filter, - gpointer user_data) -{ - EmpathyLogManagerPriv *priv; - GList *out = NULL; - GList *l; - guint i = 0; - - g_return_val_if_fail (EMPATHY_IS_LOG_MANAGER (manager), NULL); - g_return_val_if_fail (chat_id != NULL, NULL); - - priv = GET_PRIV (manager); - - /* Get num_messages from each log store and keep only the - * newest ones in the out list. Keep that list sorted: Older first. */ - for (l = priv->stores; l; l = g_list_next (l)) - { - EmpathyLogStore *store = EMPATHY_LOG_STORE (l->data); - GList *new; - - new = empathy_log_store_get_filtered_messages (store, account, chat_id, - chatroom, num_messages, filter, user_data); - while (new) - { - if (i < num_messages) - { - /* We have less message than needed so far. Keep this message */ - out = g_list_insert_sorted (out, new->data, - (GCompareFunc) log_manager_message_date_cmp); - i++; - } - else if (log_manager_message_date_cmp (new->data, out->data) > 0) - { - /* This message is newer than the oldest message we have in out - * list. Remove the head of out list and insert this message */ - g_object_unref (out->data); - out = g_list_delete_link (out, out); - out = g_list_insert_sorted (out, new->data, - (GCompareFunc) log_manager_message_date_cmp); - } - else - { - /* This message is older than the oldest message we have in out - * list. Drop it. */ - g_object_unref (new->data); - } - - new = g_list_delete_link (new, new); - } - } - - return out; -} - -GList * -empathy_log_manager_get_chats (EmpathyLogManager *manager, - TpAccount *account) -{ - GList *l, *out = NULL; - EmpathyLogManagerPriv *priv; - - g_return_val_if_fail (EMPATHY_IS_LOG_MANAGER (manager), NULL); - - priv = GET_PRIV (manager); - - for (l = priv->stores; l; l = g_list_next (l)) - { - EmpathyLogStore *store = EMPATHY_LOG_STORE (l->data); - - out = g_list_concat (out, - empathy_log_store_get_chats (store, account)); - } - - return out; -} - -GList * -empathy_log_manager_search_new (EmpathyLogManager *manager, - const gchar *text) -{ - GList *l, *out = NULL; - EmpathyLogManagerPriv *priv; - - g_return_val_if_fail (EMPATHY_IS_LOG_MANAGER (manager), NULL); - g_return_val_if_fail (!EMP_STR_EMPTY (text), NULL); - - priv = GET_PRIV (manager); - - for (l = priv->stores; l; l = g_list_next (l)) - { - EmpathyLogStore *store = EMPATHY_LOG_STORE (l->data); - - out = g_list_concat (out, - empathy_log_store_search_new (store, text)); - } - - return out; -} - -void -empathy_log_manager_search_hit_free (EmpathyLogSearchHit *hit) -{ - if (hit->account != NULL) - g_object_unref (hit->account); - - g_free (hit->date); - g_free (hit->filename); - g_free (hit->chat_id); - - g_slice_free (EmpathyLogSearchHit, hit); -} - -void -empathy_log_manager_search_free (GList *hits) -{ - GList *l; - - for (l = hits; l; l = g_list_next (l)) - { - empathy_log_manager_search_hit_free (l->data); - } - - g_list_free (hits); -} - -/* Format is just date, 20061201. */ -gchar * -empathy_log_manager_get_date_readable (const gchar *date) -{ - time_t t; - - t = empathy_time_parse (date); - - return empathy_time_to_string_local (t, "%a %d %b %Y"); -} - -static void -log_manager_chat_received_message_cb (EmpathyTpChat *tp_chat, - EmpathyMessage *message, - EmpathyLogManager *log_manager) -{ - GError *error = NULL; - TpHandleType handle_type; - TpChannel *channel; - - channel = empathy_tp_chat_get_channel (tp_chat); - tp_channel_get_handle (channel, &handle_type); - - if (!empathy_log_manager_add_message (log_manager, - tp_channel_get_identifier (channel), - handle_type == TP_HANDLE_TYPE_ROOM, - message, &error)) - { - DEBUG ("Failed to write message: %s", - error ? error->message : "No error message"); - - if (error != NULL) - g_error_free (error); - } -} - -static void -log_manager_dispatcher_observe_cb (EmpathyDispatcher *dispatcher, - EmpathyDispatchOperation *operation, - EmpathyLogManager *log_manager) -{ - GQuark channel_type; - - channel_type = empathy_dispatch_operation_get_channel_type_id (operation); - - if (channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_TEXT) - { - EmpathyTpChat *tp_chat; - - tp_chat = EMPATHY_TP_CHAT ( - empathy_dispatch_operation_get_channel_wrapper (operation)); - - g_signal_connect (tp_chat, "message-received", - G_CALLBACK (log_manager_chat_received_message_cb), log_manager); - } -} - - -void -empathy_log_manager_observe (EmpathyLogManager *log_manager, - EmpathyDispatcher *dispatcher) -{ - g_signal_connect (dispatcher, "observe", - G_CALLBACK (log_manager_dispatcher_observe_cb), log_manager); -} diff --git a/libempathy/empathy-log-manager.h b/libempathy/empathy-log-manager.h deleted file mode 100644 index 1dcc7f26c..000000000 --- a/libempathy/empathy-log-manager.h +++ /dev/null @@ -1,106 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Copyright (C) 2003-2007 Imendio AB - * Copyright (C) 2007-2010 Collabora Ltd. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * - * Authors: Xavier Claessens <xclaesse@gmail.com> - */ - -#ifndef __EMPATHY_LOG_MANAGER_H__ -#define __EMPATHY_LOG_MANAGER_H__ - -#include <config.h> -#ifndef ENABLE_TPL - -#include <glib-object.h> - -#include "empathy-message.h" -#include "empathy-dispatcher.h" - -G_BEGIN_DECLS - -#define EMPATHY_TYPE_LOG_MANAGER (empathy_log_manager_get_type ()) -#define EMPATHY_LOG_MANAGER(o) \ - (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_LOG_MANAGER, \ - EmpathyLogManager)) -#define EMPATHY_LOG_MANAGER_CLASS(k) \ - (G_TYPE_CHECK_CLASS_CAST ((k), EMPATHY_TYPE_LOG_MANAGER, \ - EmpathyLogManagerClass)) -#define EMPATHY_IS_LOG_MANAGER(o) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_LOG_MANAGER)) -#define EMPATHY_IS_LOG_MANAGER_CLASS(k) \ - (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_LOG_MANAGER)) -#define EMPATHY_LOG_MANAGER_GET_CLASS(o) \ - (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_LOG_MANAGER, \ - EmpathyLogManagerClass)) - -typedef struct _EmpathyLogManager EmpathyLogManager; -typedef struct _EmpathyLogManagerClass EmpathyLogManagerClass; -typedef struct _EmpathyLogSearchHit EmpathyLogSearchHit; - -struct _EmpathyLogManager -{ - GObject parent; - gpointer priv; -}; - -struct _EmpathyLogManagerClass -{ - GObjectClass parent_class; -}; - -struct _EmpathyLogSearchHit -{ - TpAccount *account; - gchar *chat_id; - gboolean is_chatroom; - gchar *filename; - gchar *date; -}; - -typedef gboolean (*EmpathyLogMessageFilter) (EmpathyMessage *message, - gpointer user_data); - -GType empathy_log_manager_get_type (void) G_GNUC_CONST; -EmpathyLogManager *empathy_log_manager_dup_singleton (void); -gboolean empathy_log_manager_add_message (EmpathyLogManager *manager, - const gchar *chat_id, gboolean chatroom, EmpathyMessage *message, - GError **error); -gboolean empathy_log_manager_exists (EmpathyLogManager *manager, - TpAccount *account, const gchar *chat_id, gboolean chatroom); -GList *empathy_log_manager_get_dates (EmpathyLogManager *manager, - TpAccount *account, const gchar *chat_id, gboolean chatroom); -GList *empathy_log_manager_get_messages_for_date (EmpathyLogManager *manager, - TpAccount *account, const gchar *chat_id, gboolean chatroom, - const gchar *date); -GList *empathy_log_manager_get_filtered_messages (EmpathyLogManager *manager, - TpAccount *account, const gchar *chat_id, gboolean chatroom, - guint num_messages, EmpathyLogMessageFilter filter, gpointer user_data); -GList *empathy_log_manager_get_chats (EmpathyLogManager *manager, - TpAccount *account); -GList *empathy_log_manager_search_new (EmpathyLogManager *manager, - const gchar *text); -void empathy_log_manager_search_free (GList *hits); -gchar *empathy_log_manager_get_date_readable (const gchar *date); -void empathy_log_manager_search_hit_free (EmpathyLogSearchHit *hit); -void empathy_log_manager_observe (EmpathyLogManager *log_manager, - EmpathyDispatcher *dispatcher); - -G_END_DECLS - -#endif /* ENABLE_TPL */ -#endif /* __EMPATHY_LOG_MANAGER_H__ */ diff --git a/libempathy/empathy-log-manager.xsl b/libempathy/empathy-log-manager.xsl deleted file mode 100644 index a934f3ab3..000000000 --- a/libempathy/empathy-log-manager.xsl +++ /dev/null @@ -1,148 +0,0 @@ -<xsl:stylesheet version = '1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'> - - <xsl:output method="html" encoding="utf-8" indent="yes"/> - - <xsl:template match="/"> - <html> - <head> - <style type="text/css"> - <xsl:text> - body { - background: #fff; - font-family: Verdana, "Bitstream Vera Sans", Sans-Serif; - font-size: 10pt; - } - .stamp { - color: #999; - } - .top-day-stamp { - color: #999; - text-align: center; - margin-bottom: 1em; - } - .new-day-stamp { - color: #999; - text-align: center; - margin-bottom: 1em; - margin-top: 1em; - } - .nick { - color: rgb(54,100, 139); - } - .nick-self { - color: rgb(46,139,87); - } - .nick-highlight { - color: rgb(205,92,92); - } - </xsl:text> - </style> - <title><xsl:value-of select="$title"/></title> - </head> - <body> - <xsl:apply-templates/> - </body> - </html> - </xsl:template> - - <xsl:template name="get-day"> - <xsl:param name="stamp"/> - <xsl:value-of select="substring ($stamp, 1, 8)"/> - </xsl:template> - - <xsl:template name="format-stamp"> - <xsl:param name="stamp"/> - <xsl:variable name="hour" select="substring ($stamp, 10, 2)"/> - <xsl:variable name="min" select="substring ($stamp, 13, 2)"/> - - <xsl:value-of select="$hour"/>:<xsl:value-of select="$min"/> - </xsl:template> - - <xsl:template name="format-day-stamp"> - <xsl:param name="stamp"/> - <xsl:variable name="year" select="substring ($stamp, 1, 4)"/> - <xsl:variable name="month" select="substring ($stamp, 5, 2)"/> - <xsl:variable name="day" select="substring ($stamp, 7, 2)"/> - - <xsl:value-of select="$year"/>-<xsl:value-of select="$month"/>-<xsl:value-of select="$day"/> - </xsl:template> - - <xsl:template name="header"> - <xsl:param name="stamp"/> - <div class="top-day-stamp"> - <xsl:call-template name="format-day-stamp"> - <xsl:with-param name="stamp" select="@time"/> - </xsl:call-template> - </div> - </xsl:template> - - <xsl:template match="a"> - <xsl:text disable-output-escaping="yes"><a href="</xsl:text> - - <xsl:value-of disable-output-escaping="yes" select="@href"/> - - <xsl:text disable-output-escaping="yes">"></xsl:text> - - <xsl:value-of select="@href"/> - <xsl:text disable-output-escaping="yes"></a></xsl:text> - </xsl:template> - - <xsl:template match="log"> - - <div class="top-day-stamp"> - <xsl:call-template name="format-day-stamp"> - <xsl:with-param name="stamp" select="//message[1]/@time"/> - </xsl:call-template> - </div> - - <xsl:for-each select="*"> - - <xsl:variable name="prev-time"> - <xsl:call-template name="get-day"> - <xsl:with-param name="stamp" select="preceding-sibling::*[1]/@time"/> - </xsl:call-template> - </xsl:variable> - - <xsl:variable name="this-time"> - <xsl:call-template name="get-day"> - <xsl:with-param name="stamp" select="@time"/> - </xsl:call-template> - </xsl:variable> - - <xsl:if test="$prev-time < $this-time"> - <div class="new-day-stamp"> - <xsl:call-template name="format-day-stamp"> - <xsl:with-param name="stamp" select="@time"/> - </xsl:call-template> - </div> - </xsl:if> - - <xsl:variable name="stamp"> - <xsl:call-template name="format-stamp"> - <xsl:with-param name="stamp" select="@time"/> - </xsl:call-template> - </xsl:variable> - - <span class="stamp"> - <xsl:value-of select="$stamp"/> - </span> - - <xsl:variable name="nick-class"> - <xsl:choose> - <xsl:when test="not(string(@id))">nick-self</xsl:when> - <xsl:otherwise>nick</xsl:otherwise> - </xsl:choose> - </xsl:variable> - - <span class="{$nick-class}"> - <<xsl:value-of select="@name"/>> - </span> - - <xsl:apply-templates/> - <br/> - - </xsl:for-each> - - </xsl:template> - -</xsl:stylesheet> diff --git a/libempathy/empathy-log-store-empathy.c b/libempathy/empathy-log-store-empathy.c deleted file mode 100644 index 1291141bc..000000000 --- a/libempathy/empathy-log-store-empathy.c +++ /dev/null @@ -1,822 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Copyright (C) 2003-2007 Imendio AB - * Copyright (C) 2007-2010 Collabora Ltd. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * - * Authors: Xavier Claessens <xclaesse@gmail.com> - * Jonny Lamb <jonny.lamb@collabora.co.uk> - */ - -#include <config.h> - -#include <string.h> -#include <stdio.h> -#include <stdlib.h> -#include <glib/gstdio.h> - -#include <telepathy-glib/account-manager.h> -#include <telepathy-glib/util.h> -#include <telepathy-glib/defs.h> - -#include "empathy-log-store.h" -#include "empathy-log-store-empathy.h" -#include "empathy-log-manager.h" -#include "empathy-contact.h" -#include "empathy-time.h" -#include "empathy-utils.h" - -#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_DIR_CHATROOMS "chatrooms" -#define LOG_FILENAME_SUFFIX ".log" -#define LOG_TIME_FORMAT_FULL "%Y%m%dT%H:%M:%S" -#define LOG_TIME_FORMAT "%Y%m%d" -#define LOG_HEADER \ - "<?xml version='1.0' encoding='utf-8'?>\n" \ - "<?xml-stylesheet type=\"text/xsl\" href=\"empathy-log.xsl\"?>\n" \ - "<log>\n" - -#define LOG_FOOTER \ - "</log>\n" - - -#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyLogStoreEmpathy) -typedef struct -{ - gchar *basedir; - gchar *name; - TpAccountManager *account_manager; -} EmpathyLogStoreEmpathyPriv; - -static void log_store_iface_init (gpointer g_iface,gpointer iface_data); - -G_DEFINE_TYPE_WITH_CODE (EmpathyLogStoreEmpathy, empathy_log_store_empathy, - G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (EMPATHY_TYPE_LOG_STORE, - log_store_iface_init)); - -static void -log_store_empathy_finalize (GObject *object) -{ - EmpathyLogStoreEmpathy *self = EMPATHY_LOG_STORE_EMPATHY (object); - EmpathyLogStoreEmpathyPriv *priv = GET_PRIV (self); - - g_object_unref (priv->account_manager); - g_free (priv->basedir); - g_free (priv->name); -} - -static void -empathy_log_store_empathy_class_init (EmpathyLogStoreEmpathyClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - object_class->finalize = log_store_empathy_finalize; - - g_type_class_add_private (object_class, sizeof (EmpathyLogStoreEmpathyPriv)); -} - -static void -empathy_log_store_empathy_init (EmpathyLogStoreEmpathy *self) -{ - EmpathyLogStoreEmpathyPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (self, - EMPATHY_TYPE_LOG_STORE_EMPATHY, EmpathyLogStoreEmpathyPriv); - - self->priv = priv; - - priv->basedir = g_build_path (G_DIR_SEPARATOR_S, g_get_user_data_dir (), - PACKAGE_NAME, "logs", NULL); - - priv->name = g_strdup ("Empathy"); - priv->account_manager = tp_account_manager_dup (); -} - -static gchar * -log_store_account_to_dirname (TpAccount *account) -{ - const gchar *name; - - name = tp_proxy_get_object_path (account); - if (g_str_has_prefix (name, TP_ACCOUNT_OBJECT_PATH_BASE)) - name += strlen (TP_ACCOUNT_OBJECT_PATH_BASE); - - return g_strdelimit (g_strdup (name), "/", '_'); -} - - -static gchar * -log_store_empathy_get_dir (EmpathyLogStore *self, - TpAccount *account, - const gchar *chat_id, - gboolean chatroom) -{ - gchar *basedir; - gchar *escaped; - EmpathyLogStoreEmpathyPriv *priv; - - priv = GET_PRIV (self); - - escaped = log_store_account_to_dirname (account); - - if (chatroom) - basedir = g_build_path (G_DIR_SEPARATOR_S, priv->basedir, escaped, - LOG_DIR_CHATROOMS, chat_id, NULL); - else - basedir = g_build_path (G_DIR_SEPARATOR_S, priv->basedir, - escaped, chat_id, NULL); - - g_free (escaped); - - return basedir; -} - -static gchar * -log_store_empathy_get_timestamp_filename (void) -{ - time_t t; - gchar *time_str; - gchar *filename; - - t = empathy_time_get_current (); - time_str = empathy_time_to_string_local (t, LOG_TIME_FORMAT); - filename = g_strconcat (time_str, LOG_FILENAME_SUFFIX, NULL); - - g_free (time_str); - - return filename; -} - -static gchar * -log_store_empathy_get_timestamp_from_message (EmpathyMessage *message) -{ - time_t t; - - t = empathy_message_get_timestamp (message); - - /* We keep the timestamps in the messages as UTC. */ - return empathy_time_to_string_utc (t, LOG_TIME_FORMAT_FULL); -} - -static gchar * -log_store_empathy_get_filename (EmpathyLogStore *self, - TpAccount *account, - const gchar *chat_id, - gboolean chatroom) -{ - gchar *basedir; - gchar *timestamp; - gchar *filename; - - basedir = log_store_empathy_get_dir (self, account, chat_id, chatroom); - timestamp = log_store_empathy_get_timestamp_filename (); - filename = g_build_filename (basedir, timestamp, NULL); - - g_free (basedir); - g_free (timestamp); - - return filename; -} - -static gboolean -log_store_empathy_add_message (EmpathyLogStore *self, - const gchar *chat_id, - gboolean chatroom, - EmpathyMessage *message, - GError **error) -{ - FILE *file; - TpAccount *account; - EmpathyContact *sender; - const gchar *body_str; - const gchar *str; - EmpathyAvatar *avatar; - gchar *avatar_token = NULL; - gchar *filename; - gchar *basedir; - gchar *body; - gchar *timestamp; - gchar *contact_name; - gchar *contact_id; - TpChannelTextMessageType msg_type; - - g_return_val_if_fail (EMPATHY_IS_LOG_STORE (self), FALSE); - g_return_val_if_fail (chat_id != NULL, FALSE); - g_return_val_if_fail (EMPATHY_IS_MESSAGE (message), FALSE); - - sender = empathy_message_get_sender (message); - account = empathy_contact_get_account (sender); - body_str = empathy_message_get_body (message); - msg_type = empathy_message_get_tptype (message); - - if (EMP_STR_EMPTY (body_str)) - return FALSE; - - filename = log_store_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)) - { - DEBUG ("Creating directory:'%s'", basedir); - g_mkdir_with_parents (basedir, LOG_DIR_CREATE_MODE); - } - g_free (basedir); - - DEBUG ("Adding message: '%s' to file: '%s'", body_str, filename); - - if (!g_file_test (filename, G_FILE_TEST_EXISTS)) - { - file = g_fopen (filename, "w+"); - if (file != NULL) - g_fprintf (file, LOG_HEADER); - - g_chmod (filename, LOG_FILE_CREATE_MODE); - } - else - { - file = g_fopen (filename, "r+"); - if (file != NULL) - fseek (file, - strlen (LOG_FOOTER), SEEK_END); - } - - body = g_markup_escape_text (body_str, -1); - timestamp = log_store_empathy_get_timestamp_from_message (message); - - str = empathy_contact_get_name (sender); - contact_name = g_markup_escape_text (str, -1); - - str = empathy_contact_get_id (sender); - contact_id = g_markup_escape_text (str, -1); - - avatar = empathy_contact_get_avatar (sender); - if (avatar != NULL) - avatar_token = g_markup_escape_text (avatar->token, -1); - - g_fprintf (file, - "<message time='%s' cm_id='%d' id='%s' name='%s' token='%s' isuser='%s' type='%s'>" - "%s</message>\n" LOG_FOOTER, timestamp, - empathy_message_get_id (message), - contact_id, contact_name, - avatar_token ? avatar_token : "", - empathy_contact_is_user (sender) ? "true" : "false", - empathy_message_type_to_str (msg_type), body); - - fclose (file); - g_free (filename); - g_free (contact_id); - g_free (contact_name); - g_free (timestamp); - g_free (body); - g_free (avatar_token); - - return TRUE; -} - -static gboolean -log_store_empathy_exists (EmpathyLogStore *self, - TpAccount *account, - const gchar *chat_id, - gboolean chatroom) -{ - gchar *dir; - gboolean exists; - - dir = log_store_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); - - return exists; -} - -static GList * -log_store_empathy_get_dates (EmpathyLogStore *self, - TpAccount *account, - const gchar *chat_id, - gboolean chatroom) -{ - GList *dates = NULL; - gchar *date; - gchar *directory; - GDir *dir; - const gchar *filename; - const gchar *p; - - g_return_val_if_fail (EMPATHY_IS_LOG_STORE (self), NULL); - g_return_val_if_fail (chat_id != NULL, NULL); - - directory = log_store_empathy_get_dir (self, account, chat_id, chatroom); - dir = g_dir_open (directory, 0, NULL); - if (!dir) - { - DEBUG ("Could not open directory:'%s'", directory); - g_free (directory); - return NULL; - } - - 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)) - continue; - - p = strstr (filename, LOG_FILENAME_SUFFIX); - date = g_strndup (filename, p - filename); - - if (!date) - continue; - - if (!g_regex_match_simple ("\\d{8}", date, 0, 0)) - continue; - - dates = g_list_insert_sorted (dates, date, (GCompareFunc) strcmp); - } - - g_free (directory); - g_dir_close (dir); - - DEBUG ("Parsed %d dates", g_list_length (dates)); - - return dates; -} - -static gchar * -log_store_empathy_get_filename_for_date (EmpathyLogStore *self, - TpAccount *account, - const gchar *chat_id, - gboolean chatroom, - const gchar *date) -{ - gchar *basedir; - gchar *timestamp; - gchar *filename; - - basedir = log_store_empathy_get_dir (self, account, chat_id, chatroom); - timestamp = g_strconcat (date, LOG_FILENAME_SUFFIX, NULL); - filename = g_build_filename (basedir, timestamp, NULL); - - g_free (basedir); - g_free (timestamp); - - return filename; -} - -static EmpathyLogSearchHit * -log_store_empathy_search_hit_new (EmpathyLogStore *self, - const gchar *filename) -{ - EmpathyLogStoreEmpathyPriv *priv = GET_PRIV (self); - EmpathyLogSearchHit *hit; - gchar *account_name; - const gchar *end; - gchar **strv; - guint len; - GList *accounts, *l; - - if (!g_str_has_suffix (filename, LOG_FILENAME_SUFFIX)) - return NULL; - - strv = g_strsplit (filename, G_DIR_SEPARATOR_S, -1); - len = g_strv_length (strv); - - hit = g_slice_new0 (EmpathyLogSearchHit); - - end = strstr (strv[len-1], LOG_FILENAME_SUFFIX); - hit->date = g_strndup (strv[len-1], end - strv[len-1]); - hit->chat_id = g_strdup (strv[len-2]); - hit->is_chatroom = (strcmp (strv[len-3], LOG_DIR_CHATROOMS) == 0); - - if (hit->is_chatroom) - account_name = strv[len-4]; - else - account_name = strv[len-3]; - - /* FIXME: This assumes the account manager is prepared, but the - * synchronous API forces this. See bug #599189. */ - accounts = tp_account_manager_get_valid_accounts (priv->account_manager); - - for (l = accounts; l != NULL; l = g_list_next (l)) - { - TpAccount *account = TP_ACCOUNT (l->data); - gchar *name; - - name = log_store_account_to_dirname (account); - if (!tp_strdiff (name, account_name)) - { - g_assert (hit->account == NULL); - hit->account = account; - g_object_ref (account); - } - g_free (name); - } - g_list_free (accounts); - - hit->filename = g_strdup (filename); - - g_strfreev (strv); - - return hit; -} - -static GList * -log_store_empathy_get_messages_for_file (EmpathyLogStore *self, - TpAccount *account, - const gchar *filename) -{ - GList *messages = NULL; - xmlParserCtxtPtr ctxt; - xmlDocPtr doc; - xmlNodePtr log_node; - xmlNodePtr node; - - g_return_val_if_fail (EMPATHY_IS_LOG_STORE (self), NULL); - g_return_val_if_fail (filename != NULL, NULL); - - DEBUG ("Attempting to parse filename:'%s'...", filename); - - if (!g_file_test (filename, G_FILE_TEST_EXISTS)) - { - DEBUG ("Filename:'%s' does not exist", filename); - return NULL; - } - - /* Create parser. */ - ctxt = xmlNewParserCtxt (); - - /* Parse and validate the file. */ - doc = xmlCtxtReadFile (ctxt, filename, NULL, 0); - if (!doc) - { - g_warning ("Failed to parse file:'%s'", filename); - xmlFreeParserCtxt (ctxt); - return NULL; - } - - /* The root node, presets. */ - log_node = xmlDocGetRootElement (doc); - if (!log_node) - { - xmlFreeDoc (doc); - xmlFreeParserCtxt (ctxt); - return NULL; - } - - /* Now get the messages. */ - for (node = log_node->children; node; node = node->next) - { - EmpathyMessage *message; - EmpathyContact *sender; - gchar *time_; - time_t t; - gchar *sender_id; - gchar *sender_name; - gchar *sender_avatar_token; - gchar *body; - gchar *is_user_str; - gboolean is_user = FALSE; - gchar *msg_type_str; - gchar *cm_id_str; - guint cm_id; - TpChannelTextMessageType msg_type = TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL; - - if (strcmp ((const gchar *) node->name, "message") != 0) - continue; - - body = (gchar *) xmlNodeGetContent (node); - time_ = (gchar *) xmlGetProp (node, (const xmlChar *) "time"); - sender_id = (gchar *) xmlGetProp (node, (const xmlChar *) "id"); - sender_name = (gchar *) xmlGetProp (node, (const xmlChar *) "name"); - sender_avatar_token = (gchar *) xmlGetProp (node, - (const xmlChar *) "token"); - is_user_str = (gchar *) xmlGetProp (node, (const xmlChar *) "isuser"); - msg_type_str = (gchar *) xmlGetProp (node, (const xmlChar *) "type"); - cm_id_str = (gchar *) xmlGetProp (node, (const xmlChar *) "cm_id"); - - if (is_user_str) - is_user = strcmp (is_user_str, "true") == 0; - - if (msg_type_str) - msg_type = empathy_message_type_from_str (msg_type_str); - - if (cm_id_str) - cm_id = atoi (cm_id_str); - - t = empathy_time_parse (time_); - - sender = empathy_contact_new_for_log (account, sender_id, sender_name, - is_user); - - 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_tptype (message, msg_type); - empathy_message_set_is_backlog (message, TRUE); - - if (cm_id_str) - empathy_message_set_id (message, cm_id); - - messages = g_list_append (messages, message); - - g_object_unref (sender); - xmlFree (time_); - xmlFree (sender_id); - xmlFree (sender_name); - xmlFree (body); - xmlFree (is_user_str); - xmlFree (msg_type_str); - xmlFree (cm_id_str); - xmlFree (sender_avatar_token); - } - - DEBUG ("Parsed %d messages", g_list_length (messages)); - - xmlFreeDoc (doc); - xmlFreeParserCtxt (ctxt); - - return messages; -} - -static GList * -log_store_empathy_get_all_files (EmpathyLogStore *self, - const gchar *dir) -{ - GDir *gdir; - GList *files = NULL; - const gchar *name; - const gchar *basedir; - EmpathyLogStoreEmpathyPriv *priv; - - priv = GET_PRIV (self); - - basedir = dir ? dir : priv->basedir; - - gdir = g_dir_open (basedir, 0, NULL); - if (!gdir) - return NULL; - - while ((name = g_dir_read_name (gdir)) != NULL) - { - gchar *filename; - - filename = g_build_filename (basedir, name, NULL); - if (g_str_has_suffix (filename, LOG_FILENAME_SUFFIX)) - { - files = g_list_prepend (files, filename); - continue; - } - - if (g_file_test (filename, G_FILE_TEST_IS_DIR)) - { - /* Recursively get all log files */ - files = g_list_concat (files, - log_store_empathy_get_all_files (self, filename)); - } - - g_free (filename); - } - - g_dir_close (gdir); - - return files; -} - -static GList * -log_store_empathy_search_new (EmpathyLogStore *self, - const gchar *text) -{ - GList *files, *l; - GList *hits = NULL; - gchar *text_casefold; - - g_return_val_if_fail (EMPATHY_IS_LOG_STORE (self), NULL); - g_return_val_if_fail (!EMP_STR_EMPTY (text), NULL); - - text_casefold = g_utf8_casefold (text, -1); - - files = log_store_empathy_get_all_files (self, NULL); - DEBUG ("Found %d log files in total", g_list_length (files)); - - for (l = files; l; l = g_list_next (l)) - { - gchar *filename; - GMappedFile *file; - gsize length; - gchar *contents = NULL; - gchar *contents_casefold = NULL; - - filename = l->data; - - file = g_mapped_file_new (filename, FALSE, NULL); - if (file == NULL) - goto drinking_island; - - length = g_mapped_file_get_length (file); - contents = g_mapped_file_get_contents (file); - - if (length == 0 || contents == NULL) - goto drinking_island; - - contents_casefold = g_utf8_casefold (contents, length); - - if (strstr (contents_casefold, text_casefold)) - { - EmpathyLogSearchHit *hit; - - hit = log_store_empathy_search_hit_new (self, filename); - - if (hit) - { - hits = g_list_prepend (hits, hit); - DEBUG ("Found text:'%s' in file:'%s' on date:'%s'", - text, hit->filename, hit->date); - } - } - -drinking_island: - if (file != NULL) - g_mapped_file_unref (file); - - g_free (contents_casefold); - g_free (filename); - } - - g_list_free (files); - g_free (text_casefold); - - return hits; -} - -static GList * -log_store_empathy_get_chats_for_dir (EmpathyLogStore *self, - const gchar *dir, - gboolean is_chatroom) -{ - GDir *gdir; - GList *hits = NULL; - const gchar *name; - GError *error = NULL; - - gdir = g_dir_open (dir, 0, &error); - if (!gdir) - { - DEBUG ("Failed to open directory: %s, error: %s", dir, error->message); - g_error_free (error); - return NULL; - } - - while ((name = g_dir_read_name (gdir)) != NULL) - { - EmpathyLogSearchHit *hit; - - if (!is_chatroom && strcmp (name, LOG_DIR_CHATROOMS) == 0) - { - gchar *filename = g_build_filename (dir, name, NULL); - hits = g_list_concat (hits, log_store_empathy_get_chats_for_dir ( - self, filename, TRUE)); - g_free (filename); - continue; - } - hit = g_slice_new0 (EmpathyLogSearchHit); - hit->chat_id = g_strdup (name); - hit->is_chatroom = is_chatroom; - - hits = g_list_prepend (hits, hit); - } - - g_dir_close (gdir); - - return hits; -} - - -static GList * -log_store_empathy_get_messages_for_date (EmpathyLogStore *self, - TpAccount *account, - const gchar *chat_id, - gboolean chatroom, - const gchar *date) -{ - gchar *filename; - GList *messages; - - g_return_val_if_fail (EMPATHY_IS_LOG_STORE (self), NULL); - g_return_val_if_fail (chat_id != NULL, NULL); - g_return_val_if_fail (account != NULL, NULL); - - filename = log_store_empathy_get_filename_for_date (self, account, - chat_id, chatroom, date); - messages = log_store_empathy_get_messages_for_file (self, account, - filename); - g_free (filename); - - return messages; -} - -static GList * -log_store_empathy_get_chats (EmpathyLogStore *self, - TpAccount *account) -{ - gchar *dir; - GList *hits; - EmpathyLogStoreEmpathyPriv *priv; - - priv = GET_PRIV (self); - - dir = log_store_empathy_get_dir (self, account, NULL, FALSE); - - hits = log_store_empathy_get_chats_for_dir (self, dir, FALSE); - - g_free (dir); - - return hits; -} - -static const gchar * -log_store_empathy_get_name (EmpathyLogStore *self) -{ - EmpathyLogStoreEmpathyPriv *priv = GET_PRIV (self); - - return priv->name; -} - -static GList * -log_store_empathy_get_filtered_messages (EmpathyLogStore *self, - TpAccount *account, - const gchar *chat_id, - gboolean chatroom, - guint num_messages, - EmpathyLogMessageFilter filter, - gpointer user_data) -{ - GList *dates, *l, *messages = NULL; - guint i = 0; - - dates = log_store_empathy_get_dates (self, account, chat_id, chatroom); - - for (l = g_list_last (dates); l && i < num_messages; l = g_list_previous (l)) - { - GList *new_messages, *n, *next; - - /* FIXME: We should really restrict the message parsing to get only - * the newest num_messages. */ - new_messages = log_store_empathy_get_messages_for_date (self, account, - chat_id, chatroom, l->data); - - n = new_messages; - while (n != NULL) - { - next = g_list_next (n); - if (!filter (n->data, user_data)) - { - g_object_unref (n->data); - new_messages = g_list_delete_link (new_messages, n); - } - else - { - i++; - } - n = next; - } - messages = g_list_concat (messages, new_messages); - } - - g_list_foreach (dates, (GFunc) g_free, NULL); - g_list_free (dates); - - return messages; -} - -static void -log_store_iface_init (gpointer g_iface, - gpointer iface_data) -{ - EmpathyLogStoreInterface *iface = (EmpathyLogStoreInterface *) g_iface; - - iface->get_name = log_store_empathy_get_name; - iface->exists = log_store_empathy_exists; - iface->add_message = log_store_empathy_add_message; - iface->get_dates = log_store_empathy_get_dates; - iface->get_messages_for_date = log_store_empathy_get_messages_for_date; - iface->get_chats = log_store_empathy_get_chats; - iface->search_new = log_store_empathy_search_new; - iface->ack_message = NULL; - iface->get_filtered_messages = log_store_empathy_get_filtered_messages; -} diff --git a/libempathy/empathy-log-store-empathy.h b/libempathy/empathy-log-store-empathy.h deleted file mode 100644 index 7290aee46..000000000 --- a/libempathy/empathy-log-store-empathy.h +++ /dev/null @@ -1,71 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Copyright (C) 2003-2007 Imendio AB - * Copyright (C) 2007-2010 Collabora Ltd. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * - * Authors: Xavier Claessens <xclaesse@gmail.com> - * Jonny Lamb <jonny.lamb@collabora.co.uk> - */ - -#ifndef __EMPATHY_LOG_STORE_EMPATHY_H__ -#define __EMPATHY_LOG_STORE_EMPATHY_H__ - -#include <config.h> -#ifndef ENABLE_TPL - -#include <glib.h> - -#include <telepathy-glib/account.h> - -G_BEGIN_DECLS - -#define EMPATHY_TYPE_LOG_STORE_EMPATHY \ - (empathy_log_store_empathy_get_type ()) -#define EMPATHY_LOG_STORE_EMPATHY(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), EMPATHY_TYPE_LOG_STORE_EMPATHY, \ - EmpathyLogStoreEmpathy)) -#define EMPATHY_LOG_STORE_EMPATHY_CLASS(vtable) \ - (G_TYPE_CHECK_CLASS_CAST ((vtable), EMPATHY_TYPE_LOG_STORE_EMPATHY, \ - EmpathyLogStoreEmpathyClass)) -#define EMPATHY_IS_LOG_STORE_EMPATHY(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EMPATHY_TYPE_LOG_STORE_EMPATHY)) -#define EMPATHY_IS_LOG_STORE_EMPATHY_CLASS(vtable) \ - (G_TYPE_CHECK_CLASS_TYPE ((vtable), EMPATHY_TYPE_LOG_STORE_EMPATHY)) -#define EMPATHY_LOG_STORE_EMPATHY_GET_CLASS(inst) \ - (G_TYPE_INSTANCE_GET_CLASS ((inst), EMPATHY_TYPE_LOG_STORE_EMPATHY, \ - EmpathyLogStoreEmpathyClass)) - -typedef struct _EmpathyLogStoreEmpathy EmpathyLogStoreEmpathy; -typedef struct _EmpathyLogStoreEmpathyClass EmpathyLogStoreEmpathyClass; - -struct _EmpathyLogStoreEmpathy -{ - GObject parent; - gpointer priv; -}; - -struct _EmpathyLogStoreEmpathyClass -{ - GObjectClass parent; -}; - -GType empathy_log_store_empathy_get_type (void); - -G_END_DECLS - -#endif /* ENABLE_TPL */ -#endif /* __EMPATHY_LOG_STORE_EMPATHY_H__ */ diff --git a/libempathy/empathy-log-store.c b/libempathy/empathy-log-store.c deleted file mode 100644 index c0769d147..000000000 --- a/libempathy/empathy-log-store.c +++ /dev/null @@ -1,172 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Copyright (C) 2008 Collabora Ltd. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * - * Authors: Jonny Lamb <jonny.lamb@collabora.co.uk> - */ - -#include "empathy-log-store.h" - -GType -empathy_log_store_get_type (void) -{ - static GType type = 0; - if (type == 0) { - static const GTypeInfo info = { - sizeof (EmpathyLogStoreInterface), - NULL, /* base_init */ - NULL, /* base_finalize */ - NULL, /* class_init */ - NULL, /* class_finalize */ - NULL, /* class_data */ - 0, - 0, /* n_preallocs */ - NULL /* instance_init */ - }; - type = g_type_register_static (G_TYPE_INTERFACE, "EmpathyLogStore", - &info, 0); - } - return type; -} - -const gchar * -empathy_log_store_get_name (EmpathyLogStore *self) -{ - if (!EMPATHY_LOG_STORE_GET_INTERFACE (self)->get_name) - return NULL; - - return EMPATHY_LOG_STORE_GET_INTERFACE (self)->get_name (self); -} - -gboolean -empathy_log_store_exists (EmpathyLogStore *self, - TpAccount *account, - const gchar *chat_id, - gboolean chatroom) -{ - if (!EMPATHY_LOG_STORE_GET_INTERFACE (self)->exists) - return FALSE; - - return EMPATHY_LOG_STORE_GET_INTERFACE (self)->exists ( - self, account, chat_id, chatroom); -} - - - -gboolean -empathy_log_store_add_message (EmpathyLogStore *self, - const gchar *chat_id, - gboolean chatroom, - EmpathyMessage *message, - GError **error) -{ - if (!EMPATHY_LOG_STORE_GET_INTERFACE (self)->add_message) - return FALSE; - - return EMPATHY_LOG_STORE_GET_INTERFACE (self)->add_message ( - self, chat_id, chatroom, message, error); -} - -GList * -empathy_log_store_get_dates (EmpathyLogStore *self, - TpAccount *account, - const gchar *chat_id, - gboolean chatroom) -{ - if (!EMPATHY_LOG_STORE_GET_INTERFACE (self)->get_dates) - return NULL; - - return EMPATHY_LOG_STORE_GET_INTERFACE (self)->get_dates ( - self, account, chat_id, chatroom); -} - -GList * -empathy_log_store_get_messages_for_date (EmpathyLogStore *self, - TpAccount *account, - const gchar *chat_id, - gboolean chatroom, - const gchar *date) -{ - if (!EMPATHY_LOG_STORE_GET_INTERFACE (self)->get_messages_for_date) - return NULL; - - return EMPATHY_LOG_STORE_GET_INTERFACE (self)->get_messages_for_date ( - self, account, chat_id, chatroom, date); -} - -GList * -empathy_log_store_get_last_messages (EmpathyLogStore *self, - TpAccount *account, - const gchar *chat_id, - gboolean chatroom) -{ - if (!EMPATHY_LOG_STORE_GET_INTERFACE (self)->get_last_messages) - return NULL; - - return EMPATHY_LOG_STORE_GET_INTERFACE (self)->get_last_messages ( - self, account, chat_id, chatroom); -} - -GList * -empathy_log_store_get_chats (EmpathyLogStore *self, - TpAccount *account) -{ - if (!EMPATHY_LOG_STORE_GET_INTERFACE (self)->get_chats) - return NULL; - - return EMPATHY_LOG_STORE_GET_INTERFACE (self)->get_chats (self, account); -} - -GList * -empathy_log_store_search_new (EmpathyLogStore *self, - const gchar *text) -{ - if (!EMPATHY_LOG_STORE_GET_INTERFACE (self)->search_new) - return NULL; - - return EMPATHY_LOG_STORE_GET_INTERFACE (self)->search_new (self, text); -} - -void -empathy_log_store_ack_message (EmpathyLogStore *self, - const gchar *chat_id, - gboolean chatroom, - EmpathyMessage *message) -{ - if (!EMPATHY_LOG_STORE_GET_INTERFACE (self)->ack_message) - return; - - EMPATHY_LOG_STORE_GET_INTERFACE (self)->ack_message ( - self, chat_id, chatroom, message); -} - -GList * -empathy_log_store_get_filtered_messages (EmpathyLogStore *self, - TpAccount *account, - const gchar *chat_id, - gboolean chatroom, - guint num_messages, - EmpathyLogMessageFilter filter, - gpointer user_data) - -{ - if (!EMPATHY_LOG_STORE_GET_INTERFACE (self)->get_filtered_messages) - return NULL; - - return EMPATHY_LOG_STORE_GET_INTERFACE (self)->get_filtered_messages ( - self, account, chat_id, chatroom, num_messages, filter, user_data); -} diff --git a/libempathy/empathy-log-store.h b/libempathy/empathy-log-store.h deleted file mode 100644 index d8435fbf5..000000000 --- a/libempathy/empathy-log-store.h +++ /dev/null @@ -1,104 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Copyright (C) 2008 Collabora Ltd. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * - * Authors: Jonny Lamb <jonny.lamb@collabora.co.uk> - */ - -#ifndef __EMPATHY_LOG_STORE_H__ -#define __EMPATHY_LOG_STORE_H__ - -#include <config.h> -#ifndef ENABLE_TPL - -#include <glib-object.h> - -#include <telepathy-glib/account.h> - -#include "empathy-message.h" -#include "empathy-log-manager.h" - -G_BEGIN_DECLS - -#define EMPATHY_TYPE_LOG_STORE (empathy_log_store_get_type ()) -#define EMPATHY_LOG_STORE(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), EMPATHY_TYPE_LOG_STORE, \ - EmpathyLogStore)) -#define EMPATHY_IS_LOG_STORE(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EMPATHY_TYPE_LOG_STORE)) -#define EMPATHY_LOG_STORE_GET_INTERFACE(inst) \ - (G_TYPE_INSTANCE_GET_INTERFACE ((inst), EMPATHY_TYPE_LOG_STORE, \ - EmpathyLogStoreInterface)) - -typedef struct _EmpathyLogStore EmpathyLogStore; /* dummy object */ -typedef struct _EmpathyLogStoreInterface EmpathyLogStoreInterface; - -struct _EmpathyLogStoreInterface -{ - GTypeInterface parent; - - const gchar * (*get_name) (EmpathyLogStore *self); - gboolean (*exists) (EmpathyLogStore *self, TpAccount *account, - const gchar *chat_id, gboolean chatroom); - gboolean (*add_message) (EmpathyLogStore *self, const gchar *chat_id, - gboolean chatroom, EmpathyMessage *message, GError **error); - GList * (*get_dates) (EmpathyLogStore *self, TpAccount *account, - const gchar *chat_id, gboolean chatroom); - GList * (*get_messages_for_date) (EmpathyLogStore *self, - TpAccount *account, const gchar *chat_id, gboolean chatroom, - const gchar *date); - GList * (*get_last_messages) (EmpathyLogStore *self, TpAccount *account, - const gchar *chat_id, gboolean chatroom); - GList * (*get_chats) (EmpathyLogStore *self, - TpAccount *account); - GList * (*search_new) (EmpathyLogStore *self, const gchar *text); - void (*ack_message) (EmpathyLogStore *self, const gchar *chat_id, - gboolean chatroom, EmpathyMessage *message); - GList * (*get_filtered_messages) (EmpathyLogStore *self, TpAccount *account, - const gchar *chat_id, gboolean chatroom, guint num_messages, - EmpathyLogMessageFilter filter, gpointer user_data); -}; - -GType empathy_log_store_get_type (void) G_GNUC_CONST; - -const gchar *empathy_log_store_get_name (EmpathyLogStore *self); -gboolean empathy_log_store_exists (EmpathyLogStore *self, - TpAccount *account, const gchar *chat_id, gboolean chatroom); -gboolean empathy_log_store_add_message (EmpathyLogStore *self, - const gchar *chat_id, gboolean chatroom, EmpathyMessage *message, - GError **error); -GList *empathy_log_store_get_dates (EmpathyLogStore *self, - TpAccount *account, const gchar *chat_id, gboolean chatroom); -GList *empathy_log_store_get_messages_for_date (EmpathyLogStore *self, - TpAccount *account, const gchar *chat_id, gboolean chatroom, - const gchar *date); -GList *empathy_log_store_get_last_messages (EmpathyLogStore *self, - TpAccount *account, const gchar *chat_id, gboolean chatroom); -GList *empathy_log_store_get_chats (EmpathyLogStore *self, - TpAccount *account); -GList *empathy_log_store_search_new (EmpathyLogStore *self, - const gchar *text); -void empathy_log_store_ack_message (EmpathyLogStore *self, - const gchar *chat_id, gboolean chatroom, EmpathyMessage *message); -GList *empathy_log_store_get_filtered_messages (EmpathyLogStore *self, - TpAccount *account, const gchar *chat_id, gboolean chatroom, - guint num_messages, EmpathyLogMessageFilter filter, gpointer user_data); - -G_END_DECLS - -#endif /* ENABLE_TPL */ -#endif /* __EMPATHY_LOG_STORE_H__ */ |