2007-07-13 Xavier Claessens <xclaesse@gmail.com>
* libempathy/empathy-tp-contact-list.c: Fix avatar request queue.
svn path=/trunk/; revision=186
+2007-07-13 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/empathy-tp-contact-list.c: Fix avatar request queue.
+
2007-07-13 Xavier Claessens <xclaesse@gmail.com>
* libempathy-gtk/empathy-new-chatroom-dialog.c:
2007-07-13 Xavier Claessens <xclaesse@gmail.com>
* libempathy-gtk/empathy-new-chatroom-dialog.c:
DBusGProxy *aliasing_iface;
DBusGProxy *avatars_iface;
DBusGProxy *presence_iface;
DBusGProxy *aliasing_iface;
DBusGProxy *avatars_iface;
DBusGProxy *presence_iface;
-
- GList *avatar_requests_queue;
GArray *handles);
static void tp_contact_list_request_avatar (EmpathyTpContactList *list,
guint handle);
GArray *handles);
static void tp_contact_list_request_avatar (EmpathyTpContactList *list,
guint handle);
-static void tp_contact_list_start_avatar_requests (EmpathyTpContactList *list);
+static void tp_contact_list_start_avatar_requests (void);
static void tp_contact_list_avatar_update_cb (DBusGProxy *proxy,
guint handle,
gchar *new_token,
static void tp_contact_list_avatar_update_cb (DBusGProxy *proxy,
guint handle,
gchar *new_token,
-static guint signals[LAST_SIGNAL];
-static guint n_avatar_requests = 0;
+static guint signals[LAST_SIGNAL];
+GList *avatar_requests_queue = NULL;
+guint n_avatar_requests = 0;
G_DEFINE_TYPE_WITH_CODE (EmpathyTpContactList, empathy_tp_contact_list, G_TYPE_OBJECT,
G_IMPLEMENT_INTERFACE (EMPATHY_TYPE_CONTACT_LIST,
G_DEFINE_TYPE_WITH_CODE (EmpathyTpContactList, empathy_tp_contact_list, G_TYPE_OBJECT,
G_IMPLEMENT_INTERFACE (EMPATHY_TYPE_CONTACT_LIST,
tp_contact_list_request_avatar (EmpathyTpContactList *list,
guint handle)
{
tp_contact_list_request_avatar (EmpathyTpContactList *list,
guint handle)
{
- EmpathyTpContactListPriv *priv;
+ EmpathyTpContactListPriv *priv;
+ TpContactListAvatarRequestData *data;
priv = GET_PRIV (list);
/* We queue avatar requests to not send too many dbus async
* calls at once. If we don't we reach the dbus's limit of
* pending calls */
priv = GET_PRIV (list);
/* We queue avatar requests to not send too many dbus async
* calls at once. If we don't we reach the dbus's limit of
* pending calls */
- priv->avatar_requests_queue = g_list_append (priv->avatar_requests_queue,
- GUINT_TO_POINTER (handle));
- tp_contact_list_start_avatar_requests (list);
+ data = g_slice_new (TpContactListAvatarRequestData);
+ data->list = g_object_ref (list);
+ data->handle = handle;
+ avatar_requests_queue = g_list_append (avatar_requests_queue, data);
+ tp_contact_list_start_avatar_requests ();
-tp_contact_list_start_avatar_requests (EmpathyTpContactList *list)
+tp_contact_list_start_avatar_requests (void)
- EmpathyTpContactListPriv *priv;
- TpContactListAvatarRequestData *data;
-
- priv = GET_PRIV (list);
-
- empathy_debug (DEBUG_DOMAIN, "Start avatar requests, queue size: %d",
+ empathy_debug (DEBUG_DOMAIN, "Start avatar requests, pending calls: %d",
- while (n_avatar_requests < MAX_AVATAR_REQUESTS &&
- priv->avatar_requests_queue) {
- data = g_slice_new (TpContactListAvatarRequestData);
- data->list = list;
- data->handle = GPOINTER_TO_UINT (priv->avatar_requests_queue->data);
+ while (n_avatar_requests < MAX_AVATAR_REQUESTS && avatar_requests_queue) {
+ EmpathyTpContactListPriv *priv;
+ TpContactListAvatarRequestData *data;
+
+ data = avatar_requests_queue->data;
+ priv = GET_PRIV (data->list);
- priv->avatar_requests_queue = g_list_remove (priv->avatar_requests_queue,
- priv->avatar_requests_queue->data);
+ avatar_requests_queue = g_list_delete_link (avatar_requests_queue,
+ avatar_requests_queue);
empathy_debug (DEBUG_DOMAIN, "Calling RequestAvatar async");
tp_conn_iface_avatars_request_avatar_async (priv->avatars_iface,
empathy_debug (DEBUG_DOMAIN, "Calling RequestAvatar async");
tp_conn_iface_avatars_request_avatar_async (priv->avatars_iface,
- tp_contact_list_start_avatar_requests (data->list);
+ tp_contact_list_start_avatar_requests ();
g_object_unref (contact);
g_object_unref (contact);
+ g_object_unref (data->list);
g_slice_free (TpContactListAvatarRequestData, data);
}
g_slice_free (TpContactListAvatarRequestData, data);
}