]> git.0d.be Git - empathy.git/commitdiff
factor out empathy_individual_can_audio_video_call()
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Fri, 5 Aug 2011 11:13:31 +0000 (13:13 +0200)
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Tue, 18 Oct 2011 08:56:40 +0000 (10:56 +0200)
Also allow caller to get a ref on the EmpathyContact supporting audio/video.

https://bugzilla.gnome.org/show_bug.cgi?id=661981

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

index a499bf1cc2582b0012db06a60e48442f622b54ce..e7b859f98600acd16b3c666ab25c38b9e0112279 100644 (file)
@@ -105,55 +105,6 @@ static void individual_store_contact_update (EmpathyIndividualStore *self,
 G_DEFINE_TYPE (EmpathyIndividualStore, empathy_individual_store,
     GTK_TYPE_TREE_STORE);
 
-/* Calculate whether the Individual can do audio or video calls.
- * FIXME: We can remove this once libfolks has grown capabilities support
- * again: bgo#626179. */
-static void
-individual_can_audio_video_call (FolksIndividual *individual,
-    gboolean *can_audio_call,
-    gboolean *can_video_call)
-{
-  GeeSet *personas;
-  GeeIterator *iter;
-  gboolean can_audio = FALSE, can_video = FALSE;
-
-  personas = folks_individual_get_personas (individual);
-  iter = gee_iterable_iterator (GEE_ITERABLE (personas));
-  while (gee_iterator_next (iter))
-    {
-      FolksPersona *persona = gee_iterator_get (iter);
-      TpContact *tp_contact;
-
-      if (!empathy_folks_persona_is_interesting (persona))
-        goto while_finish;
-
-      tp_contact = tpf_persona_get_contact (TPF_PERSONA (persona));
-      if (tp_contact != NULL)
-        {
-          EmpathyContact *contact;
-
-          contact = empathy_contact_dup_from_tp_contact (tp_contact);
-          empathy_contact_set_persona (contact, persona);
-
-          can_audio = can_audio || empathy_contact_get_capabilities (contact) &
-              EMPATHY_CAPABILITIES_AUDIO;
-          can_video = can_video || empathy_contact_get_capabilities (contact) &
-              EMPATHY_CAPABILITIES_VIDEO;
-
-          g_object_unref (contact);
-        }
-while_finish:
-      g_clear_object (&persona);
-
-      if (can_audio && can_video)
-        break;
-    }
-  g_clear_object (&iter);
-
-  *can_audio_call = can_audio;
-  *can_video_call = can_video;
-}
-
 static const gchar * const *
 individual_get_client_types (FolksIndividual *individual)
 {
@@ -207,8 +158,8 @@ add_individual_to_store (GtkTreeStore *self,
   const gchar * const *types;
   GQueue *queue;
 
-  individual_can_audio_video_call (individual, &can_audio_call,
-      &can_video_call);
+  empathy_individual_can_audio_video_call (individual, &can_audio_call,
+      &can_video_call, NULL);
 
   types = individual_get_client_types (individual);
 
@@ -770,8 +721,8 @@ individual_store_contact_update (EmpathyIndividualStore *self,
       gboolean can_audio_call, can_video_call;
       const gchar * const *types;
 
-      individual_can_audio_video_call (individual, &can_audio_call,
-          &can_video_call);
+      empathy_individual_can_audio_video_call (individual, &can_audio_call,
+          &can_video_call, NULL);
 
       types = individual_get_client_types (individual);
 
index 9eec82e74e99db2354236bb445ebfb65c9f6c47d..c4c2780acde91e60fd65cfc88225d7aeb58a7c04 100644 (file)
@@ -1090,3 +1090,61 @@ out:
   g_clear_object (&persona_store);
   return retval;
 }
+
+/* Calculate whether the Individual can do audio or video calls.
+ * FIXME: We can remove this once libfolks has grown capabilities support
+ * again: bgo#626179. */
+void
+empathy_individual_can_audio_video_call (FolksIndividual *individual,
+    gboolean *can_audio_call,
+    gboolean *can_video_call,
+    EmpathyContact **out_contact)
+{
+  GeeSet *personas;
+  GeeIterator *iter;
+  gboolean can_audio = FALSE, can_video = FALSE;
+
+  personas = folks_individual_get_personas (individual);
+  iter = gee_iterable_iterator (GEE_ITERABLE (personas));
+  while (gee_iterator_next (iter))
+    {
+      FolksPersona *persona = gee_iterator_get (iter);
+      TpContact *tp_contact;
+
+      if (!empathy_folks_persona_is_interesting (persona))
+        goto while_finish;
+
+      tp_contact = tpf_persona_get_contact (TPF_PERSONA (persona));
+      if (tp_contact != NULL)
+        {
+          EmpathyContact *contact;
+
+          contact = empathy_contact_dup_from_tp_contact (tp_contact);
+          empathy_contact_set_persona (contact, persona);
+
+          can_audio = can_audio || empathy_contact_get_capabilities (contact) &
+              EMPATHY_CAPABILITIES_AUDIO;
+          can_video = can_video || empathy_contact_get_capabilities (contact) &
+              EMPATHY_CAPABILITIES_VIDEO;
+
+          if (out_contact != NULL)
+            *out_contact = g_object_ref (contact);
+
+          g_object_unref (contact);
+        }
+
+while_finish:
+      g_clear_object (&persona);
+
+      if (can_audio && can_video)
+        break;
+    }
+
+  g_clear_object (&iter);
+
+  if (can_audio_call != NULL)
+    *can_audio_call = can_audio;
+
+  if (can_video_call != NULL)
+    *can_video_call = can_video;
+}
index ed603a80f2f5c680866230cc58760476924aaa09..4983c89a64f2b9f52e1a6b10e5e68d17ce705580 100644 (file)
@@ -113,6 +113,11 @@ gboolean empathy_account_has_uri_scheme_tel (TpAccount *account);
 TpContact * empathy_get_tp_contact_for_individual (FolksIndividual *individual,
     TpConnection *conn);
 
+void empathy_individual_can_audio_video_call (FolksIndividual *individual,
+    gboolean *can_audio_call,
+    gboolean *can_video_call,
+    EmpathyContact **out_contact);
+
 /* Copied from wocky/wocky-utils.h */
 
 #define empathy_implement_finish_void(source, tag) \