diff options
author | jgeboski <jgeboski@gmail.com> | 2015-08-25 15:51:33 -0400 |
---|---|---|
committer | jgeboski <jgeboski@gmail.com> | 2015-08-25 16:33:27 -0400 |
commit | a4fdfe5a96383258df28b2f756eb0d8f3165090a (patch) | |
tree | d71a0712962f04dcecdae98edcd543bfc5a577df /facebook/facebook-api.c | |
parent | d7583c3d34b286c535e00e9c54fca1a5aa4e1e6a (diff) | |
download | bitlbee-facebook-a4fdfe5a96383258df28b2f756eb0d8f3165090a.tar.gz bitlbee-facebook-a4fdfe5a96383258df28b2f756eb0d8f3165090a.tar.bz2 bitlbee-facebook-a4fdfe5a96383258df28b2f756eb0d8f3165090a.tar.xz |
Implemented group chat topic change events
Diffstat (limited to 'facebook/facebook-api.c')
-rw-r--r-- | facebook/facebook-api.c | 58 |
1 files changed, 51 insertions, 7 deletions
diff --git a/facebook/facebook-api.c b/facebook/facebook-api.c index 9ba01ec..7a698b0 100644 --- a/facebook/facebook-api.c +++ b/facebook/facebook-api.c @@ -1064,6 +1064,36 @@ fb_api_event_parse(FbApi *api, FbApiEvent *event, GSList *events, } }; + values = fb_json_values_new(root); + fb_json_values_add(values, FB_JSON_TYPE_STR, FALSE, "$.log_message_type"); + fb_json_values_add(values, FB_JSON_TYPE_STR, FALSE, "$.author"); + fb_json_values_add(values, FB_JSON_TYPE_STR, FALSE, + "$.log_message_data.name"); + fb_json_values_update(values, &err); + + if (G_UNLIKELY(err != NULL)) { + g_propagate_error(error, err); + g_object_unref(values); + return events; + } + + str = fb_json_values_next_str(values, NULL); + + if (g_strcmp0(str, "log:thread-name") == 0) { + str = fb_json_values_next_str(values, ""); + str = strrchr(str, ':'); + + if (str != NULL) { + devent = fb_api_event_dup(event, FALSE); + devent->type = FB_API_EVENT_TYPE_THREAD_TOPIC; + devent->uid = FB_ID_FROM_STR(str + 1); + devent->text = fb_json_values_next_str_dup(values, NULL); + events = g_slist_prepend(events, devent); + } + } + + g_object_unref(values); + for (i = 0; i < G_N_ELEMENTS(evtypes); i++) { values = fb_json_values_new(root); fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE, "$"); @@ -1074,7 +1104,7 @@ fb_api_event_parse(FbApi *api, FbApiEvent *event, GSList *events, str = strrchr(str, ':'); if (str != NULL) { - devent = fb_api_event_dup(event); + devent = fb_api_event_dup(event, FALSE); devent->type = evtypes[i].type; devent->uid = FB_ID_FROM_STR(str + 1); events = g_slist_prepend(events, devent); @@ -1093,7 +1123,7 @@ fb_api_event_parse(FbApi *api, FbApiEvent *event, GSList *events, } static void -fb_api_cb_mercury(FbApi *api, GByteArray *pload) +fb_api_cb_publish_mercury(FbApi *api, GByteArray *pload) { const gchar *str; FbApiEvent event; @@ -1112,7 +1142,7 @@ fb_api_cb_mercury(FbApi *api, GByteArray *pload) fb_json_values_set_array(values, FALSE, "$.actions"); while (fb_json_values_update(values, &err)) { - fb_api_event_reset(&event); + fb_api_event_reset(&event, FALSE); str = fb_json_values_next_str(values, "0"); event.tid = FB_ID_FROM_STR(str); @@ -1518,7 +1548,7 @@ fb_api_cb_mqtt_publish(FbMqtt *mqtt, const gchar *topic, GByteArray *pload, void (*func) (FbApi *api, GByteArray *pload); } parsers[] = { {"/mark_thread_response", fb_api_cb_publish_mark}, - {"/mercury", fb_api_cb_mercury}, + {"/mercury", fb_api_cb_publish_mercury}, {"/orca_typing_notifications", fb_api_cb_publish_typing}, {"/t_ms", fb_api_cb_publish_ms}, {"/t_p", fb_api_cb_publish_p} @@ -2782,19 +2812,32 @@ fb_api_typing(FbApi *api, FbId uid, gboolean state) } FbApiEvent * -fb_api_event_dup(const FbApiEvent *event) +fb_api_event_dup(const FbApiEvent *event, gboolean deep) { + FbApiEvent *ret; + if (event == NULL) { return g_new0(FbApiEvent, 1); } - return g_memdup(event, sizeof *event); + ret = g_memdup(event, sizeof *event); + + if (deep) { + ret->text = g_strdup(event->text); + } + + return ret; } void -fb_api_event_reset(FbApiEvent *event) +fb_api_event_reset(FbApiEvent *event, gboolean deep) { g_return_if_fail(event != NULL); + + if (deep) { + g_free(event->text); + } + memset(event, 0, sizeof *event); } @@ -2802,6 +2845,7 @@ void fb_api_event_free(FbApiEvent *event) { if (G_LIKELY(event != NULL)) { + g_free(event->text); g_free(event); } } |