--- a/libpurple/protocols/facebook/api.c Tue Aug 25 16:48:44 2015 -0400
+++ b/libpurple/protocols/facebook/api.c Tue Aug 25 20:02:11 2015 -0400
@@ -775,7 +775,7 @@
case FB_API_QUERY_CONTACT:
- name = "FetchContactQuery";
case FB_API_QUERY_CONTACTS:
name = "FetchContactsFullQuery";
@@ -1845,71 +1845,15 @@
-fb_api_contact_parse(FbApi *api, FbApiUser *user, JsonNode *root,
- FbApiPrivate *priv = api->priv;
- values = fb_json_values_new(root);
- fb_json_values_add(values, FB_JSON_TYPE_STR, FALSE,
- "$.represented_profile.id");
- fb_json_values_add(values, FB_JSON_TYPE_STR, FALSE,
- fb_json_values_add(values, FB_JSON_TYPE_STR, FALSE,
- "$.represented_profile.friendship_status");
- fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE,
- "$.structured_name.text");
- fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE,
- "$.hugePictureUrl.uri");
- fb_json_values_update(values, &err);
- if (G_UNLIKELY(err != NULL)) {
- g_propagate_error(error, err);
- g_object_unref(values);
- str = fb_json_values_next_str(values, NULL);
- str = fb_json_values_next_str(values, "0");
- fb_json_values_next_str(values, NULL);
- user->uid = FB_ID_FROM_STR(str);
- str = fb_json_values_next_str(values, NULL);
- !purple_strequal(str, "ARE_FRIENDS") &&
- (user->uid != priv->uid))
- g_object_unref(values);
- user->name = fb_json_values_next_str_dup(values, NULL);
- user->icon = fb_json_values_next_str_dup(values, NULL);
- params = fb_http_params_new_parse(user->icon, TRUE);
- user->csum = fb_http_params_dup_str(params, "oh", &err);
- fb_http_params_free(params);
- g_object_unref(values);
fb_api_cb_contact(PurpleHttpConnection *con, PurpleHttpResponse *res,
@@ -1927,20 +1871,32 @@
+ values = fb_json_values_new(node); + fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE, "$.id"); + fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE, "$.name"); + fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE, + "$.profile_pic_large.uri"); + fb_json_values_update(values, &err); + FB_API_ERROR_EMIT(api, err, + g_object_unref(values); fb_api_user_reset(&user, FALSE);
- if (!fb_api_contact_parse(api, &user, node, &err)) {
- if (G_LIKELY(err == NULL)) {
- fb_api_error(api, FB_API_ERROR_GENERAL,
- _("Failed to parse contact information"));
- fb_api_error_emit(api, err);
- g_signal_emit_by_name(api, "contact", &user);
+ str = fb_json_values_next_str(values, "0"); + user.uid = FB_ID_FROM_STR(str); + user.name = fb_json_values_next_str_dup(values, NULL); + user.icon = fb_json_values_next_str_dup(values, NULL); + prms = fb_http_params_new_parse(user.icon, TRUE); + user.csum = fb_http_params_dup_str(prms, "oh", &err); + fb_http_params_free(prms); + g_signal_emit_by_name(api, "contact", &user); fb_api_user_reset(&user, TRUE);
+ g_object_unref(values); @@ -1950,16 +1906,19 @@
- * 4: low_res_cover_size
+ * 1: include_full_user_info + * 2: profile_pic_large_size + * 3: profile_pic_medium_size + * 4: profile_pic_small_size bldr = fb_json_bldr_new(JSON_NODE_OBJECT);
- fb_json_bldr_add_strf(bldr, "0", "%" FB_ID_FORMAT, uid);
+ fb_json_bldr_arr_begin(bldr, "0"); + fb_json_bldr_add_strf(bldr, NULL, "%" FB_ID_FORMAT, uid); + fb_json_bldr_arr_end(bldr); + fb_json_bldr_add_str(bldr, "1", "true"); fb_api_http_query(api, FB_API_QUERY_CONTACT, bldr, fb_api_cb_contact);
@@ -1967,16 +1926,16 @@
fb_api_cb_contacts(PurpleHttpConnection *con, PurpleHttpResponse *res,
if (!fb_api_http_chk(api, con, res, &root)) {
@@ -1986,32 +1945,35 @@
values = fb_json_values_new(root);
fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE,
+ fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE, + "$.represented_profile.id"); + fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE, + "$.structured_name.text"); + fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE, + "$.hugePictureUrl.uri"); fb_json_values_set_array(values, FALSE, "$.viewer.messenger_contacts"
while (fb_json_values_update(values, &err)) {
+ writeid = fb_json_values_next_str_dup(values, NULL); + user = fb_api_user_dup(NULL, FALSE); + str = fb_json_values_next_str(values, "0"); + user->uid = FB_ID_FROM_STR(str); + user->name = fb_json_values_next_str_dup(values, NULL); + user->icon = fb_json_values_next_str_dup(values, NULL); + prms = fb_http_params_new_parse(user->icon, TRUE); + user->csum = fb_http_params_dup_str(prms, "oh", &err); + fb_http_params_free(prms);
- writeid = fb_json_values_next_str_dup(values, NULL);
- node = fb_json_values_get_root(values);
- fb_api_user_reset(&user, FALSE);
- if (fb_api_contact_parse(api, &user, node, &err)) {
- duser = fb_api_user_dup(&user, FALSE);
- users = g_slist_prepend(users, duser);
- fb_api_user_reset(&user, TRUE);
- if (G_UNLIKELY(err != NULL)) {
+ users = g_slist_prepend(users, user); - complete = (writeid == NULL) || (count < FB_API_CONTACTS_COUNT);
if (G_UNLIKELY(err == NULL)) {
+ complete = (writeid == NULL) || (count < FB_API_CONTACTS_COUNT); g_signal_emit_by_name(api, "contacts", users, complete);
--- a/libpurple/protocols/facebook/api.h Tue Aug 25 16:48:44 2015 -0400
+++ b/libpurple/protocols/facebook/api.h Tue Aug 25 20:02:11 2015 -0400
@@ -143,9 +143,9 @@
- * The query hash for the `FetchContactQuery`.
+ * The query hash for the `UsersQuery`. -#define FB_API_QUERY_CONTACT 10153746900701729
+#define FB_API_QUERY_CONTACT 10153915107411729