From 3203ee24512edad1003ea0fb4ddb34134af2429e Mon Sep 17 00:00:00 2001 From: dequis Date: Sun, 22 Jan 2017 22:09:51 -0300 Subject: Fix infinite loop in previous commit when being added by a non-friend Because apparently that's a thing that happens (incoming delta with added item saying "friendship_status": "CAN_REQUEST" instead of "ARE_FRIENDS") --- facebook/facebook-api.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/facebook/facebook-api.c b/facebook/facebook-api.c index 1237861..d0e91b2 100644 --- a/facebook/facebook-api.c +++ b/facebook/facebook-api.c @@ -2034,6 +2034,7 @@ fb_api_cb_contacts_nodes(FbApi *api, JsonNode *root, GSList *users) FbApiUser *user; FbId uid; FbJsonValues *values; + gboolean is_array; GError *err = NULL; values = fb_json_values_new(root); @@ -2046,7 +2047,9 @@ fb_api_cb_contacts_nodes(FbApi *api, JsonNode *root, GSList *users) fb_json_values_add(values, FB_JSON_TYPE_STR, FALSE, "$.hugePictureUrl.uri"); - if (JSON_NODE_TYPE(root) == JSON_NODE_ARRAY) { + is_array = (JSON_NODE_TYPE(root) == JSON_NODE_ARRAY); + + if (is_array) { fb_json_values_set_array(values, FALSE, "$"); } @@ -2058,6 +2061,9 @@ fb_api_cb_contacts_nodes(FbApi *api, JsonNode *root, GSList *users) if (((g_strcmp0(str, "ARE_FRIENDS") != 0) && (uid != priv->uid)) || (uid == 0)) { + if (!is_array) { + break; + } continue; } @@ -2070,7 +2076,7 @@ fb_api_cb_contacts_nodes(FbApi *api, JsonNode *root, GSList *users) users = g_slist_prepend(users, user); - if (JSON_NODE_TYPE(root) != JSON_NODE_ARRAY) { + if (!is_array) { break; } } -- cgit v1.2.3 From bc8e710b6c52faa38f89b0496cfb59c8d5c71721 Mon Sep 17 00:00:00 2001 From: dequis Date: Thu, 23 Feb 2017 21:33:55 -0300 Subject: Fix some compiler warnings --- facebook/facebook-api.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/facebook/facebook-api.c b/facebook/facebook-api.c index d0e91b2..0e7d3a3 100644 --- a/facebook/facebook-api.c +++ b/facebook/facebook-api.c @@ -2092,7 +2092,7 @@ fb_api_cb_contacts_parse_removed(FbApi *api, JsonNode *node, GSList *users) { gsize len; char **split; - guchar *decoded = g_base64_decode(json_node_get_string(node), &len); + char *decoded = (char *) g_base64_decode(json_node_get_string(node), &len); g_return_val_if_fail(decoded[len] == '\0', users); g_return_val_if_fail(len == strlen(decoded), users); @@ -2115,11 +2115,8 @@ fb_api_cb_contacts(FbHttpRequest *req, gpointer data) { const gchar *cursor; const gchar *delta_cursor; - const gchar *str; FbApi *api = data; FbApiPrivate *priv = api->priv; - FbApiUser *user; - FbId uid; FbJsonValues *values; gboolean complete; gboolean is_delta; @@ -2150,12 +2147,12 @@ fb_api_cb_contacts(FbHttpRequest *req, gpointer data) GList *elms = json_array_get_elements(arr); for (l = elms; l != NULL; l = l->next) { - if (node = fb_json_node_get(l->data, "$.added", NULL)) { + if ((node = fb_json_node_get(l->data, "$.added", NULL))) { added = fb_api_cb_contacts_nodes(api, node, added); json_node_free(node); } - if (node = fb_json_node_get(l->data, "$.removed", NULL)) { + if ((node = fb_json_node_get(l->data, "$.removed", NULL))) { removed = fb_api_cb_contacts_parse_removed(api, node, removed); json_node_free(node); } -- cgit v1.2.3 From 3e8dd702c65c8b374e30b41f9886466325dae671 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20Thomas?= Date: Thu, 23 Feb 2017 21:27:04 +0100 Subject: Extract target url from fbrpc:// URLs Those URLs seem to be generated when the Android share feature is used. Fixes #97 --- facebook/facebook-api.c | 6 +++++- facebook/facebook-api.h | 7 +++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/facebook/facebook-api.c b/facebook/facebook-api.c index 0e7d3a3..d9d4486 100644 --- a/facebook/facebook-api.c +++ b/facebook/facebook-api.c @@ -1353,7 +1353,11 @@ fb_api_xma_parse(FbApi *api, const gchar *body, JsonNode *root, GError **error) if (g_strcmp0(str, "ExternalUrl") == 0) { prms = fb_http_values_new(); fb_http_values_parse(prms, url, TRUE); - text = fb_http_values_dup_str(prms, "u", NULL); + if (g_str_has_prefix(url, FB_API_FBRPC_PREFIX)) { + text = fb_http_values_dup_str(prms, "target_url", NULL); + } else { + text = fb_http_values_dup_str(prms, "u", NULL); + } fb_http_values_free(prms); } else { text = g_strdup(url); diff --git a/facebook/facebook-api.h b/facebook/facebook-api.h index cb7467f..b6a2812 100644 --- a/facebook/facebook-api.h +++ b/facebook/facebook-api.h @@ -67,6 +67,13 @@ */ #define FB_API_WHOST "https://www.facebook.com" +/** + * FB_API_FBRPC_PREFIX + * + * The fbrpc URL prefix used in links shared from the mobile app. + */ +#define FB_API_FBRPC_PREFIX "fbrpc://facebook/nativethirdparty" + /** * FB_API_KEY: * -- cgit v1.2.3