]> git.0d.be Git - empathy.git/blobdiff - libempathy/empathy-contact.c
Center the 'smiley images' inside the menu items
[empathy.git] / libempathy / empathy-contact.c
index b741210dd0be9bd19c503bf24db11a66369f7202..d2284806f639c48179546d0dcd73ca3f4eb56c2f 100644 (file)
  */
 
 #include "config.h"
+#include "empathy-contact.h"
 
-#include <string.h>
-
-#include <glib/gi18n-lib.h>
-
-#include <telepathy-glib/account-manager.h>
-#include <telepathy-glib/interfaces.h>
-#include <telepathy-glib/util.h>
-
-#include <folks/folks.h>
-#include <folks/folks-telepathy.h>
+#include <tp-account-widgets/tpaw-utils.h>
 
 #ifdef HAVE_GEOCODE
 #include <geocode-glib/geocode-glib.h>
 #endif
 
-#include "empathy-contact.h"
-#include "empathy-camera-monitor.h"
-#include "empathy-individual-manager.h"
+#include "empathy-location.h"
 #include "empathy-utils.h"
 #include "empathy-enum-types.h"
-#include "empathy-location.h"
 
 #define DEBUG_FLAG EMPATHY_DEBUG_CONTACT
 #include "empathy-debug.h"
@@ -59,7 +48,6 @@ typedef struct {
   guint handle;
   EmpathyCapabilities capabilities;
   gboolean is_user;
-  guint hash;
   /* Location is composed of string keys and GValues.
    * Example: a "city" key would have "Helsinki" as string GValue,
    *          a "latitude" would have 65.0 as double GValue.
@@ -337,7 +325,7 @@ empathy_contact_class_init (EmpathyContactClass *class)
         "Contact presence",
         "Presence of contact",
         TP_CONNECTION_PRESENCE_TYPE_UNSET,
-        NUM_TP_CONNECTION_PRESENCE_TYPES,
+        TP_NUM_CONNECTION_PRESENCE_TYPES,
         TP_CONNECTION_PRESENCE_TYPE_UNSET,
         G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
@@ -431,6 +419,7 @@ contact_finalize (GObject *object)
 
   g_clear_object (&priv->groups);
   g_free (priv->alias);
+  g_free (priv->logged_alias);
   g_free (priv->id);
   g_strfreev (priv->client_types);
 
@@ -475,7 +464,7 @@ empathy_contact_set_id (EmpathyContact *contact,
       priv->id = g_strdup (id);
 
       g_object_notify (G_OBJECT (contact), "id");
-      if (EMP_STR_EMPTY (priv->alias))
+      if (TPAW_STR_EMPTY (priv->alias))
           g_object_notify (G_OBJECT (contact), "alias");
     }
 
@@ -690,31 +679,36 @@ contact_is_tpl_entity (gpointer key,
 }
 
 static void
-get_contacts_cb (TpConnection *connection,
-    guint n_contacts,
-    TpContact * const *contacts,
-    const gchar * const *requested_ids,
-    GHashTable *failed_id_errors,
-    const GError *error,
-    gpointer user_data,
-    GObject *weak_object)
-{
-  EmpathyContact *self = (EmpathyContact *) weak_object;
-  EmpathyContactPriv *priv = GET_PRIV (self);
-  TpContact *tp_contact;
+get_contacts_cb (GObject *source,
+    GAsyncResult *result,
+    gpointer user_data)
+{
+  TpWeakRef *wr = user_data;
+  EmpathyContactPriv *priv;
+  EmpathyContact *self;
 
-  if (n_contacts != 1)
-    return;
+  self = tp_weak_ref_dup_object (wr);
+  if (self == NULL)
+    goto out;
 
-  tp_contact = contacts[0];
+  priv = GET_PRIV (self);
 
   g_return_if_fail (priv->tp_contact == NULL);
-  priv->tp_contact = g_object_ref (tp_contact);
+
+  priv->tp_contact = tp_connection_dup_contact_by_id_finish (
+      TP_CONNECTION (source), result, NULL);
+  if (priv->tp_contact == NULL)
+    goto out;
+
   g_object_notify (G_OBJECT (self), "tp-contact");
 
   /* Update capabilities now that we have a TpContact */
   set_capabilities_from_tp_caps (self,
-      tp_contact_get_capabilities (tp_contact));
+      tp_contact_get_capabilities (priv->tp_contact));
+
+out:
+  g_clear_object (&self);
+  tp_weak_ref_destroy (wr);
 }
 
 EmpathyContact *
