]> git.0d.be Git - empathy.git/blobdiff - libempathy-gtk/empathy-individual-store.c
Merge branch 'gnome-3-8'
[empathy.git] / libempathy-gtk / empathy-individual-store.c
index b475b7c30cb7d0c69c2b499e3a62256ce24656cf..9b685ee5f7dbba3547d31e579d879682c947c924 100644 (file)
  */
 
 #include "config.h"
+#include "empathy-individual-store.h"
 
-#include <string.h>
-
-#include <glib.h>
 #include <glib/gi18n-lib.h>
-#include <gtk/gtk.h>
-
-#include <folks/folks.h>
-#include <folks/folks-telepathy.h>
-#include <telepathy-glib/util.h>
+#include <tp-account-widgets/tpaw-utils.h>
 
-#include <libempathy/empathy-utils.h>
-#include <libempathy/empathy-enum-types.h>
-
-#include "empathy-individual-store.h"
-#include "empathy-ui-utils.h"
 #include "empathy-gtk-enum-types.h"
+#include "empathy-ui-utils.h"
+#include "empathy-utils.h"
 
 #define DEBUG_FLAG EMPATHY_DEBUG_CONTACT
-#include <libempathy/empathy-debug.h>
+#include "empathy-debug.h"
 
 /* Active users are those which have recently changed state
  * (e.g. online, offline or from normal to a busy state).
@@ -100,48 +91,6 @@ static void individual_store_contact_update (EmpathyIndividualStore *self,
 G_DEFINE_TYPE (EmpathyIndividualStore, empathy_individual_store,
     GTK_TYPE_TREE_STORE);
 
-static const gchar * const *
-individual_get_client_types (FolksIndividual *individual)
-{
-  GeeSet *personas;
-  GeeIterator *iter;
-  const gchar * const *types = NULL;
-  FolksPresenceType presence_type = FOLKS_PRESENCE_TYPE_UNSET;
-
-  personas = folks_individual_get_personas (individual);
-  iter = gee_iterable_iterator (GEE_ITERABLE (personas));
-  while (gee_iterator_next (iter))
-    {
-      FolksPresenceDetails *presence;
-      FolksPersona *persona = gee_iterator_get (iter);
-
-      /* We only want personas which have presence and a TpContact */
-      if (!empathy_folks_persona_is_interesting (persona))
-        goto while_finish;
-
-      presence = FOLKS_PRESENCE_DETAILS (persona);
-
-      if (folks_presence_details_typecmp (
-              folks_presence_details_get_presence_type (presence),
-              presence_type) > 0)
-        {
-          TpContact *tp_contact;
-
-          presence_type = folks_presence_details_get_presence_type (presence);
-
-          tp_contact = tpf_persona_get_contact (TPF_PERSONA (persona));
-          if (tp_contact != NULL)
-            types = tp_contact_get_client_types (tp_contact);
-        }
-
-while_finish:
-      g_clear_object (&persona);
-    }
-  g_clear_object (&iter);
-
-  return types;
-}
-
 static void
 add_individual_to_store (GtkTreeStore *store,
     GtkTreeIter *iter,
@@ -156,7 +105,7 @@ add_individual_to_store (GtkTreeStore *store,
   empathy_individual_can_audio_video_call (individual, &can_audio_call,
       &can_video_call, NULL);
 
-  types = individual_get_client_types (individual);
+  types = empathy_individual_get_client_types (individual);
 
   gtk_tree_store_insert_with_values (store, iter, parent, 0,
       EMPATHY_INDIVIDUAL_STORE_COL_NAME,
@@ -251,8 +200,9 @@ individual_store_get_group (EmpathyIndividualStore *self,
     }
 }
 
-static GList *
-individual_store_find_contact (EmpathyIndividualStore *self,
+GList *
+/* (transfer full) free with empathy_individual_store_free_iters() */
+empathy_individual_store_find_contact (EmpathyIndividualStore *self,
     FolksIndividual *individual)
 {
   GQueue *row_refs_queue;
@@ -274,8 +224,8 @@ individual_store_find_contact (EmpathyIndividualStore *self,
   return iters_list;
 }
 
-static void
-free_iters (GList *iters)
+void
+empathy_individual_store_free_iters (GList *iters)
 {
   g_list_foreach (iters, (GFunc) gtk_tree_iter_free, NULL);
   g_list_free (iters);
@@ -334,7 +284,7 @@ empathy_individual_store_add_individual (EmpathyIndividualStore *self,
   GeeSet *group_set = NULL;
   gboolean grouped = FALSE;
 
-  if (EMP_STR_EMPTY (folks_alias_details_get_alias (
+  if (TPAW_STR_EMPTY (folks_alias_details_get_alias (
           FOLKS_ALIAS_DETAILS (individual))))
     return;
 
@@ -438,7 +388,7 @@ individual_store_contact_set_active (EmpathyIndividualStore *self,
 
   model = GTK_TREE_MODEL (self);
 
-  iters = individual_store_find_contact (self, individual);
+  iters = empathy_individual_store_find_contact (self, individual);
   for (l = iters; l; l = l->next)
     {
       GtkTreePath *path;
@@ -455,7 +405,7 @@ individual_store_contact_set_active (EmpathyIndividualStore *self,
         }
     }
 
-  free_iters (iters);
+  empathy_individual_store_free_iters (iters);
 }
 
 static void individual_store_contact_active_free (ShowActiveData *data);
@@ -558,16 +508,22 @@ individual_avatar_pixbuf_received_cb (FolksIndividual *individual,
 
   if (error != NULL)
     {
-      DEBUG ("failed to retrieve pixbuf for individual %s: %s",
-          folks_alias_details_get_alias (FOLKS_ALIAS_DETAILS (individual)),
-          error->message);
+      /* No need to display an error if the individal just doesn't have an
+       * avatar */
+      if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
+        {
+          DEBUG ("failed to retrieve pixbuf for individual %s: %s",
+              folks_alias_details_get_alias (FOLKS_ALIAS_DETAILS (individual)),
+              error->message);
+        }
+
       g_clear_error (&error);
     }
   else if (data->store != NULL)
     {
       GList *iters, *l;
 
-      iters = individual_store_find_contact (data->store, individual);
+      iters = empathy_individual_store_find_contact (data->store, individual);
       for (l = iters; l; l = l->next)
         {
           gtk_tree_store_set (GTK_TREE_STORE (data->store), l->data,
@@ -575,7 +531,7 @@ individual_avatar_pixbuf_received_cb (FolksIndividual *individual,
               -1);
         }
 
-      free_iters (iters);
+      empathy_individual_store_free_iters (iters);
     }
 
   /* Free things */
@@ -612,7 +568,7 @@ individual_store_contact_update (EmpathyIndividualStore *self,
 
   model = GTK_TREE_MODEL (self);
 
-  iters = individual_store_find_contact (self, individual);
+  iters = empathy_individual_store_find_contact (self, individual);
   if (!iters)
     {
       in_list = FALSE;
@@ -697,7 +653,7 @@ individual_store_contact_update (EmpathyIndividualStore *self,
       empathy_individual_can_audio_video_call (individual, &can_audio_call,
           &can_video_call, NULL);
 
-      types = individual_get_client_types (individual);
+      types = empathy_individual_get_client_types (individual);
 
       gtk_tree_store_set (GTK_TREE_STORE (self), l->data,
           EMPATHY_INDIVIDUAL_STORE_COL_ICON_STATUS, pixbuf_status,
@@ -740,7 +696,7 @@ individual_store_contact_update (EmpathyIndividualStore *self,
    * timeout removes the user from the contact list, really we
    * should remove the first timeout.
    */
-  free_iters (iters);
+  empathy_individual_store_free_iters (iters);
 }
 
 static void
@@ -773,9 +729,6 @@ individual_personas_changed_cb (FolksIndividual *individual,
 {
   GeeIterator *iter;
 
-  DEBUG ("Individual '%s' personas-changed.",
-      folks_individual_get_id (individual));
-
   iter = gee_iterable_iterator (GEE_ITERABLE (removed));
   /* FIXME: libfolks hasn't grown capabilities support yet, so we have to go
    * through the EmpathyContacts for them. */
@@ -1171,8 +1124,8 @@ individual_store_contact_sort (FolksIndividual *individual_a,
       g_assert (account_b != NULL);
 
       /* protocol */
-      ret_val = g_strcmp0 (tp_account_get_protocol (account_a),
-          tp_account_get_protocol (account_b));
+      ret_val = g_strcmp0 (tp_account_get_protocol_name (account_a),
+          tp_account_get_protocol_name (account_b));
 
       if (ret_val != 0)
         goto out;