pidgin/pidgin

69b44723d52c
Parents 6d85d309f8e4
Children 955dcca1ac3d
facebook: Make $.hugePictureUrl.uri optional

Facebook seems to randomly send null in this field sometimes. It's not
very important so it can be made optional.

This includes moving the checksum code (which was previously duplicated)
to a separate function so that there's a single null check.
--- a/libpurple/protocols/facebook/api.c Sat Oct 22 02:16:30 2016 -0300
+++ b/libpurple/protocols/facebook/api.c Sat Oct 22 03:51:49 2016 -0300
@@ -1949,6 +1949,28 @@
prms, fb_api_cb_auth);
}
+static gchar *
+fb_api_user_icon_checksum(gchar *icon)
+{
+ gchar *csum;
+ FbHttpParams *prms;
+
+ if (G_UNLIKELY(icon == NULL)) {
+ return NULL;
+ }
+
+ prms = fb_http_params_new_parse(icon, TRUE);
+ csum = fb_http_params_dup_str(prms, "oh", NULL);
+ fb_http_params_free(prms);
+
+ if (G_UNLIKELY(csum == NULL)) {
+ /* Revert to the icon URL as the unique checksum */
+ csum = g_strdup(icon);
+ }
+
+ return csum;
+}
+
static void
fb_api_cb_contact(PurpleHttpConnection *con, PurpleHttpResponse *res,
gpointer data)
@@ -1956,7 +1978,6 @@
const gchar *str;
FbApi *api = data;
FbApiUser user;
- FbHttpParams *prms;
FbJsonValues *values;
GError *err = NULL;
JsonNode *node;
@@ -1978,7 +1999,7 @@
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,
+ fb_json_values_add(values, FB_JSON_TYPE_STR, FALSE,
"$.profile_pic_large.uri");
fb_json_values_update(values, &err);
@@ -1994,14 +2015,7 @@
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", NULL);
- fb_http_params_free(prms);
-
- if (G_UNLIKELY(user.csum == NULL)) {
- /* Revert to the icon URL as the unique checksum */
- user.csum = g_strdup(user.icon);
- }
+ user.csum = fb_api_user_icon_checksum(user.icon);
g_signal_emit_by_name(api, "contact", &user);
fb_api_user_reset(&user, TRUE);
@@ -2032,7 +2046,6 @@
FbApi *api = data;
FbApiPrivate *priv = api->priv;
FbApiUser *user;
- FbHttpParams *prms;
FbId uid;
FbJsonValues *values;
gboolean complete;
@@ -2051,7 +2064,7 @@
"$.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,
+ fb_json_values_add(values, FB_JSON_TYPE_STR, FALSE,
"$.hugePictureUrl.uri");
fb_json_values_set_array(values, FALSE, "$.viewer.messenger_contacts"
".nodes");
@@ -2072,14 +2085,7 @@
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", NULL);
- fb_http_params_free(prms);
-
- if (G_UNLIKELY(user->csum == NULL)) {
- /* Revert to the icon URL as the unique checksum */
- user->csum = g_strdup(user->icon);
- }
+ user->csum = fb_api_user_icon_checksum(user->icon);
users = g_slist_prepend(users, user);
}