@@ -770,13 +764,13 @@ empathy_contact_from_tpl_contact (TpAccount *account,
           TpContactFeature features[] = { TP_CONTACT_FEATURE_CAPABILITIES };
           conn = tp_account_get_connection (account);
 
-          tp_connection_get_contacts_by_id (conn, 1, &id,
+          tp_connection_dup_contact_by_id_async (conn, id,
               G_N_ELEMENTS (features), features, get_contacts_cb,
-              NULL, NULL, G_OBJECT (retval));
+              tp_weak_ref_new (retval, NULL, NULL));
         }
     }
 
-  if (!EMP_STR_EMPTY (tpl_entity_get_avatar_token (tpl_entity)))
+  if (!TPAW_STR_EMPTY (tpl_entity_get_avatar_token (tpl_entity)))
     contact_load_avatar_cache (retval,
         tpl_entity_get_avatar_token (tpl_entity));
 
@@ -820,12 +814,12 @@ empathy_contact_get_alias (EmpathyContact *contact)
 
   priv = GET_PRIV (contact);
 
-  if (!EMP_STR_EMPTY (priv->alias))
+  if (!TPAW_STR_EMPTY (priv->alias))
     alias = priv->alias;
   else if (priv->tp_contact != NULL)
     alias = tp_contact_get_alias (priv->tp_contact);
 
-  if (!EMP_STR_EMPTY (alias))
+  if (!TPAW_STR_EMPTY (alias))
     return alias;
   else
     return empathy_contact_get_id (contact);
@@ -922,7 +916,7 @@ empathy_contact_change_group (EmpathyContact *contact, const gchar *group,
   if (priv->groups == NULL)
     {
       priv->groups = gee_hash_set_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup,
-          g_free, g_str_hash, g_str_equal);
+          g_free, NULL, NULL, NULL, NULL, NULL, NULL);
     }
 
   gee_collection_add (GEE_COLLECTION (priv->groups), group);
@@ -1193,7 +1187,7 @@ empathy_contact_get_status (EmpathyContact *contact)
   g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), "");
 
   message = empathy_contact_get_presence_message (contact);
