--- a/libpurple/protocols/facebook/api.c Tue Aug 25 16:30:00 2015 -0400
+++ b/libpurple/protocols/facebook/api.c Tue Aug 25 16:48:44 2015 -0400
@@ -1113,6 +1113,37 @@
+ values = fb_json_values_new(root); + fb_json_values_add(values, FB_JSON_TYPE_STR, FALSE, + 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); + 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, ':'); + 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, "$");
@@ -1123,7 +1154,7 @@
- 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);
@@ -1142,7 +1173,7 @@
-fb_api_cb_mercury(FbApi *api, GByteArray *pload)
+fb_api_cb_publish_mercury(FbApi *api, GByteArray *pload) @@ -1161,7 +1192,7 @@
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);
@@ -1569,7 +1600,7 @@
void (*func) (FbApi *api, GByteArray *pload);
{"/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}
@@ -2851,19 +2882,32 @@
-fb_api_event_dup(const FbApiEvent *event)
+fb_api_event_dup(const FbApiEvent *event, gboolean deep) return g_new0(FbApiEvent, 1);
- return g_memdup(event, sizeof *event);
+ ret = g_memdup(event, sizeof *event); + ret->text = g_strdup(event->text); -fb_api_event_reset(FbApiEvent *event)
+fb_api_event_reset(FbApiEvent *event, gboolean deep) g_return_if_fail(event != NULL);
memset(event, 0, sizeof *event);
@@ -2871,6 +2915,7 @@
fb_api_event_free(FbApiEvent *event)
if (G_LIKELY(event != NULL)) {
--- a/libpurple/protocols/facebook/api.h Tue Aug 25 16:30:00 2015 -0400
+++ b/libpurple/protocols/facebook/api.h Tue Aug 25 16:48:44 2015 -0400
@@ -262,6 +262,7 @@
+ * @FB_API_EVENT_TYPE_THREAD_TOPIC: The thread topic was changed. * @FB_API_EVENT_TYPE_THREAD_USER_ADDED: A thread user was added.
* @FB_API_EVENT_TYPE_THREAD_USER_REMOVED: A thread user was removed.
@@ -269,6 +270,7 @@
+ FB_API_EVENT_TYPE_THREAD_TOPIC, FB_API_EVENT_TYPE_THREAD_USER_ADDED,
FB_API_EVENT_TYPE_THREAD_USER_REMOVED
@@ -316,6 +318,7 @@
* @type: The #FbApiEventType.
* @tid: The thread #FbId.
+ * @text: The event text. * Represents a Facebook update event.
@@ -324,6 +327,7 @@
@@ -651,6 +655,7 @@
* @event: The #FbApiEvent or #NULL.
+ * @deep: #TRUE to duplicate allocated data, otherwise #FALSE. * Duplicates an #FbApiEvent. If @event is #NULL, a new zero filled
* #FbApiEvent is returned. The returned #FbApiEvent should be freed
@@ -659,16 +664,17 @@
* Returns: The new #FbApiEvent.
-fb_api_event_dup(const FbApiEvent *event);
+fb_api_event_dup(const FbApiEvent *event, gboolean deep); * @event: The #FbApiEvent.
+ * @deep: #TRUE to free allocated data, otherwise #FALSE. -fb_api_event_reset(FbApiEvent *event);
+fb_api_event_reset(FbApiEvent *event, gboolean deep); --- a/libpurple/protocols/facebook/facebook.c Tue Aug 25 16:30:00 2015 -0400
+++ b/libpurple/protocols/facebook/facebook.c Tue Aug 25 16:48:44 2015 -0400
@@ -386,6 +386,11 @@
FB_ID_TO_STR(event->uid, uid);
+ case FB_API_EVENT_TYPE_THREAD_TOPIC: + purple_chat_conversation_set_topic(chat, uid, case FB_API_EVENT_TYPE_THREAD_USER_ADDED:
if (purple_blist_find_buddy(acct, uid) == NULL) {
g_hash_table_insert(fetch, &event->tid, event);
@@ -1247,19 +1252,14 @@
PurpleChatConversation *chat;
- acct = purple_connection_get_account(gc);
fata = purple_connection_get_protocol_data(gc);
api = fb_data_get_api(fata);
chat = purple_conversations_find_chat(gc, id);
name = purple_conversation_get_name(PURPLE_CONVERSATION(chat));
tid = FB_ID_FROM_STR(name);
- name = purple_account_get_username(acct);
- purple_chat_conversation_set_topic(chat, name, topic);
fb_api_thread_topic(api, tid, topic);