]> git.0d.be Git - empathy.git/commitdiff
Use Folks to check if a TpConnection can add personas.
authorTravis Reitter <travis.reitter@collabora.co.uk>
Tue, 12 Oct 2010 16:45:03 +0000 (09:45 -0700)
committerTravis Reitter <travis.reitter@collabora.co.uk>
Fri, 15 Oct 2010 21:14:45 +0000 (14:14 -0700)
Helps bgo#625969.

libempathy-gtk/empathy-individual-dialogs.c
libempathy/empathy-utils.c
libempathy/empathy-utils.h

index edfb3fd48f222144c5fa4d052dbf26f31216d1c7..85ed7d1d473160e62d5f1b9fa2b9a02ca356903f 100644 (file)
@@ -56,8 +56,7 @@ can_add_contact_to_account (TpAccount *account,
     return FALSE;
 
   individual_manager = empathy_individual_manager_dup_singleton ();
-  result = empathy_individual_manager_get_flags_for_connection (
-    individual_manager, connection) & EMPATHY_INDIVIDUAL_MANAGER_CAN_ADD;
+  result = empathy_connection_can_add_personas (connection);
   g_object_unref (individual_manager);
 
   return result;
index c479f99f38deb99a3de529cca70e4cffa2231631..e6dc34303e24e687c832510f53888c342c417e6c 100644 (file)
@@ -770,6 +770,58 @@ tp_channel_group_change_reason_from_folks_groups_change_reason (
   return (TpChannelGroupChangeReason) reason;
 }
 
+TpfPersonaStore *
+empathy_get_persona_store_for_connection (TpConnection *connection)
+{
+  FolksBackendStore *backend_store;
+  FolksBackend *backend;
+  TpfPersonaStore *result = NULL;
+
+  backend_store = folks_backend_store_dup ();
+  backend = folks_backend_store_get_backend_by_name (backend_store,
+      "telepathy");
+  if (backend != NULL)
+    {
+      GHashTable *stores_hash;
+      GList *stores, *l;
+
+      stores_hash = folks_backend_get_persona_stores (backend);
+      stores = g_hash_table_get_values (stores_hash);
+      for (l = stores; l != NULL && result == NULL; l = l->next)
+        {
+          TpfPersonaStore *persona_store = TPF_PERSONA_STORE (l->data);
+          TpAccount *account;
+          TpConnection *conn_cur;
+
+          account = tpf_persona_store_get_account (persona_store);
+          conn_cur = tp_account_get_connection (account);
+          if (conn_cur == connection)
+            result = persona_store;
+        }
+
+      g_list_free (stores);
+    }
+
+  g_object_unref (backend);
+  g_object_unref (backend_store);
+
+  return result;
+}
+
+gboolean
+empathy_connection_can_add_personas (TpConnection *connection)
+{
+  FolksPersonaStore *persona_store;
+
+  g_return_val_if_fail (TP_IS_CONNECTION (connection), FALSE);
+
+  persona_store = FOLKS_PERSONA_STORE (
+      empathy_get_persona_store_for_connection (connection));
+
+  return (folks_persona_store_get_can_add_personas (persona_store) ==
+      FOLKS_MAYBE_BOOL_TRUE);
+}
+
 gchar *
 empathy_get_x509_certificate_hostname (gnutls_x509_crt_t cert)
 {
index ca184f589b1885ab039487edf26b3df0ef7097d6..7b9f897fb16fcc4071ea488bdbef6af72f5f259a 100644 (file)
@@ -34,6 +34,7 @@
 #include <libxml/parser.h>
 #include <libxml/tree.h>
 #include <folks/folks.h>
+#include <folks/folks-telepathy.h>
 #include <telepathy-glib/account-manager.h>
 
 #include "empathy-contact.h"
@@ -99,6 +100,8 @@ TpConnectionPresenceType empathy_folks_presence_type_to_tp (FolksPresenceType ty
 gboolean empathy_folks_individual_contains_contact (FolksIndividual *individual);
 EmpathyContact * empathy_contact_dup_from_folks_individual (FolksIndividual *individual);
 TpChannelGroupChangeReason tp_channel_group_change_reason_from_folks_groups_change_reason (FolksGroupableChangeReason reason);
+TpfPersonaStore * empathy_get_persona_store_for_connection (TpConnection *connection);
+gboolean empathy_connection_can_add_personas (TpConnection *connection);
 
 gchar * empathy_get_x509_certificate_hostname (gnutls_x509_crt_t cert);