-  if (!EMP_STR_EMPTY (message))
+  if (!TPAW_STR_EMPTY (message))
     return message;
 
   return empathy_presence_get_default_message (
@@ -1338,7 +1332,7 @@ contact_get_avatar_filename (EmpathyContact *contact,
   gchar *avatar_file;
   gchar *token_escaped;
 
-  if (EMP_STR_EMPTY (empathy_contact_get_id (contact)))
+  if (TPAW_STR_EMPTY (empathy_contact_get_id (contact)))
     return NULL;
 
   token_escaped = tp_escape_as_identifier (token);
@@ -1347,8 +1341,8 @@ contact_get_avatar_filename (EmpathyContact *contact,
   avatar_path = g_build_filename (g_get_user_cache_dir (),
       "telepathy",
       "avatars",
-      tp_account_get_connection_manager (account),
-      tp_account_get_protocol (account),
+      tp_account_get_cm_name (account),
+      tp_account_get_protocol_name (account),
       NULL);
   g_mkdir_with_parents (avatar_path, 0700);
 
@@ -1371,7 +1365,7 @@ contact_load_avatar_cache (EmpathyContact *contact,
   GError *error = NULL;
 
   g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), FALSE);
-  g_return_val_if_fail (!EMP_STR_EMPTY (token), FALSE);
+  g_return_val_if_fail (!TPAW_STR_EMPTY (token), FALSE);
 
   /* Load the avatar from file if it exists */
   filename = contact_get_avatar_filename (contact, token);
@@ -1622,33 +1616,35 @@ geocode_cb (GObject *source,
   EmpathyContact *contact = user_data;
   EmpathyContactPriv *priv = GET_PRIV (contact);
   GError *error = NULL;
+  GList *res;
+  GeocodeLocation *loc;
   GHashTable *new_location;
   GHashTable *resolved = NULL;
-  gdouble latitude, longitude;
 
   if (priv->location == NULL)
     goto out;
 
-  resolved = geocode_object_resolve_finish (GEOCODE_OBJECT (source), result,
+  res = geocode_forward_search_finish (GEOCODE_FORWARD (source), result,
       &error);
 
-  if (resolved == NULL)
+  if (res == NULL)
     {
       DEBUG ("Failed to resolve geocode: %s", error->message);
       g_error_free (error);
       goto out;
     }
 
-  if (!geocode_object_get_coords (resolved, &longitude, &latitude))
-    goto out;
+  loc = res->data;
 
   new_location = tp_asv_new (
-      EMPATHY_LOCATION_LAT, G_TYPE_DOUBLE, latitude,
-      EMPATHY_LOCATION_LON, G_TYPE_DOUBLE, longitude,
+      EMPATHY_LOCATION_LAT, G_TYPE_DOUBLE, geocode_location_get_latitude (loc),
+      EMPATHY_LOCATION_LON, G_TYPE_DOUBLE, geocode_location_get_longitude (loc),
       NULL);
 
-  DEBUG ("\t - Latitude: %f", latitude);
-  DEBUG ("\t - Longitude: %f", longitude);
+  DEBUG ("\t - Latitude: %f", geocode_location_get_latitude (loc));
+  DEBUG ("\t - Longitude: %f", geocode_location_get_longitude (loc));
+
+  g_list_free_full (res, g_object_unref);
 
   /* Copy remaning fields. LAT and LON were not defined so we won't overwrite
    * the values we just set. */
@@ -1668,7 +1664,7 @@ out:
 static void
 update_geocode (EmpathyContact *contact)
 {
-  GeocodeObject *geocode;
+  GeocodeForward *geocode;
   GHashTable *location;
 
   location = empathy_contact_get_location (contact);
@@ -1681,11 +1677,11 @@ update_geocode (EmpathyContact *contact)
       g_hash_table_lookup (location, EMPATHY_LOCATION_LON) != NULL)
     return;
 
-  geocode = geocode_object_new_for_params (location);
+  geocode = geocode_forward_new_for_params (location);
   if (geocode == NULL)
     return;
 
-  geocode_object_resolve_async (geocode, NULL, geocode_cb,
+  geocode_forward_search_async (geocode, NULL, geocode_cb,
       g_object_ref (contact));
 
   g_object_unref (geocode);
@@ -1696,8 +1692,6 @@ static EmpathyCapabilities
 tp_caps_to_capabilities (TpCapabilities *caps)
 {
   EmpathyCapabilities capabilities = 0;
-  guint i;
-  GPtrArray *classes;
 
   if (tp_capabilities_supports_file_transfer (caps))
     capabilities |= EMPATHY_CAPABILITIES_FT;
@@ -1716,36 +1710,8 @@ tp_caps_to_capabilities (TpCapabilities *caps)
       capabilities |= EMPATHY_CAPABILITIES_AUDIO;
     }
 
-  classes = tp_capabilities_get_channel_classes (caps);
-
-  for (i = 0; i < classes->len; i++)
-    {
-      GValueArray *class_struct;
-      GHashTable *fixed_prop;
-      GStrv allowed_prop;
-      TpHandleType handle_type;
-      const gchar *chan_type;
-
-      class_struct = g_ptr_array_index (classes, i);
-      tp_value_array_unpack (class_struct, 2,
-          &fixed_prop,
-          &allowed_prop);
-
-      handle_type = tp_asv_get_uint32 (fixed_prop,
-          TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, NULL);
-      if (handle_type != TP_HANDLE_TYPE_CONTACT)
-        continue;
-
-      chan_type = tp_asv_get_string (fixed_prop,
-          TP_PROP_CHANNEL_CHANNEL_TYPE);
-
-      if (!tp_strdiff (chan_type, TP_IFACE_CHANNEL_TYPE_TEXT))
-        {
-          if (tp_asv_get_boolean (fixed_prop,
-                TP_PROP_CHANNEL_INTERFACE_SMS_SMS_CHANNEL, NULL))
-            capabilities |= EMPATHY_CAPABILITIES_SMS;
-        }
-    }
+  if (tp_capabilities_supports_sms (caps))
+    capabilities |= EMPATHY_CAPABILITIES_SMS;
 
   return capabilities;
 }