/soc/2015/jgeboski/facebook: 860ee76f5f58: facebook: fixed all J...
James Geboski <[email protected]>
| Newsgroups | gmane.comp.gnome.gaim.cvs |
|---|---|
| Message-ID | <[email protected]> |
Changeset: 860ee76f5f5840d3b804c940e976229fb4f707ed Author: James Geboski <[email protected]> Date: 2015-08-10 01:03 -0400 Branch: facebook URL: https://hg.pidgin.im/soc/2015/jgeboski/facebook/rev/860ee76f5f58 Description: facebook: fixed all JSON arrays being required diffstat: libpurple/protocols/facebook/api.c | 44 ++++++++++++++++++++++-------------- libpurple/protocols/facebook/json.c | 27 ++++++++++++++++----- libpurple/protocols/facebook/json.h | 9 ++++++- 3 files changed, 55 insertions(+), 25 deletions(-) diffs (294 lines): diff --git a/libpurple/protocols/facebook/api.c b/libpurple/protocols/facebook/api.c --- a/libpurple/protocols/facebook/api.c +++ b/libpurple/protocols/facebook/api.c @@ -347,7 +347,7 @@ fb_api_json_chk(FbApi *api, gconstpointe root = fb_json_node_new(data, size, &err); FB_API_ERROR_EMIT(api, err, return FALSE); - values = fb_json_values_new(root, NULL); + values = fb_json_values_new(root); fb_json_values_add(values, FB_JSON_TYPE_INT, FALSE, "$.error_code"); fb_json_values_add(values, FB_JSON_TYPE_STR, FALSE, "$.error.type"); fb_json_values_add(values, FB_JSON_TYPE_STR, FALSE, "$.errorCode"); @@ -768,7 +768,7 @@ fb_api_cb_seqid(PurpleHttpConnection *co return; } - values = fb_json_values_new(root, NULL); + values = fb_json_values_new(root); fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE, "$.viewer.message_threads.sync_sequence_id"); fb_json_values_add(values, FB_JSON_TYPE_INT, TRUE, @@ -846,7 +846,7 @@ fb_api_cb_publish_mark(FbApi *api, GByte return; } - values = fb_json_values_new(root, NULL); + values = fb_json_values_new(root); fb_json_values_add(values, FB_JSON_TYPE_BOOL, FALSE, "$.succeeded"); fb_json_values_update(values, &err); @@ -879,7 +879,7 @@ fb_api_cb_publish_typing(FbApi *api, GBy return; } - values = fb_json_values_new(root, NULL); + values = fb_json_values_new(root); fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE, "$.type"); fb_json_values_add(values, FB_JSON_TYPE_INT, TRUE, "$.sender_fbid"); fb_json_values_add(values, FB_JSON_TYPE_INT, TRUE, "$.state"); @@ -915,7 +915,7 @@ fb_api_message_parse_xma(FbApi *api, Jso gchar *ret; GError *err = NULL; - values = fb_json_values_new(root, NULL); + values = fb_json_values_new(root); fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE, "$.story_attachment.target.__type__.name"); fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE, @@ -956,11 +956,13 @@ fb_api_message_parse_attach(FbApi *api, JsonNode *node; JsonNode *xode; - values = fb_json_values_new(root, "$.deltaNewMessage.attachments"); + values = fb_json_values_new(root); fb_json_values_add(values, FB_JSON_TYPE_STR, FALSE, "$.imageMetadata.imageURIMap.0"); fb_json_values_add(values, FB_JSON_TYPE_STR, FALSE, "$.xmaGraphQL"); fb_json_values_add(values, FB_JSON_TYPE_STR, FALSE, "$.filename"); + fb_json_values_set_array(values, FALSE, "$.deltaNewMessage" + ".attachments"); while (fb_json_values_update(values, &err)) { msg->text = fb_json_values_next_str_dup(values, NULL); @@ -1066,7 +1068,7 @@ fb_api_cb_publish_ms(FbApi *api, GByteAr } g_free(json); - values = fb_json_values_new(root, NULL); + values = fb_json_values_new(root); fb_json_values_add(values, FB_JSON_TYPE_INT, FALSE, "$.lastIssuedSeqId"); fb_json_values_add(values, FB_JSON_TYPE_STR, FALSE, "$.syncToken"); @@ -1090,7 +1092,7 @@ fb_api_cb_publish_ms(FbApi *api, GByteAr return; } - values = fb_json_values_new(root, "$.deltas"); + values = fb_json_values_new(root); fb_json_values_add(values, FB_JSON_TYPE_INT, FALSE, "$.deltaNewMessage.messageMetadata" ".offlineThreadingId"); @@ -1106,6 +1108,7 @@ fb_api_cb_publish_ms(FbApi *api, GByteAr "$.deltaNewMessage.body"); fb_json_values_add(values, FB_JSON_TYPE_INT, FALSE, "$.deltaNewMessage.stickerId"); + fb_json_values_set_array(values, TRUE, "$.deltas"); while (fb_json_values_update(values, &err)) { id = fb_json_values_next_int(values, 0); @@ -1414,7 +1417,7 @@ fb_api_cb_auth(PurpleHttpConnection *con return; } - values = fb_json_values_new(root, NULL); + values = fb_json_values_new(root); fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE, "$.access_token"); fb_json_values_add(values, FB_JSON_TYPE_INT, TRUE, "$.uid"); fb_json_values_update(values, &err); @@ -1468,7 +1471,7 @@ fb_api_cb_contacts(PurpleHttpConnection return; } - values = fb_json_values_new(root, "$.viewer.messenger_contacts.nodes"); + values = fb_json_values_new(root); fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE, "$.represented_profile.id"); fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE, @@ -1479,6 +1482,8 @@ fb_api_cb_contacts(PurpleHttpConnection "$.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" + ".nodes"); while (fb_json_values_update(values, &err)) { fb_api_user_reset(&user, FALSE); @@ -1699,10 +1704,11 @@ fb_api_cb_unread_parse_attach(FbApi *api GError *err = NULL; gpointer mptr; - values = fb_json_values_new(root, "$.blob_attachments"); + values = fb_json_values_new(root); fb_json_values_add(values, FB_JSON_TYPE_STR, FALSE, "$.image_full_screen.uri"); fb_json_values_add(values, FB_JSON_TYPE_STR, FALSE, "$.filename"); + fb_json_values_set_array(values, FALSE, "$.blob_attachments"); while (fb_json_values_update(values, &err)) { msg->text = fb_json_values_next_str_dup(values, NULL); @@ -1764,7 +1770,7 @@ fb_api_cb_unread_msgs(PurpleHttpConnecti return; } - values = fb_json_values_new(node, NULL); + values = fb_json_values_new(node); fb_json_values_add(values, FB_JSON_TYPE_STR, FALSE, "$.thread_key.thread_fbid"); fb_json_values_update(values, &err); @@ -1779,12 +1785,13 @@ fb_api_cb_unread_msgs(PurpleHttpConnecti msg.tid = FB_ID_FROM_STR(str); fb_json_values_free(values); - values = fb_json_values_new(node, "$.messages.nodes"); + values = fb_json_values_new(node); fb_json_values_add(values, FB_JSON_TYPE_BOOL, TRUE, "$.unread"); fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE, "$.message_sender.messaging_actor.id"); fb_json_values_add(values, FB_JSON_TYPE_STR, FALSE, "$.message.text"); fb_json_values_add(values, FB_JSON_TYPE_STR, FALSE, "$.sticker.id"); + fb_json_values_set_array(values, FALSE, "$.messages.nodes"); while (fb_json_values_update(values, &err)) { if (!fb_json_values_next_bool(values, FALSE)) { @@ -1871,12 +1878,14 @@ fb_api_cb_unread(PurpleHttpConnection *c return; } - values = fb_json_values_new(root, "$.viewer.message_threads.nodes"); + values = fb_json_values_new(root); fb_json_values_add(values, FB_JSON_TYPE_INT, TRUE, "$.unread_count"); fb_json_values_add(values, FB_JSON_TYPE_STR, FALSE, "$.thread_key.other_user_id"); fb_json_values_add(values, FB_JSON_TYPE_STR, FALSE, "$.thread_key.thread_fbid"); + fb_json_values_set_array(values, FALSE, "$.viewer.message_threads" + ".nodes"); while (fb_json_values_update(values, &err)) { count = fb_json_values_next_int(values, -5); @@ -1948,7 +1957,7 @@ fb_api_thread_parse(FbApi *api, FbApiThr GError *err = NULL; gpointer mptr; - values = fb_json_values_new(root, NULL); + values = fb_json_values_new(root); fb_json_values_add(values, FB_JSON_TYPE_STR, FALSE, "$.thread_key.thread_fbid"); fb_json_values_add(values, FB_JSON_TYPE_STR, FALSE, "$.name"); @@ -1971,11 +1980,12 @@ fb_api_thread_parse(FbApi *api, FbApiThr thrd->topic = fb_json_values_next_str_dup(values, NULL); fb_json_values_free(values); - values = fb_json_values_new(root, "$.all_participants.nodes"); + values = fb_json_values_new(root); fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE, "$.messaging_actor.id"); fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE, "$.messaging_actor.name"); + fb_json_values_set_array(values, TRUE, "$.all_participants.nodes"); while (fb_json_values_update(values, &err)) { fb_api_user_reset(&user, FALSE); @@ -2099,7 +2109,7 @@ fb_api_cb_thread_create(PurpleHttpConnec return; } - values = fb_json_values_new(root, NULL); + values = fb_json_values_new(root); fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE, "$.thread_fbid"); fb_json_values_update(values, &err); diff --git a/libpurple/protocols/facebook/json.c b/libpurple/protocols/facebook/json.c --- a/libpurple/protocols/facebook/json.c +++ b/libpurple/protocols/facebook/json.c @@ -349,7 +349,7 @@ fb_json_node_get_str(JsonNode *root, con } FbJsonValues * -fb_json_values_new(JsonNode *root, const gchar *arrexpr) +fb_json_values_new(JsonNode *root) { FbJsonValues *ret; @@ -359,10 +359,6 @@ fb_json_values_new(JsonNode *root, const ret->root = root; ret->queue = g_queue_new(); - if (arrexpr != NULL) { - ret->array = fb_json_node_get_arr(root, arrexpr, &ret->error); - } - return ret; } @@ -436,6 +432,21 @@ fb_json_values_get_root(FbJsonValues *va return json_array_get_element(values->array, index); } +void +fb_json_values_set_array(FbJsonValues *values, gboolean required, + const gchar *expr) +{ + g_return_if_fail(values != NULL); + + values->array = fb_json_node_get_arr(values->root, expr, + &values->error); + values->isarray = TRUE; + + if ((values->error != NULL) && !required) { + g_clear_error(&values->error); + } +} + gboolean fb_json_values_update(FbJsonValues *values, GError **error) { @@ -454,8 +465,10 @@ fb_json_values_update(FbJsonValues *valu return FALSE; } - if (values->array != NULL) { - if (json_array_get_length(values->array) <= values->index) { + if (values->isarray) { + if ((values->array == NULL) || + (json_array_get_length(values->array) <= values->index)) + { return FALSE; } diff --git a/libpurple/protocols/facebook/json.h b/libpurple/protocols/facebook/json.h --- a/libpurple/protocols/facebook/json.h +++ b/libpurple/protocols/facebook/json.h @@ -64,8 +64,11 @@ struct _FbJsonValues JsonNode *root; GQueue *queue; GList *next; + + gboolean isarray; JsonArray *array; guint index; + GError *error; }; @@ -132,7 +135,7 @@ gchar * fb_json_node_get_str(JsonNode *root, const gchar *expr, GError **error); FbJsonValues * -fb_json_values_new(JsonNode *root, const gchar *arrexpr); +fb_json_values_new(JsonNode *root); void fb_json_values_free(FbJsonValues *values); @@ -144,6 +147,10 @@ fb_json_values_add(FbJsonValues *values, JsonNode * fb_json_values_get_root(FbJsonValues *values); +void +fb_json_values_set_array(FbJsonValues *values, gboolean required, + const gchar *expr); + gboolean fb_json_values_update(FbJsonValues *values, GError **error); _______________________________________________ Commits mailing list [email protected] https://pidgin.im/cgi-bin/mailman/listinfo/commits