From 8d4d46e440c7a6bd321fc098265db8ede27c07de Mon Sep 17 00:00:00 2001 From: Cosimo Alfarano Date: Tue, 23 Feb 2010 19:32:57 +0000 Subject: TPL Enabling patch, all-in-one. By default TPL is disabled, use --enable-tpl configure option to enable it. --- libempathy/Makefile.am | 34 +++++++++++---- libempathy/empathy-contact.c | 30 +++++++++++++ libempathy/empathy-contact.h | 7 +++ libempathy/empathy-log-manager.h | 4 ++ libempathy/empathy-log-store-empathy.h | 4 ++ libempathy/empathy-log-store.h | 4 ++ libempathy/empathy-message.c | 78 ++++++++++++++++++++++++++++++++++ libempathy/empathy-message.h | 6 +++ 8 files changed, 158 insertions(+), 9 deletions(-) (limited to 'libempathy') diff --git a/libempathy/Makefile.am b/libempathy/Makefile.am index f6f0c0a23..1f1423952 100644 --- a/libempathy/Makefile.am +++ b/libempathy/Makefile.am @@ -8,6 +8,7 @@ AM_CPPFLAGS = \ -DDATADIR=\""$(datadir)"\" \ -DLOCALEDIR=\""$(datadir)/locale"\" \ -DG_LOG_DOMAIN=\"empathy\" \ + $(TPL_CFLAGS) \ $(LIBEMPATHY_CFLAGS) \ $(GEOCLUE_CFLAGS) \ $(NETWORK_MANAGER_CFLAGS) \ @@ -48,9 +49,6 @@ libempathy_headers = \ empathy-irc-network.h \ empathy-irc-server.h \ empathy-location.h \ - empathy-log-manager.h \ - empathy-log-store-empathy.h \ - empathy-log-store.h \ empathy-message.h \ empathy-status-presets.h \ empathy-time.h \ @@ -63,6 +61,14 @@ libempathy_headers = \ empathy-types.h \ empathy-utils.h +if !ENABLE_TPL +libempathy_headers += \ + empathy-log-manager.h \ + empathy-log-store-empathy.h \ + empathy-log-store.h \ + $(NULL) +endif + libempathy_la_SOURCES = \ $(libempathy_headers) \ empathy-account-settings.c \ @@ -87,9 +93,6 @@ libempathy_la_SOURCES = \ empathy-irc-network-manager.c \ empathy-irc-network.c \ empathy-irc-server.c \ - empathy-log-manager.c \ - empathy-log-store-empathy.c \ - empathy-log-store.c \ empathy-message.c \ empathy-status-presets.c \ empathy-time.c \ @@ -101,6 +104,14 @@ libempathy_la_SOURCES = \ empathy-tp-roomlist.c \ empathy-utils.c +if !ENABLE_TPL +libempathy_la_SOURCES += \ + empathy-log-manager.c \ + empathy-log-store-empathy.c \ + empathy-log-store.c \ + $(NULL) +endif + # do not distribute generated files nodist_libempathy_la_SOURCES =\ $(BUILT_SOURCES) @@ -109,6 +120,7 @@ libempathy_la_LIBADD = \ $(top_builddir)/extensions/libemp-extensions.la \ $(LIBEMPATHY_LIBS) \ $(GEOCLUE_LIBS) \ + $(TPL_LIBS) \ $(NETWORK_MANAGER_LIBS) \ $(CONNMAN_LIBS) @@ -181,9 +193,10 @@ dtd_DATA = \ empathy-chatroom-manager.dtd \ empathy-irc-networks.dtd +if !ENABLE_TPL stylesheetdir = $(datadir)/empathy -stylesheet_DATA = \ - empathy-log-manager.xsl +stylesheet_DATA = empathy-log-manager.xsl +endif ircnetworksdir = $(datadir)/empathy ircnetworks_DATA = \ @@ -191,10 +204,13 @@ ircnetworks_DATA = \ EXTRA_DIST = \ empathy-marshal.list \ - $(stylesheet_DATA) \ $(dtd_DATA) \ $(ircnetworks_DATA) +if !ENABLE_TPL +EXTRA_DIST += $(stylesheet_DATA) +endif + CLEANFILES = \ $(BUILT_SOURCES) \ stamp-empathy-enum-types.h diff --git a/libempathy/empathy-contact.c b/libempathy/empathy-contact.c index a440ef23b..feba1c0b7 100644 --- a/libempathy/empathy-contact.c +++ b/libempathy/empathy-contact.c @@ -27,6 +27,9 @@ #include #include +#ifdef ENABEL_TPL +#include +#endif /* ENABLE_TPL */ #include "empathy-contact.h" #include "empathy-utils.h" @@ -408,6 +411,33 @@ empathy_contact_new (TpContact *tp_contact) NULL); } +#ifdef ENABLE_TPL +EmpathyContact * +empathy_contact_from_tpl_contact (TpAccount *account, + TplContact *tpl_contact) +{ + EmpathyContact *retval; + gboolean is_user; + + g_return_val_if_fail (TPL_IS_CONTACT (tpl_contact), NULL); + + is_user = (TPL_CONTACT_USER == tpl_contact_get_contact_type (tpl_contact)); + + retval = g_object_new (EMPATHY_TYPE_CONTACT, + "id", tpl_contact_get_alias (tpl_contact), + "name", tpl_contact_get_identifier (tpl_contact), + "account", account, + "is-user", is_user, + NULL); + + if (!EMP_STR_EMPTY (tpl_contact_get_avatar_token (tpl_contact))) + empathy_contact_load_avatar_cache (retval, + tpl_contact_get_avatar_token (tpl_contact)); + + return retval; +} +#endif /* ENABLE_TPL */ + EmpathyContact * empathy_contact_new_for_log (TpAccount *account, const gchar *id, diff --git a/libempathy/empathy-contact.h b/libempathy/empathy-contact.h index 2dd6bc0fb..231f95b9d 100644 --- a/libempathy/empathy-contact.h +++ b/libempathy/empathy-contact.h @@ -26,6 +26,9 @@ #include #include +#ifdef ENABLE_TPL +#include +#endif /* ENABLE_TPL */ G_BEGIN_DECLS @@ -70,6 +73,10 @@ typedef enum { GType empathy_contact_get_type (void) G_GNUC_CONST; EmpathyContact * empathy_contact_new (TpContact *tp_contact); +#ifdef ENABLE_TPL +EmpathyContact * empathy_contact_from_tpl_contact (TpAccount *account, + TplContact *tpl_contact); +#endif /* ENABLE_TPL */ EmpathyContact * empathy_contact_new_for_log (TpAccount *account, const gchar *id, const gchar *name, gboolean is_user); TpContact * empathy_contact_get_tp_contact (EmpathyContact *contact); diff --git a/libempathy/empathy-log-manager.h b/libempathy/empathy-log-manager.h index 25f1b5fcd..4e4097dc7 100644 --- a/libempathy/empathy-log-manager.h +++ b/libempathy/empathy-log-manager.h @@ -24,6 +24,9 @@ #ifndef __EMPATHY_LOG_MANAGER_H__ #define __EMPATHY_LOG_MANAGER_H__ +#include +#ifndef ENABLE_TPL + #include #include "empathy-message.h" @@ -100,4 +103,5 @@ void empathy_log_manager_observe (EmpathyLogManager *log_manager, G_END_DECLS +#endif /* ENABLE_TPL */ #endif /* __EMPATHY_LOG_MANAGER_H__ */ diff --git a/libempathy/empathy-log-store-empathy.h b/libempathy/empathy-log-store-empathy.h index e77076a5b..3b26d2ccf 100644 --- a/libempathy/empathy-log-store-empathy.h +++ b/libempathy/empathy-log-store-empathy.h @@ -25,6 +25,9 @@ #ifndef __EMPATHY_LOG_STORE_EMPATHY_H__ #define __EMPATHY_LOG_STORE_EMPATHY_H__ +#include +#ifndef ENABLE_TPL + #include G_BEGIN_DECLS @@ -63,4 +66,5 @@ 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.h b/libempathy/empathy-log-store.h index 94bc87386..185e38c93 100644 --- a/libempathy/empathy-log-store.h +++ b/libempathy/empathy-log-store.h @@ -23,6 +23,9 @@ #ifndef __EMPATHY_LOG_STORE_H__ #define __EMPATHY_LOG_STORE_H__ +#include +#ifndef ENABLE_TPL + #include #include @@ -98,4 +101,5 @@ GList *empathy_log_store_get_filtered_messages (EmpathyLogStore *self, G_END_DECLS +#endif /* ENABLE_TPL */ #endif /* __EMPATHY_LOG_STORE_H__ */ diff --git a/libempathy/empathy-message.c b/libempathy/empathy-message.c index 0fe457886..a46d7d9a7 100644 --- a/libempathy/empathy-message.c +++ b/libempathy/empathy-message.c @@ -27,6 +27,14 @@ #include #include +#ifdef ENABLE_TPL +#include +#include + +#include +#include +#include +#endif /* ENABLE_TPL */ #include "empathy-message.h" #include "empathy-utils.h" @@ -252,6 +260,71 @@ empathy_message_new (const gchar *body) NULL); } +#ifdef ENABLE_TPL +EmpathyMessage * +empathy_message_from_tpl_log_entry (TplLogEntry *logentry) +{ + EmpathyMessage *retval = NULL; + TpAccountManager *acc_man = NULL; + TpAccount *account = NULL; + TplContact *receiver = NULL; + TplContact *sender = NULL; + gchar *body= NULL; + + g_return_val_if_fail (TPL_IS_LOG_ENTRY (logentry), NULL); + + acc_man = tp_account_manager_dup (); + /* FIXME Currently Empathy shows in the log viewer only valid accounts, so it + * won't be selected any non-existing (ie removed) account. + * When #610455 will be fixed, calling tp_account_manager_ensure_account () + * might add a not existing account to the AM. tp_account_new () probably + * will be the best way to handle it. + * Note: When creating an EmpathyContact from a TplContact instance, the + * TpAccount is passed *only* to let EmpathyContact be able to retrieve the + * avatar (contact_get_avatar_filename () need a TpAccount). + * If the way EmpathyContact stores the avatar is changes, it might not be + * needed anymore any TpAccount passing and the following call will be + * useless */ + account = tp_account_manager_ensure_account (acc_man, + tpl_log_entry_get_account_path (logentry)); + g_object_unref (acc_man); + + /* TODO Currently only TplLogEntryText exists as subclass of TplLogEntry, in + * future more TplLogEntry will exist and EmpathyMessage should probably + * be enhanced to support other types of log entries (ie TplLogEntryCall). + * + * For now we just check (simply) that we are dealing with the only supported type, + * then there will be a if/then/else or switch handling all the supported + * cases. + */ + if (!TPL_IS_LOG_ENTRY_TEXT (logentry)) + return NULL; + + body = g_strdup (tpl_log_entry_text_get_message ( + TPL_LOG_ENTRY_TEXT (logentry))); + receiver = tpl_log_entry_text_get_receiver (TPL_LOG_ENTRY_TEXT (logentry)); + sender = tpl_log_entry_text_get_sender (TPL_LOG_ENTRY_TEXT (logentry)); + + retval = empathy_message_new (body); + if (receiver != NULL) + empathy_message_set_receiver (retval, + empathy_contact_from_tpl_contact (account, receiver)); + if (sender != NULL) + empathy_message_set_sender (retval, + empathy_contact_from_tpl_contact (account, sender)); + + empathy_message_set_timestamp (retval, + tpl_log_entry_get_timestamp (logentry)); + empathy_message_set_id (retval, + tpl_log_entry_text_get_log_id (TPL_LOG_ENTRY_TEXT (logentry))); + empathy_message_set_is_backlog (retval, FALSE); + + g_free (body); + + return retval; +} +#endif /* ENABLE_TPL */ + TpChannelTextMessageType empathy_message_get_tptype (EmpathyMessage *message) { @@ -593,7 +666,12 @@ empathy_message_equal (EmpathyMessage *message1, EmpathyMessage *message2) priv1 = GET_PRIV (message1); priv2 = GET_PRIV (message2); +#ifdef ENABLE_TPL + if (priv1->timestamp == priv2->timestamp && + !tp_strdiff (priv1->body, priv2->body)) { +#else if (priv1->id == priv2->id && !tp_strdiff (priv1->body, priv2->body)) { +#endif /* ENABLE_TPL */ return TRUE; } diff --git a/libempathy/empathy-message.h b/libempathy/empathy-message.h index 512869373..d8d0c9603 100644 --- a/libempathy/empathy-message.h +++ b/libempathy/empathy-message.h @@ -26,6 +26,9 @@ #define __EMPATHY_MESSAGE_H__ #include +#ifdef ENABLE_TPL +#include +#endif #include "empathy-contact.h" #include "empathy-time.h" @@ -53,6 +56,9 @@ struct _EmpathyMessageClass { GType empathy_message_get_type (void) G_GNUC_CONST; EmpathyMessage * empathy_message_new (const gchar *body); +#ifdef ENABLE_TPL +EmpathyMessage * empathy_message_from_tpl_log_entry (TplLogEntry *logentry); +#endif /* ENABLE_TPL */ TpChannelTextMessageType empathy_message_get_tptype (EmpathyMessage *message); void empathy_message_set_tptype (EmpathyMessage *message, TpChannelTextMessageType type); -- cgit v1.2.3