/soc/2015/jgeboski/facebook: b70cc4d02d68: facebook: refactored ...
James Geboski <[email protected]>
| Newsgroups | gmane.comp.gnome.gaim.cvs |
|---|---|
| Message-ID | <[email protected]> |
Changeset: b70cc4d02d689affba1f98b116fa1ed91ae3db28 Author: James Geboski <[email protected]> Date: 2015-08-20 15:49 -0400 Branch: facebook URL: https://hg.pidgin.im/soc/2015/jgeboski/facebook/rev/b70cc4d02d68 Description: facebook: refactored data structure usage diffstat: libpurple/protocols/facebook/api.c | 234 +++++++++++++++++-------------- libpurple/protocols/facebook/api.h | 48 ++++-- libpurple/protocols/facebook/facebook.c | 6 +- 3 files changed, 163 insertions(+), 125 deletions(-) diffs (truncated from 717 to 300 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 @@ -1038,9 +1038,9 @@ fb_api_event_parse(FbApi *api, FbApiEven JsonNode *root, GError **error) { const gchar *str; + FbApiEvent *devent; FbJsonValues *values; GError *err = NULL; - gpointer mptr; guint i; static const struct { @@ -1057,7 +1057,6 @@ fb_api_event_parse(FbApi *api, FbApiEven }; for (i = 0; i < G_N_ELEMENTS(evtypes); i++) { - event->type = evtypes[i].type; values = fb_json_values_new(root); fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE, "$"); fb_json_values_set_array(values, FALSE, evtypes[i].expr); @@ -1067,9 +1066,10 @@ fb_api_event_parse(FbApi *api, FbApiEven str = strrchr(str, ':'); if (str != NULL) { - event->uid = FB_ID_FROM_STR(str + 1); - mptr = fb_api_event_dup(event); - events = g_slist_prepend(events, mptr); + devent = fb_api_event_dup(event); + devent->type = evtypes[i].type; + devent->uid = FB_ID_FROM_STR(str + 1); + events = g_slist_prepend(events, devent); } } @@ -1166,14 +1166,14 @@ fb_api_cb_publish_typing(FbApi *api, GBy json_node_free(root); } -static gboolean -fb_api_xma_parse(FbApi *api, FbApiMessage *msg, const gchar *body, - JsonNode *root, GError **error) +static gchar * +fb_api_xma_parse(FbApi *api, const gchar *body, JsonNode *root, GError **error) { const gchar *str; const gchar *url; FbHttpParams *params; FbJsonValues *values; + gchar *text; GError *err = NULL; values = fb_json_values_new(root); @@ -1194,20 +1194,20 @@ fb_api_xma_parse(FbApi *api, FbApiMessag if (purple_strequal(str, "ExternalUrl")) { params = fb_http_params_new_parse(url, TRUE); - msg->text = fb_http_params_dup_str(params, "u", NULL); + text = fb_http_params_dup_str(params, "u", NULL); fb_http_params_free(params); } else { - msg->text = g_strdup(url); + text = g_strdup(url); } - if (fb_http_urlcmp(body, msg->text, FALSE)) { - g_free(msg->text); + if (fb_http_urlcmp(body, text, FALSE)) { + g_free(text); g_object_unref(values); - return FALSE; + return NULL; } g_object_unref(values); - return TRUE; + return text; } static GSList * @@ -1216,9 +1216,10 @@ fb_api_message_parse_attach(FbApi *api, { const gchar *str; const gchar *url; + FbApiMessage *dmsg; FbJsonValues *values; + gchar *xma; GError *err = NULL; - gpointer mptr; JsonNode *node; JsonNode *xode; @@ -1236,12 +1237,10 @@ fb_api_message_parse_attach(FbApi *api, url = fb_json_values_next_str(values, NULL); if ((str != NULL) && g_str_has_prefix(str, "image/")) { - msg->flags |= FB_API_MESSAGE_FLAG_IMAGE; - msg->text = g_strdup(url); - mptr = fb_api_message_dup(msg, FALSE); - - msg->flags &= ~FB_API_MESSAGE_FLAG_IMAGE; - msgs = g_slist_prepend(msgs, mptr); + dmsg = fb_api_message_dup(msg, FALSE); + dmsg->flags |= FB_API_MESSAGE_FLAG_IMAGE; + dmsg->text = g_strdup(url); + msgs = g_slist_prepend(msgs, dmsg); continue; } @@ -1255,10 +1254,12 @@ fb_api_message_parse_attach(FbApi *api, } xode = fb_json_node_get_nth(node, 0); - - if (fb_api_xma_parse(api, msg, body, xode, &err)) { - mptr = fb_api_message_dup(msg, FALSE); - msgs = g_slist_prepend(msgs, mptr); + xma = fb_api_xma_parse(api, body, xode, &err); + + if (xma != NULL) { + dmsg = fb_api_message_dup(msg, FALSE); + dmsg->text = xma; + msgs = g_slist_prepend(msgs, dmsg); } json_node_free(node); @@ -1276,11 +1277,11 @@ fb_api_message_parse_attach(FbApi *api, str = _("unknown attachment"); } - msg->text = g_strdup_printf("%s/%" FB_ID_FORMAT " [%s]", - FB_API_URL_MESSAGES, - msg->uid, str); - mptr = fb_api_message_dup(msg, FALSE); - msgs = g_slist_prepend(msgs, mptr); + dmsg = fb_api_message_dup(msg, FALSE); + dmsg->text = g_strdup_printf("%s/%" FB_ID_FORMAT " [%s]", + FB_API_URL_MESSAGES, + msg->uid, str); + msgs = g_slist_prepend(msgs, dmsg); } if (G_UNLIKELY(err != NULL)) { @@ -1296,6 +1297,7 @@ fb_api_cb_publish_ms(FbApi *api, GByteAr { const gchar *body; const gchar *data; + FbApiMessage *dmsg; FbApiMessage msg; FbApiPrivate *priv = api->priv; FbHttpParams *params; @@ -1307,7 +1309,6 @@ fb_api_cb_publish_ms(FbApi *api, GByteAr gchar *stoken; GError *err = NULL; gint64 id; - gpointer mptr; GRegex *regex; GSList *msgs = NULL; guint size; @@ -1404,20 +1405,20 @@ fb_api_cb_publish_ms(FbApi *api, GByteAr body = fb_json_values_next_str(values, NULL); if (body != NULL) { - msg.text = g_strdup(body); - mptr = fb_api_message_dup(&msg, FALSE); - msgs = g_slist_prepend(msgs, mptr); + dmsg = fb_api_message_dup(&msg, FALSE); + dmsg->text = g_strdup(body); + msgs = g_slist_prepend(msgs, dmsg); } id = fb_json_values_next_int(values, 0); if (id != 0) { + dmsg = fb_api_message_dup(&msg, FALSE); params = fb_http_params_new(); fb_http_params_set_int(params, "sticker_id", id); - msg.text = fb_http_params_close(params, - FB_API_URL_STICKER); - mptr = fb_api_message_dup(&msg, FALSE); - msgs = g_slist_prepend(msgs, mptr); + dmsg->text = fb_http_params_close(params, + FB_API_URL_STICKER); + msgs = g_slist_prepend(msgs, dmsg); } node = fb_json_values_get_root(values); @@ -1444,12 +1445,11 @@ fb_api_cb_publish_ms(FbApi *api, GByteAr static void fb_api_cb_publish_p(FbApi *api, GByteArray *pload) { - FbApiPresence pres; + FbApiPresence *pres; FbThrift *thft; FbThriftType type; gint32 i32; gint64 i64; - gpointer mptr; GSList *press; guint i; guint size; @@ -1482,11 +1482,11 @@ fb_api_cb_publish_p(FbApi *api, GByteArr g_warn_if_fail(type == FB_THRIFT_TYPE_I32); fb_thrift_read_i32(thft, &i32); - pres.uid = i64; - pres.active = i32 != 0; - - mptr = fb_api_presence_dup(&pres); - press = g_slist_prepend(press, mptr); + pres = fb_api_presence_dup(NULL); + pres->uid = i64; + pres->active = i32 != 0; + press = g_slist_prepend(press, pres); + fb_util_debug_info("Presence: %" FB_ID_FORMAT " (%d)", i64, i32 != 0); @@ -1840,12 +1840,12 @@ fb_api_cb_contacts(PurpleHttpConnection gpointer data) { FbApi *api = data; + FbApiUser *duser; FbApiUser user; FbJsonValues *values; gboolean complete; gchar *writeid = NULL; GError *err = NULL; - gpointer mptr; GSList *users = NULL; guint count = 0; JsonNode *node; @@ -1870,8 +1870,10 @@ fb_api_cb_contacts(PurpleHttpConnection fb_api_user_reset(&user, FALSE); if (fb_api_contact_parse(api, &user, node, &err)) { - mptr = fb_api_user_dup(&user, FALSE); - users = g_slist_prepend(users, mptr); + duser = fb_api_user_dup(&user, FALSE); + users = g_slist_prepend(users, duser); + } else { + fb_api_user_reset(&user, TRUE); } if (G_UNLIKELY(err != NULL)) { @@ -1982,7 +1984,7 @@ fb_api_message(FbApi *api, FbId id, gboo const gchar *tpfx; FbApiPrivate *priv; gchar *json; - gpointer mptr; + guint64 *dmsgid; guint64 msgid; JsonBuilder *bldr; @@ -1993,8 +1995,8 @@ fb_api_message(FbApi *api, FbId id, gboo msgid = FB_API_MSGID(g_get_real_time() / 1000, g_random_int()); tpfx = thread ? "tfbid_" : ""; - mptr = g_memdup(&msgid, sizeof msgid); - g_hash_table_replace(priv->msgids, mptr, mptr); + dmsgid = g_memdup(&msgid, sizeof msgid); + g_hash_table_replace(priv->msgids, dmsgid, dmsgid); bldr = fb_json_bldr_new(JSON_NODE_OBJECT); fb_json_bldr_add_int(bldr, "msgid", msgid); @@ -2067,9 +2069,9 @@ fb_api_cb_unread_parse_attach(FbApi *api { const gchar *str; const gchar *url; + FbApiMessage *dmsg; FbJsonValues *values; GError *err = NULL; - gpointer mptr; values = fb_json_values_new(root); fb_json_values_add(values, FB_JSON_TYPE_STR, FALSE, "$.mimetype"); @@ -2083,12 +2085,10 @@ fb_api_cb_unread_parse_attach(FbApi *api url = fb_json_values_next_str(values, NULL); if ((str != NULL) && g_str_has_prefix(str, "image/")) { - msg->flags |= FB_API_MESSAGE_FLAG_IMAGE; - msg->text = g_strdup(url); - mptr = fb_api_message_dup(msg, FALSE); - - msg->flags &= ~FB_API_MESSAGE_FLAG_IMAGE; - msgs = g_slist_prepend(msgs, mptr); + dmsg = fb_api_message_dup(msg, FALSE); + dmsg->flags |= FB_API_MESSAGE_FLAG_IMAGE; + dmsg->text = g_strdup(url); + msgs = g_slist_prepend(msgs, dmsg); continue; } @@ -2098,11 +2098,11 @@ fb_api_cb_unread_parse_attach(FbApi *api str = _("unknown attachment"); } - msg->text = g_strdup_printf("%s/%" FB_ID_FORMAT " [%s]", - FB_API_URL_MESSAGES, _______________________________________________ Commits mailing list [email protected] https://pidgin.im/cgi-bin/mailman/listinfo/commits