aboutsummaryrefslogtreecommitdiffstats
path: root/facebook/facebook-api.c
diff options
context:
space:
mode:
authordequis <dx@dxzone.com.ar>2016-06-02 20:49:49 -0300
committerdequis <dx@dxzone.com.ar>2016-06-02 20:49:49 -0300
commit4efa3977cdaa714738dd01c8f33c459a3a2b89d0 (patch)
tree47a6df6fb8cd7b03f35052381b72adf65dbe78eb /facebook/facebook-api.c
parent0877cf236761eaefcd61b8fd5722272ffe1f12c5 (diff)
downloadbitlbee-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.
Diffstat (limited to 'facebook/facebook-api.c')
-rw-r--r--facebook/facebook-api.c49
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);
}