diff options
author | dequis <dx@dxzone.com.ar> | 2016-06-02 20:49:49 -0300 |
---|---|---|
committer | dequis <dx@dxzone.com.ar> | 2016-06-02 20:49:49 -0300 |
commit | 4efa3977cdaa714738dd01c8f33c459a3a2b89d0 (patch) | |
tree | 47a6df6fb8cd7b03f35052381b72adf65dbe78eb | |
parent | 0877cf236761eaefcd61b8fd5722272ffe1f12c5 (diff) | |
download | bitlbee-facebook-4efa3977cdaa714738dd01c8f33c459a3a2b89d0.tar.gz bitlbee-facebook-4efa3977cdaa714738dd01c8f33c459a3a2b89d0.tar.bz2 bitlbee-facebook-4efa3977cdaa714738dd01c8f33c459a3a2b89d0.tar.xz |
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.
-rw-r--r-- | facebook/facebook-api.c | 49 |
1 files changed, 27 insertions, 22 deletions
diff --git a/facebook/facebook-api.c b/facebook/facebook-api.c index c8e5e30..b451fba 100644 --- a/facebook/facebook-api.c +++ b/facebook/facebook-api.c @@ -1890,13 +1890,35 @@ fb_api_auth(FbApi *api, const gchar *user, const gchar *pass) fb_api_cb_auth); } +static gchar * +fb_api_user_icon_checksum(gchar *icon) +{ + gchar *csum; + FbHttpValues *prms; + + if (G_UNLIKELY(icon == NULL)) { + return NULL; + } + + prms = fb_http_values_new(); + fb_http_values_parse(prms, icon, TRUE); + csum = fb_http_values_dup_str(prms, "oh", NULL); + fb_http_values_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(FbHttpRequest *req, gpointer data) { const gchar *str; FbApi *api = data; FbApiUser user; - FbHttpValues *prms; FbJsonValues *values; GError *err = NULL; JsonNode *node; @@ -1918,7 +1940,7 @@ fb_api_cb_contact(FbHttpRequest *req, gpointer data) 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); @@ -1934,15 +1956,7 @@ fb_api_cb_contact(FbHttpRequest *req, gpointer data) user.name = fb_json_values_next_str_dup(values, NULL); user.icon = fb_json_values_next_str_dup(values, NULL); - prms = fb_http_values_new(); - fb_http_values_parse(prms, user.icon, TRUE); - user.csum = fb_http_values_dup_str(prms, "oh", NULL); - fb_http_values_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); @@ -1972,7 +1986,6 @@ fb_api_cb_contacts(FbHttpRequest *req, gpointer data) FbApi *api = data; FbApiPrivate *priv = api->priv; FbApiUser *user; - FbHttpValues *prms; FbId uid; FbJsonValues *values; gboolean complete; @@ -1991,7 +2004,7 @@ fb_api_cb_contacts(FbHttpRequest *req, gpointer data) "$.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"); @@ -2012,15 +2025,7 @@ fb_api_cb_contacts(FbHttpRequest *req, gpointer data) user->name = fb_json_values_next_str_dup(values, NULL); user->icon = fb_json_values_next_str_dup(values, NULL); - prms = fb_http_values_new(); - fb_http_values_parse(prms, user->icon, TRUE); - user->csum = fb_http_values_dup_str(prms, "oh", NULL); - fb_http_values_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); } |